public static void RecreateNodeIds(DungeonArchitectGraphEditor editor)
        {
            var confirm = EditorUtility.DisplayDialog("Recreate Node Ids?",
                                                      "Are you sure you want to recreate node Ids?  You should do this after cloning a theme file", "Yes", "Cancel");

            if (confirm)
            {
                DungeonEditorHelper._Advanced_RecreateGraphNodeIds();
            }
        }
Esempio n. 2
0
        void CreateSpatialNodeAtMouse <T>(Vector2 screenPos) where T : SCBaseDomainNode
        {
            var worldPos = camera.ScreenToWorld(screenPos);
            var node     = DungeonEditorHelper.CreateSpatialConstraintNode <T>(assetBeingEdited, worldPos);

            BringToFront(node);
            node.SnapNode();

            SelectNode(node);
        }
Esempio n. 3
0
        protected override void OnGuiChanged()
        {
            var editorWindow = DungeonEditorHelper.GetWindowIfOpen <SpatialConstraintsEditorWindow>();

            if (editorWindow != null)
            {
                var graphEditor = editorWindow.GraphEditor;
                graphEditor.HandleGraphStateChanged();
                graphEditor.HandleNodePropertyChanged(target as GraphNode);
            }
        }
Esempio n. 4
0
        public override void HandleGraphStateChanged()
        {
            base.HandleGraphStateChanged();

            if (RealtimeUpdate)
            {
                var themeEditorWindow = DungeonEditorHelper.GetWindowIfOpen <DungeonThemeEditorWindow>();
                if (themeEditorWindow != null)
                {
                    var themeEditor = themeEditorWindow.GraphEditor;
                    themeEditor.HandleGraphStateChanged();
                }
            }

            HandleMarkedDirty();
        }
 static void OnPostprocessAllAssets(string[] importedAssets, string[] deletedAssets, string[] movedAssets, string[] movedFromAssetPaths)
 {
     DungeonEditorHelper.CreateEditorTag(GameTags.Waypoint);
     DungeonEditorHelper.CreateEditorTag(GameTags.Enemy);
     DungeonEditorHelper.CreateEditorTag(GameTags.LevelGoal);
 }
        static void CreateDefaultMarkersFor(GraphEditor graphEditor, Type builderType)
        {
            // Remove unused nodes
            // Grab the names of all the markers nodes in the graph
            var markerNames = new List <string>();

            foreach (var node in graphEditor.Graph.Nodes)
            {
                if (node is MarkerNode)
                {
                    var markerNode = node as MarkerNode;
                    markerNames.Add(markerNode.Caption);
                }
            }

            var unusedMarkers = new List <string>(markerNames.ToArray());


            // Remove markers from the unused list that have child nodes attached to it
            foreach (var node in graphEditor.Graph.Nodes)
            {
                if (node is VisualNode)
                {
                    var visualNode = node as VisualNode;
                    foreach (var parentNode in visualNode.GetParentNodes())
                    {
                        if (parentNode is MarkerNode)
                        {
                            var markerNode = parentNode as MarkerNode;
                            unusedMarkers.Remove(markerNode.Caption);
                        }
                    }
                }
            }

            // Remove markers from the unused list that are referenced by other marker emitters
            foreach (var node in graphEditor.Graph.Nodes)
            {
                if (node is MarkerEmitterNode)
                {
                    var    emitterNode = node as MarkerEmitterNode;
                    string markerName  = emitterNode.Caption;
                    // this marker is referenced by an emitter.  Remove it from the unused list
                    unusedMarkers.Remove(markerName);
                }
            }

            // Remove markers from the unused list that are required by the new builder type
            var defaultMarkerRepository = new DungeonBuilderDefaultMarkers();
            var builderMarkers          = defaultMarkerRepository.GetDefaultMarkers(builderType);

            foreach (var builderMarker in builderMarkers)
            {
                unusedMarkers.Remove(builderMarker);
            }

            // Remove all the unused markers
            var markerNodesToDelete = new List <MarkerNode>();

            foreach (var node in graphEditor.Graph.Nodes)
            {
                if (node is MarkerNode)
                {
                    var markerNode = node as MarkerNode;
                    if (unusedMarkers.Contains(markerNode.Caption))
                    {
                        markerNodesToDelete.Add(markerNode);
                    }
                }
            }

            graphEditor.DeleteNodes(markerNodesToDelete.ToArray());


            // Grab the names of all the markers nodes in the graph
            markerNames.Clear();
            foreach (var node in graphEditor.Graph.Nodes)
            {
                if (node is MarkerNode)
                {
                    var markerNode = node as MarkerNode;
                    markerNames.Add(markerNode.Caption);
                }
            }

            var markersToCreate = new List <string>();

            foreach (var builderMarker in builderMarkers)
            {
                if (!markerNames.Contains(builderMarker))
                {
                    markersToCreate.Add(builderMarker);
                }
            }

            var existingBounds = new List <Rect>();

            foreach (var node in graphEditor.Graph.Nodes)
            {
                existingBounds.Add(node.Bounds);
            }

            // Add the new nodes
            const int INTER_NODE_X = 200;
            const int INTER_NODE_Y = 300;
            int       itemsPerRow = 5;
            int       positionIndex = 0;
            int       ix, iy, x, y;
            var       markerNodeSize = new Vector2(120, 50);

            for (int i = 0; i < markersToCreate.Count; i++)
            {
                bool overlaps;
                int  numOverlapTries   = 0;
                int  MAX_OVERLAP_TRIES = 100;
                do
                {
                    ix = positionIndex % itemsPerRow;
                    iy = positionIndex / itemsPerRow;
                    x  = ix * INTER_NODE_X;
                    y  = iy * INTER_NODE_Y;
                    positionIndex++;

                    overlaps = false;
                    var newNodeBounds = new Rect(x, y, markerNodeSize.x, markerNodeSize.y);
                    foreach (var existingBound in existingBounds)
                    {
                        if (newNodeBounds.Overlaps(existingBound))
                        {
                            overlaps = true;
                            break;
                        }
                    }
                    numOverlapTries++;
                } while (overlaps && numOverlapTries < MAX_OVERLAP_TRIES);

                var newNode = GraphOperations.CreateNode <MarkerNode>(graphEditor.Graph);
                DungeonEditorHelper.AddToAsset(graphEditor.Graph, newNode);
                newNode.Position = new Vector2(x, y);
                newNode.Caption  = markersToCreate[i];
            }
        }