public static AssetFile FromXml(XmlReader r, List<string> log)
 {
     AssetFile file = new AssetFile();
     file.FromXmlInternal(r, log);
     return file;
 }
 protected void BuildAllParticleScriptAssets()
 {
     AssetTypeEnum assetType = AssetTypeEnum.ParticleScript;
     AssetFileEnum fileType = AssetFileEnum.ParticleScript;
     List<string> extensions = AssetFile.AllExtensionsForEnum(fileType);
     string particleDir = AssetFile.DirectoryForFileEnum(assetType, true, fileType);
     DirectoryInfo info = new DirectoryInfo(MakeRepositoryFilePath(particleDir));
     FileInfo[] files = info.GetFiles();
      			foreach (FileInfo fileInfo in files) {
         string extension = fileInfo.Extension.ToLower();
         if (extensions.IndexOf(extension) < 0)
             continue;
         string baseName = Path.GetFileNameWithoutExtension(fileInfo.Name) + "_" +
             AssetTypeDesc.AssetTypeEnumFileName(assetType);
         string defPath = MakeRepositoryFilePath("AssetDefinitions\\" + baseName + ".asset");
         if (new FileInfo(defPath).Exists) {
             Warn("Skipping generated of asset definition '{0}', because it already exists", defPath);
             continue;
         }
         AssetFile assetFile = new AssetFile(MakeFullFilePath(particleDir, fileInfo.Name), fileType);
         AssetDefinition def = new AssetDefinition(baseName, assetType, assetFile);
         // Add the textures
         Dictionary<string, List<string>> uses = ScriptParser.ParseParticleScript(fileInfo.FullName);
         List<string> references = new List<string>();
         AddParsedReferences(def, fileInfo.FullName, references, uses, "material",
                              assetType, AssetFileEnum.Material);
         def.SetDescriptionFromName();
         def.WriteXmlFile(defPath);
     }
 }
 protected void BuildSingleFileAssets(string dir, AssetTypeEnum assetType, AssetFileEnum fileType)
 {
     List<string> extensions = AssetFile.AllExtensionsForEnum(fileType);
     DirectoryInfo info = new DirectoryInfo(MakeRepositoryFilePath(dir));
     FileInfo[] files = info.GetFiles();
     foreach (FileInfo fileInfo in files) {
         string extension = fileInfo.Extension.ToLower();
         if (extensions.IndexOf(extension) < 0)
             continue;
         string baseName = Path.GetFileNameWithoutExtension(fileInfo.Name) + "_" +
             AssetTypeDesc.AssetTypeEnumFileName(assetType);
         string defPath = MakeRepositoryFilePath("AssetDefinitions\\" + baseName + ".asset");
         if (new FileInfo(defPath).Exists) {
             Warn("Skipping generated of asset definition '{0}', because it already exists", defPath);
             continue;
         }
         AssetFile file = new AssetFile(MakeFullFilePath(dir, fileInfo.Name), fileType);
         AssetDefinition def = new AssetDefinition(baseName, assetType, file);
         def.SetDescriptionFromName();
         def.WriteXmlFile(defPath);
     }
 }
        protected void AddParsedReferences(AssetDefinition def, string referee, List<string> references,
										   Dictionary<string, List<string>> introducers, string introducer,
										   AssetTypeEnum assetType, AssetFileEnum fileType)
        {
            List<string> usedNames;
            if (introducers.TryGetValue(introducer, out usedNames)) {
                string dir = AssetFile.DirectoryForFileEnum(assetType, false, fileType);
                foreach (string referredTo in usedNames) {
                    string referredToFile = MakeFullFilePath(dir, referredTo);
                    if (references.IndexOf(referredToFile) >= 0)
                        continue;
                    if (!new FileInfo(MakeRepositoryFilePath(referredToFile)).Exists) {
                        Warn("Skipping file '{0}', referenced by '{1}', because the file does not exist",
                             referredToFile, referee);
                        continue;
                    }
                    references.Add(referredToFile);
                    AssetFile assetFile = new AssetFile(referredToFile, fileType);
                    def.Files.Add(assetFile);
                }
            }
        }
 public void BuildPlantTypeAssets()
 {
     AssetTypeEnum assetType = AssetTypeEnum.PlantType;
     XmlDocument doc = new XmlDocument();
     doc.Load(MakeRepositoryFilePath("Textures\\DetailVeg.imageset"));
     XmlElement root = doc.DocumentElement;
     XmlElement child = (XmlElement)root.FirstChild;
     while(child != null) {
         switch(child.LocalName) {
         case "ImageRect":
             string name = (string)child.Attributes[0].InnerText ;
             AssetFile file = new AssetFile("Textures\\DetailVeg.imageset", AssetFileEnum.ImageSet);
             AssetDefinition def = new AssetDefinition(name, AssetTypeEnum.PlantType, file);
             def.Files.Add(new AssetFile("AssetDefinitions\\DetailVeg_Material.asset",
                                         AssetFileEnum.AssetDef));
             string baseName = name + "_" + AssetTypeDesc.AssetTypeEnumFileName(assetType);
             def.SetDescriptionFromName();
             string defPath = "AssetDefinitions\\" + baseName + ".asset";
             def.WriteXmlFile(MakeRepositoryFilePath(defPath));
             break;
         default:
             break;
         }
         child = (XmlElement)child.NextSibling;
     }
 }
 public void BuildAllMeshAssets()
 {
     AssetTypeEnum assetType = AssetTypeEnum.Mesh;
     AssetFileEnum fileType = AssetFileEnum.Mesh;
     string meshDir = AssetFile.DirectoryForFileEnum(assetType, true, fileType);
     List<string> extensions = AssetFile.AllExtensionsForEnum(fileType);
     DirectoryInfo info = new DirectoryInfo(MakeRepositoryFilePath(meshDir));
     FileInfo[] files = info.GetFiles();
     foreach (FileInfo fileInfo in files) {
         string extension = fileInfo.Extension.ToLower();
         if (extensions.IndexOf(extension) < 0)
             continue;
         string fileName = Path.GetFileNameWithoutExtension(fileInfo.Name);
         string baseName = fileName + "_" + AssetTypeDesc.AssetTypeEnumFileName(assetType);
         string meshFile = MakeFullFilePath(meshDir, fileInfo.Name);
         AssetFile file = new AssetFile(meshFile, fileType);
         AssetDefinition def = new AssetDefinition(baseName, assetType, file);
         // Find the corresponding material and physics files
         string materialFile = MakeFullFilePath(AssetFile.DirectoryForFileEnum(assetType, false, AssetFileEnum.Material),
                                                fileName + ".material");
         if (File.Exists(MakeRepositoryFilePath(materialFile))) {
             string assetDir = AssetFile.DirectoryForFileEnum(AssetTypeEnum.Mesh, false,
                                                              AssetFileEnum.AssetDef);
             string materialAsset = MakeFullFilePath(assetDir, fileName + "_Material.asset");
             file = new AssetFile(materialAsset, AssetFileEnum.AssetDef);
             def.Files.Add(file);
         }
         else
             Warn("For mesh '{0}', didn't find material file '{1}'",
                  meshFile, materialFile);
         string physicsFile = MakeFullFilePath(AssetFile.DirectoryForFileEnum(assetType, false, AssetFileEnum.Physics),
                                               fileName + ".physics");
         if (File.Exists(MakeRepositoryFilePath(physicsFile))) {
             file = new AssetFile(physicsFile, AssetFileEnum.Physics);
             def.Files.Add(file);
         }
         else
             Warn("For mesh '{0}', didn't find physics file '{1}'",
                  meshFile, physicsFile);
         // It's a long shot, and misleading in the case of the
         // rocketboxers, but see if there is a matching skeleton
         string skeletonFile = MakeFullFilePath(AssetFile.DirectoryForFileEnum(assetType, false, AssetFileEnum.Skeleton),
                                                fileName + ".skeleton");
         if (File.Exists(MakeRepositoryFilePath(skeletonFile))) {
             file = new AssetFile(skeletonFile, AssetFileEnum.Skeleton);
             def.Files.Add(file);
         }
         else
             Warn("For mesh '{0}', didn't find skeleton file '{1}'",
                  meshFile, skeletonFile);
         def.SetDescriptionFromName();
         string defPath = MakeRepositoryFilePath("AssetDefinitions\\" + baseName + ".asset");
         def.WriteXmlFile(defPath);
     }
 }
 public AssetDefinition(string name, AssetTypeEnum typeEnum, AssetFile file)
 {
     this.name = name;
     description = "";
     category = "";
     this.typeEnum = typeEnum;
     status = AssetStatusEnum.Complete;
     breakage = "";
     List<AssetFile> files = new List<AssetFile>();
     files.Add(file);
     this.files = files;
     properties = new List<AssetProperty>();
 }
 private void encacheAssetDefinition(out List<string> filesToCopy, out List<string> fileDestinations)
 {
     assetDefinition = new AssetDefinition();
     assetDefinition.Name = assetNameTextBox.Text;
     assetDefinition.Description = descriptionTextBox.Text;
     assetDefinition.TypeEnum = AssetTypeDesc.AssetTypeEnumFromName(assetTypeComboBox.Text);
     assetDefinition.Category = categoryComboBox.Text;
     assetDefinition.Properties = savedProperties;
     int fileNumber = 0;
     filesToCopy = new List<string>();
     fileDestinations = new List<string>();
     foreach (FileDescControls desc in allControls)
     {
         AssetTypeFileDesc d = desc.desc;
         if (desc.useTextBox) {
             if (desc.textBox.Text.Length > 0)
             {
                 string s = desc.textBox.Text.ToString();
                 string targetFile = MakeDestinationFile(assetDefinition.TypeEnum, s, d.FileTypeEnum, fileNumber);
                 AssetFile file = new AssetFile(targetFile, d.FileTypeEnum);
                 if (copyFromSource(s)) {
                     filesToCopy.Add(s);
                     fileDestinations.Add(file.TargetFile);
                 }
                 assetDefinition.Files.Add(file);
                 fileNumber++;
             }
         }
         else
         {
             for (int i = 0; i < desc.listBox.Items.Count; i++)
             {
                 AssetFile file = new AssetFile();
                 file.FileTypeEnum = d.FileTypeEnum;
                 string s = desc.listBox.Items[i].ToString();
                 string targetFile = MakeDestinationFile(assetDefinition.TypeEnum, s, d.FileTypeEnum, fileNumber);
                 file.TargetFile = targetFile;
                 if (copyFromSource(s)) {
                     filesToCopy.Add(s);
                     fileDestinations.Add(file.TargetFile);
                 }
                 assetDefinition.Files.Add(file);
                 fileNumber++;
             }
         }
     }
     assetDefinition.ComputeStatus();
 }