Esempio n. 1
0
 private void ContextCreateNode(NodeData data)
 {
     data.Position = _mousePosProvider.MousePosition;
     Tree.NodeData.AddData(data);
     BTWindow.SetDirty("Add Node");
     GenerateNode(data);
     OnStructureChanged?.Invoke();
 }
Esempio n. 2
0
        public void InitSamplePolygonAdd()
        {
            if (mouseState == MouseState.Drawing && currentStructure is Polygon)
            {
                TryClosePolygon(currentStructure as Polygon);
            }

            mouseState = MouseState.PutingSample;
            Update();
            if (currentStructure is Polygon)
            {
                OnStructureChanged?.Invoke(this, currentStructure as Polygon);
            }
        }
Esempio n. 3
0
        private void Canvas_MouseDown(object sender, MouseEventArgs e)
        {
            //handle add sample
            if (mouseState == MouseState.PutingSample)
            {
                var polygon = Polygon.GetSampleSquare();
                polygon.Move(e.Location);
                polygons.Add(polygon);
                OnStructureChanged?.Invoke(this, polygon);
                Update();
                mouseState = MouseState.Normal;
                return;
            }

            if (currentStructure == null)
            {
                return;
            }

            //handle add
            if (mouseState == MouseState.Drawing)
            {
                if (!(currentStructure is Polygon))
                {
                    return;
                }

                var polygon = currentStructure as Polygon;
                var result  = polygon.AddVertex(e.Location);
                OnStructureChanged?.Invoke(this, polygon);
                if (result == Polygon.AddVertexResult.Closed)
                {
                    mouseState = MouseState.Normal;
                }

                Update();
                return;
            }

            //handle dragging
            previousMousePosition = e.Location;
            if (currentStructure.HitTest(e.Location))
            {
                if (mouseState == MouseState.Normal)
                {
                    mouseState = MouseState.Dragging;
                }
            }
        }
Esempio n. 4
0
        public void HandleMouseDown()
        {
            if (mouseState == MouseState.Dragging)
            {
                Canvas_MouseUp(this, null);
            }

            if (!(currentStructure is Polygon))
            {
                return;
            }

            if (mouseState == MouseState.Drawing && !IsMouseOver())
            {
                TryClosePolygon(currentStructure as Polygon);
                Update();
                OnStructureChanged?.Invoke(this, currentStructure as Polygon);
            }
        }
Esempio n. 5
0
        public void InitPolygonAdd()
        {
            if (mouseState == MouseState.Drawing && currentStructure is Polygon)
            {
                TryClosePolygon(currentStructure as Polygon);
            }

            if (mouseState != MouseState.Normal)
            {
                return;
            }

            mouseState = MouseState.Drawing;
            var polygon = new Polygon();

            currentStructure = polygon;
            polygons.Add(polygon);
            Update();
            OnStructureChanged?.Invoke(this, polygon);
        }
Esempio n. 6
0
        private void UnserializeAndPaste(string operationName, string dataString)
        {
            var newNodeData = CopyPasteSerializer.Deserialize(dataString, GetAvailableNodeIndex(), MousePosition);

            Tree.NodeData.AddData(newNodeData);
            var newNodes = new List <BTNode>();

            foreach (var data in newNodeData)
            {
                var newNode = GenerateNode(data);
                newNodes.Add(newNode);
            }

            foreach (var node in newNodes)
            {
                CreateEdgesForNode(node);
            }

            OnStructureChanged?.Invoke();
            BTWindow.SetDirty("Paste Elements");
        }
Esempio n. 7
0
        private GraphViewChange GraphChanged(GraphViewChange change)
        {
            if (!_isInitialized)
            {
                return(change);
            }

            if (change.elementsToRemove != null)
            {
                // Remove entry node from change
                change.elementsToRemove = change.elementsToRemove.Where(e => !e.IsEntryNode()).ToList();
                var edges = change.elementsToRemove.Where(e => e is Edge).Select(e => (Edge)e).ToArray();

                if (edges.Length > 0)
                {
                    var nodesToUpdate = RemoveConnectionsByEdges(edges);
                    BTWindow.SetDirty("Delete Connections");

                    foreach (var n in nodesToUpdate)
                    {
                        n.EdgesChangedExternally();
                    }
                }

                var nodes = ToNodes(change.elementsToRemove).ToArray();
                var data  = nodes.Select(n => n.Data).ToArray();

                if (data.Length > 0)
                {
                    Tree.NodeData.RemoveData(data);
                    BTWindow.SetDirty("Delete Nodes");

                    foreach (var n in nodes)
                    {
                        _nodes.Remove(n);
                        n.OnReconnect -= ReconnectNode;
                        n.WasDeleted();
                    }

                    BTNode.AnyNodeDeleted();
                }

                OnStructureChanged?.Invoke();
            }
            else if (change.movedElements != null)
            {
                var nodes = ToNodes(change.movedElements).ToArray();

                foreach (var n in nodes)
                {
                    n.Data.Position = n.GetWorldPosition();
                }

                BTWindow.SetDirty($"Move Nodes");
            }
            else if (change.edgesToCreate != null && change.edgesToCreate.Count > 0)
            {
                var nodesToUpdate = new HashSet <BTNode>(change.edgesToCreate.Select(e => e.output.node as BTNode).ToArray());

                foreach (var e in change.edgesToCreate)
                {
                    CreateConnectionByEdge(e);
                }

                foreach (var n in nodesToUpdate)
                {
                    n.EdgesChangedExternally();
                }

                BTWindow.SetDirty("Connect Nodes");
                OnStructureChanged?.Invoke();
            }

            return(change);
        }
        private static void StructureChanged(Structure structure)
        {
            OnStructureChanged?.Invoke(structure);

            Debug.Log($"Structure '{structure.Name}' has changed.");
        }