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)
\r
33 effectmap.Add(i.Name, i);
\r
35 catch (ArgumentException)
\r
37 throw new ArgumentException(string.Format(".xmlの記述に誤りがあります。Effect Name:{0} は既に追加されています。", i.Name));
\r
40 foreach (ImportTextureInfo i in textures)
\r
44 texturemap.Add(i.Name, i);
\r
46 catch (ArgumentException)
\r
48 throw new ArgumentException(string.Format(".xmlの記述に誤りがあります。Textures Name:{0} は既に追加されています。", i.Name));
\r
51 foreach (ImportMaterialInfo i in materials)
\r
55 materialmap.Add(i.Name, i);
\r
57 catch (ArgumentException)
\r
59 throw new ArgumentException(string.Format(".xmlの記述に誤りがあります。Materials Name:{0} は既に追加されています。", i.Name));
\r
63 foreach(ImportEffectInfo i in effects) i.PostLoad(this);
\r
64 foreach(ImportTextureInfo i in textures) i.PostLoad(this);
\r
65 foreach(ImportMaterialInfo i in materials) i.PostLoad(this);
\r
68 public ImportEffectInfo GetEffect(string name)
\r
70 ImportEffectInfo info= null;
\r
71 effectmap.TryGetValue(name, out info);
\r
75 public ImportTextureInfo GetTexture(string name)
\r
77 ImportTextureInfo info= null;
\r
78 texturemap.TryGetValue(name, out info);
\r
82 public ImportMaterialInfo GetMaterial(string name)
\r
84 ImportMaterialInfo info= null;
\r
85 materialmap.TryGetValue(name, out info);
\r
89 public static ImportInfo Load(string file)
\r
91 using(FileStream fs= File.OpenRead(file))
\r
93 ImportInfo ii = new XmlSerializer(Type).Deserialize(fs) as ImportInfo;
\r
100 public static void Save(string file, ImportInfo ii)
\r
102 using(FileStream fs= File.OpenWrite(file))
\r
105 new XmlSerializer(Type).Serialize(fs, ii);
\r
110 public class ImportInfoItem
\r
112 [XmlIgnore] protected ImportInfo Owner;
\r
114 public virtual void PostLoad(ImportInfo owner)
\r
116 this.Owner = owner;
\r
120 public class ImportEffectInfo : ImportInfoItem
\r
122 [XmlAttribute] public string Name;
\r
124 public ImportEffectInfo()
\r
128 public ImportEffectInfo(TSOEffect eff)
\r
133 public override string ToString()
\r
135 return "Name:" + Name;
\r
139 public class ImportTextureInfo : ImportInfoItem
\r
141 [XmlAttribute] public string Name;
\r
142 [XmlAttribute] public string File;
\r
143 [XmlAttribute] public int BytesPerPixel;
\r
144 [XmlAttribute] public int Width;
\r
145 [XmlAttribute] public int Height;
\r
147 public ImportTextureInfo()
\r
151 public ImportTextureInfo(TSOTex tex)
\r
154 File = tex.File.Trim('"');
\r
155 BytesPerPixel = tex.Depth;
\r
157 Height = tex.Height;
\r
160 public override string ToString()
\r
162 return "Name:" + Name
\r
164 +", BytesPerPixel:" + BytesPerPixel
\r
165 +", Width:" + Width
\r
166 +", Height:" + Height
\r
171 public class ImportMaterialInfo : ImportInfoItem
\r
173 [XmlAttribute] public string Name;
\r
174 [XmlAttribute] public string File;
\r
175 [XmlIgnore] public Dictionary<string, string> parameters;
\r
176 [XmlIgnore] public ImportTextureInfo color;
\r
177 [XmlIgnore] public ImportTextureInfo shadow;
\r
179 public ImportMaterialInfo()
\r
183 public ImportMaterialInfo(TSOMaterial mtl)
\r
186 File = mtl.File.Trim('"');
\r
189 public override void PostLoad(ImportInfo owner)
\r
191 base.PostLoad(owner);
\r
193 string dir = Path.GetDirectoryName(owner.filename);
\r
194 string codefile= Path.Combine(dir, Name);
\r
196 if(System.IO.File.Exists(codefile))
\r
198 TSOMaterialCode code= TSOMaterialCode.GenerateFromFile(codefile);
\r
201 if(code.TryGetValue("ColorTex", out p))
\r
202 color = owner.GetTexture(p.Value);
\r
204 if(code.TryGetValue("ShadeTex", out p))
\r
205 shadow = owner.GetTexture(p.Value);
\r
209 public override string ToString()
\r
211 return "Name:" + Name
\r