Exemplo n.º 1
0
        public static bool UpdateAsset(Object asset,
                                       out string error, out string successMessage)
        {
            error          = "";
            successMessage = "";

            if (asset is MeshAsset)
            {
                MeshAsset mesh = asset as MeshAsset;

                var result = ImportMesh.import(mesh.SourceFilename, mesh.ImportedFilename);

                if (string.IsNullOrEmpty(result))
                {
                    successMessage = "Successfully updated mesh: " + mesh.Name;

                    mesh.LastUpdated = DateTime.Now;
                    AssetMetadata.createMeshMetadata(mesh);

                    return(true);
                }
            }
            else if (asset is TextureAsset)
            {
                TextureAsset texture = asset as TextureAsset;

                var result = ImportTexture.import(texture.Format, texture.ChannelMappings, texture.ImportedFilename);

                if (string.IsNullOrEmpty(result))
                {
                    successMessage      = "Successfully updated texture: " + texture.Name;
                    texture.LastUpdated = DateTime.Now;
                    AssetMetadata.createTextureMetadata(texture);

                    return(true);
                }
                else
                {
                    error = "ERROR: Updating texture: " + texture.Name + " failed!" + Environment.NewLine + result;
                }
            }
            else if (asset is ShaderAsset)
            {
                ShaderAsset shader = asset as ShaderAsset;

                var result = ImportShader.import(shader.SourceFilename, shader.ImportedFilename);

                if (string.IsNullOrEmpty(result))
                {
                    successMessage     = "Successfully updated shader: " + shader.Name;
                    shader.LastUpdated = DateTime.Now;
                    AssetMetadata.createShaderMetadata(shader);

                    return(true);
                }
                else
                {
                    error = "ERROR: Updating shader: " + shader.Name + " failed!" + Environment.NewLine + result;
                }
            }
            else if (asset is MaterialAsset)
            {
                MaterialAsset material = asset as MaterialAsset;

                var result = MaterialImporter.Import(material);

                if (result)
                {
                    successMessage       = "Successfully updated material: " + material.Name;
                    material.LastUpdated = DateTime.Now;
                    AssetMetadata.createMaterialMetadata(material);

                    return(true);
                }
                else
                {
                    error = "ERROR: Updating material: " + material.Name + " failed!" + Environment.NewLine;
                }
            }
            else if (asset is StateGroupAsset)
            {
                var stateGroup = asset as StateGroupAsset;

                var result = StateGroupImporter.Import(stateGroup);

                if (result)
                {
                    successMessage         = "Successfully updated state group: " + stateGroup.Name;
                    stateGroup.LastUpdated = DateTime.Now;
                    AssetMetadata.createStateGroupMetadata(stateGroup);

                    return(true);
                }
                else
                {
                    error = "ERROR: Updating state group: " + stateGroup.Name + " failed!" + Environment.NewLine + result;
                }
            }

            return(false);
        }
        private void Save(object sender, RoutedEventArgs e)
        {
            if (string.IsNullOrEmpty(asset.Name) ||
                string.IsNullOrEmpty(asset.Description))
            {
                MessageBox.Show("Name/Description can't be empty!");
                return;
            }

            if (VertexGeometry.IsChecked == true)
            {
                if (asset.VertexShader == null || asset.GeometryShader == null)
                {
                    MessageBox.Show("Vertex/Geometry shader needs to be selected");
                    return;
                }
            }
            else if (VertexGeometryPixel.IsChecked == true)
            {
                if (asset.VertexShader == null || asset.GeometryShader == null || asset.PixelShader == null)
                {
                    MessageBox.Show("Vertex/Geometry/Pixel shader needs to be selected");
                    return;
                }
            }
            else if (VertexPixel.IsChecked == true)
            {
                if (asset.VertexShader == null || asset.PixelShader == null)
                {
                    MessageBox.Show("Vertex/Pixel shader needs to be selected");
                    return;
                }
            }

            foreach (var texture in asset.TextureBindings)
            {
                if (texture.Binding == null)
                {
                    MessageBox.Show("Must specify texture binding, its currently blank");
                    return;
                }
            }

            foreach (var sampler in asset.Samplers)
            {
                if (sampler.Name == "UNNAMED" || string.IsNullOrEmpty(sampler.Name))
                {
                    MessageBox.Show("a sampler wasn't given a name, please go back and name it");
                    return;
                }
            }

            var stateGroupPath = Path.Combine(Properties.Settings.Default.ImportedAssetsPath, "StateGroups");
            var outputName     = Path.Combine(stateGroupPath, Path.ChangeExtension(asset.Name, "stgp"));

            if (!Directory.Exists(stateGroupPath))
            {
                Directory.CreateDirectory(stateGroupPath);
            }

            asset.ImportedFilename = Path.GetFullPath(outputName);

            if (!InEditMode)
            {
                if (File.Exists(asset.ImportedFilename))
                {
                    MessageBox.Show("An imported state group with the same name already exists, stopping");
                    return;
                }
            }

            StateGroupImporter.Import(asset);

            this.DialogResult = true;
            this.Close();
        }