source: OniSplit/Xml/OnieXmlExporter.cs@ 1194

Last change on this file since 1194 was 1114, checked in by iritscen, 5 years ago

Adding OniSplit source code (v0.9.99.0). Many thanks to Neo for all his work over the years.

File size: 3.2 KB
Line 
1using System.Xml;
2using Oni.Particles;
3
4namespace Oni.Xml
5{
6 internal class OnieXmlExporter : RawXmlExporter
7 {
8 private OnieXmlExporter(BinaryReader reader, XmlWriter xml)
9 : base(reader, xml)
10 {
11 }
12
13 public static void Export(BinaryReader reader, XmlWriter xml)
14 {
15 var exporter = new OnieXmlExporter(reader, xml);
16 exporter.Export();
17 }
18
19 private void Export()
20 {
21 Reader.Skip(8);
22 var impacts = new string[Reader.ReadInt32()];
23 var materials = new string[Reader.ReadInt32()];
24 var particles = new ImpactEffectParticle[Reader.ReadInt32()];
25 var sounds = new ImpactEffectSound[Reader.ReadInt32()];
26 var effects = new ImpactEffect[Reader.ReadInt32()];
27 Reader.Skip(4);
28
29 for (int i = 0; i < impacts.Length; i++)
30 {
31 impacts[i] = Reader.ReadString(128);
32 Reader.Skip(4);
33 }
34
35 for (int i = 0; i < materials.Length; i++)
36 {
37 materials[i] = Reader.ReadString(128);
38 Reader.Skip(4);
39 }
40
41 for (int i = 0; i < impacts.Length; i++)
42 {
43 Reader.Skip(8);
44 }
45
46 for (int i = 0; i < particles.Length; i++)
47 {
48 particles[i] = new ImpactEffectParticle(Reader);
49 }
50
51 for (int i = 0; i < sounds.Length; i++)
52 {
53 sounds[i] = new ImpactEffectSound(Reader);
54 }
55
56 for (int i = 0; i < effects.Length; i++)
57 {
58 effects[i] = new ImpactEffect(Reader, impacts, materials, particles, sounds);
59 }
60
61 Xml.WriteStartElement("ImpactEffects");
62
63 foreach (string impact in impacts)
64 {
65 Xml.WriteStartElement("Impact");
66 Xml.WriteAttributeString("Name", impact);
67
68 foreach (string material in materials)
69 {
70 bool found = false;
71
72 foreach (ImpactEffect effect in effects)
73 {
74 if (effect.ImpactName == impact && effect.MaterialName == material)
75 {
76 found = true;
77 break;
78 }
79 }
80
81 if (!found)
82 continue;
83
84 Xml.WriteStartElement("Material");
85 Xml.WriteAttributeString("Name", material);
86
87 foreach (ImpactEffect effect in effects)
88 {
89 if (effect.ImpactName == impact && effect.MaterialName == material)
90 {
91 Xml.WriteStartElement("ImpactEffect");
92 effect.Write(Xml);
93 Xml.WriteEndElement();
94 }
95 }
96
97 Xml.WriteEndElement();
98 }
99
100 Xml.WriteEndElement();
101 }
102
103 Xml.WriteEndElement();
104 }
105 }
106}
Note: See TracBrowser for help on using the repository browser.