2 using System.Collections.Generic;
\r
5 using System.Xml.Serialization;
\r
9 [XmlRoot("TsoImportInfo")]
\r
10 public class ImportInfo
\r
12 [XmlIgnore] public string filename;
\r
13 [XmlElement("Effect")] public List<ImportEffectInfo> effects = new List<ImportEffectInfo>();
\r
14 [XmlElement("Textures")] public List<ImportTextureInfo> textures = new List<ImportTextureInfo>();
\r
15 [XmlElement("Materials")] public List<ImportMaterialInfo> materials = new List<ImportMaterialInfo>();
\r
17 private Dictionary<string, ImportEffectInfo> effectmap;
\r
18 private Dictionary<string, ImportTextureInfo> texturemap;
\r
19 private Dictionary<string, ImportMaterialInfo> materialmap;
\r
21 public static Type Type { get { return typeof(ImportInfo); } }
\r
23 public void PostLoad()
\r
25 effectmap = new Dictionary<string, ImportEffectInfo>();
\r
26 texturemap = new Dictionary<string, ImportTextureInfo>();
\r
27 materialmap = new Dictionary<string, ImportMaterialInfo>();
\r
29 foreach(ImportEffectInfo i in effects) effectmap .Add(i.Name, i);
\r
30 foreach(ImportTextureInfo i in textures) texturemap .Add(i.Name, i);
\r
31 foreach(ImportMaterialInfo i in materials) materialmap.Add(i.Name, i);
\r
33 foreach(ImportEffectInfo i in effects) i.PostLoad(this);
\r
34 foreach(ImportTextureInfo i in textures) i.PostLoad(this);
\r
35 foreach(ImportMaterialInfo i in materials) i.PostLoad(this);
\r
38 public ImportEffectInfo GetEffect(string name)
\r
40 ImportEffectInfo info= null;
\r
41 effectmap.TryGetValue(name, out info);
\r
45 public ImportTextureInfo GetTexture(string name)
\r
47 ImportTextureInfo info= null;
\r
48 texturemap.TryGetValue(name, out info);
\r
52 public ImportMaterialInfo GetMaterial(string name)
\r
54 ImportMaterialInfo info= null;
\r
55 materialmap.TryGetValue(name, out info);
\r
59 public static ImportInfo Load(string file)
\r
61 using(FileStream fs= File.OpenRead(file))
\r
63 ImportInfo ii = new XmlSerializer(Type).Deserialize(fs) as ImportInfo;
\r
70 public static void Save(string file, ImportInfo ii)
\r
72 using(FileStream fs= File.OpenWrite(file))
\r
75 new XmlSerializer(Type).Serialize(fs, ii);
\r
80 public class ImportInfoItem
\r
82 [XmlIgnore] protected ImportInfo Owner;
\r
84 public virtual void PostLoad(ImportInfo owner)
\r
90 public class ImportEffectInfo : ImportInfoItem
\r
92 [XmlAttribute] public string Name;
\r
94 public ImportEffectInfo()
\r
98 public ImportEffectInfo(TSOEffect eff)
\r
103 public override string ToString()
\r
105 return "Name:" + Name;
\r
109 public class ImportTextureInfo : ImportInfoItem
\r
111 [XmlAttribute] public string Name;
\r
112 [XmlAttribute] public string File;
\r
113 [XmlAttribute] public int BytesPerPixel;
\r
114 [XmlAttribute] public int Width;
\r
115 [XmlAttribute] public int Height;
\r
117 public ImportTextureInfo()
\r
121 public ImportTextureInfo(TSOTex tex)
\r
124 File = tex.File.Trim('"');
\r
125 BytesPerPixel = tex.Depth;
\r
127 Height = tex.Height;
\r
130 public override string ToString()
\r
132 return "Name:" + Name
\r
134 +", BytesPerPixel:" + BytesPerPixel
\r
135 +", Width:" + Width
\r
136 +", Height:" + Height
\r
141 public class ImportMaterialInfo : ImportInfoItem
\r
143 [XmlAttribute] public string Name;
\r
144 [XmlAttribute] public string File;
\r
145 [XmlIgnore] public Dictionary<string, string> parameters;
\r
146 [XmlIgnore] public ImportTextureInfo color;
\r
147 [XmlIgnore] public ImportTextureInfo shadow;
\r
149 public ImportMaterialInfo()
\r
153 public ImportMaterialInfo(TSOMaterial mtl)
\r
156 File = mtl.File.Trim('"');
\r
159 public override void PostLoad(ImportInfo owner)
\r
161 base.PostLoad(owner);
\r
163 string dir = Path.GetDirectoryName(owner.filename);
\r
164 string codefile= Path.Combine(dir, Name);
\r
166 if(System.IO.File.Exists(codefile))
\r
168 TSOMaterialCode code= TSOMaterialCode.GenerateFromFile(codefile);
\r
171 if(code.TryGetValue("ColorTex", out p))
\r
172 color = owner.GetTexture(p.Value);
\r
174 if(code.TryGetValue("ShadeTex", out p))
\r
175 shadow = owner.GetTexture(p.Value);
\r
179 public override string ToString()
\r
181 return "Name:" + Name
\r