private void ButtonPlay_Click(ProcedureUI.Button sender)
        {
            var obj = GetObject();

            if (obj == null)
            {
                return;
            }

            var oldValue = obj.Activated;

            //update
            if (obj.Activated)
            {
                obj.RecreateData(false);
            }
            else
            {
                obj.Activated = true;
            }

            //undo
            if (oldValue != obj.Activated)
            {
                var property   = (Metadata.Property)obj.MetadataGetMemberBySignature("property:Activated");
                var undoAction = new UndoActionPropertiesChange(new UndoActionPropertiesChange.Item(obj, property, oldValue, null));
                Provider.DocumentWindow.Document.CommitUndoAction(undoAction);
            }
        }
        private void ButtonBuild_Click(ProcedureUI.Button sender)
        {
            var pathfinding = GetObject();

            if (pathfinding == null)
            {
                return;
            }

            var oldNavMeshData = pathfinding.NavMeshData;

            if (!pathfinding.BuildNavMesh(out var error))
            {
                Log.Error(error);
                return;
            }

            //undo
            {
                var property = (Metadata.Property)pathfinding.MetadataGetMemberBySignature("property:NavMeshData");

                var undoItems = new List <UndoActionPropertiesChange.Item>();
                undoItems.Add(new UndoActionPropertiesChange.Item(pathfinding, property, oldNavMeshData, null));
                var undoAction = new UndoActionPropertiesChange(undoItems.ToArray());

                Provider.DocumentWindow.Document.UndoSystem.CommitAction(undoAction);
                Provider.DocumentWindow.Document.Modified = true;
            }
        }
Ejemplo n.º 3
0
        protected override void OnBakeIntoMesh(DocumentInstance document, UndoMultiAction undoMultiAction)
        {
            base.OnBakeIntoMesh(document, undoMultiAction);

            var mesh       = (Component_Mesh)Parent;
            var geometries = mesh.GetComponents <Component_MeshGeometry>();
            int aa         = 0;

            foreach (var geometry in geometries)
            {
                var positions = geometry.VerticesExtractChannel <Vector3F>(VertexElementSemantic.Position);
                if (positions != null)
                {
                    aa = aa + 1;
                    if (DataN == 0 || DataN == aa)
                    {
                        var vertexStructure = geometry.VertexStructure.Value;
                        vertexStructure.GetInfo(out var vertexSize, out _);

                        var oldValue    = geometry.Vertices;
                        var vertices    = geometry.Vertices.Value;
                        var vertexCount = vertices.Length / vertexSize;

                        var newPositions = new Vector3F[positions.Length];
                        for (int n = 0; n < positions.Length; n++)
                        {
                            ProcessVertex(aa, ref positions[n], out newPositions[n]);
                        }

                        var newVertices = (byte[])vertices.Clone();
                        if (geometry.VerticesWriteChannel(VertexElementSemantic.Position, newPositions, newVertices))
                        {
                            //update property
                            geometry.Vertices = newVertices;

                            //undo
                            if (undoMultiAction != null)
                            {
                                var property   = (Metadata.Property)geometry.MetadataGetMemberBySignature("property:Vertices");
                                var undoAction = new UndoActionPropertiesChange(new UndoActionPropertiesChange.Item(geometry, property, oldValue));
                                undoMultiAction.AddAction(undoAction);
                            }
                        }
                    }
                }
            }
        }
        protected override void OnBakeIntoMesh(DocumentInstance document, UndoMultiAction undoMultiAction)
        {
            base.OnBakeIntoMesh(document, undoMultiAction);

            var mesh       = (Component_Mesh)Parent;
            var geometries = mesh.GetComponents <Component_MeshGeometry>();

            var bounds = Bounds.Cleared;
            {
                foreach (var geometry in geometries)
                {
                    var positions = geometry.VerticesExtractChannel <Vector3F>(VertexElementSemantic.Position);
                    if (positions != null)
                    {
                        foreach (var p in positions)
                        {
                            bounds.Add(p);
                        }
                    }
                }
                //bounds.Expand( ExtendBounds );
            }

            var tiles = Tiles.Value;

            foreach (var geometry in geometries)
            {
                var positions = geometry.VerticesExtractChannel <Vector3F>(VertexElementSemantic.Position);
                var normals   = geometry.VerticesExtractChannel <Vector3F>(VertexElementSemantic.Normal);
                if (positions != null && normals != null)
                {
                    var vertexStructure = geometry.VertexStructure.Value;
                    vertexStructure.GetInfo(out var vertexSize, out _);

                    var oldValue    = geometry.Vertices;
                    var vertices    = geometry.Vertices.Value;
                    var vertexCount = vertices.Length / vertexSize;

                    var newTexCoords = new Vector2F[vertexCount];
                    for (int n = 0; n < vertexCount; n++)
                    {
                        ProcessVertex(ref tiles, ref bounds, ref positions[n], ref normals[n], out newTexCoords[n]);
                    }

                    var newVertices = (byte[])vertices.Clone();
                    if (geometry.VerticesWriteChannel(VertexElementSemantic.TextureCoordinate0, newTexCoords, newVertices))
                    {
                        //update property
                        geometry.Vertices = newVertices;

                        //undo
                        if (undoMultiAction != null)
                        {
                            var property   = (Metadata.Property)geometry.MetadataGetMemberBySignature("property:Vertices");
                            var undoAction = new UndoActionPropertiesChange(new UndoActionPropertiesChange.Item(geometry, property, oldValue));
                            undoMultiAction.AddAction(undoAction);
                        }
                    }
                }
            }
        }