1 |
using System; |
2 |
using System.Collections.Generic; |
3 |
using System.Xml; |
4 |
|
5 |
namespace Oni.Particles |
6 |
{ |
7 |
internal class ImpactEffectParticle |
8 |
{ |
9 |
#region Private data |
10 |
private string particleClassName; |
11 |
private int orientation; |
12 |
private int location; |
13 |
private float offset; |
14 |
private bool decal1; |
15 |
private bool decal2; |
16 |
#endregion |
17 |
|
18 |
public ImpactEffectParticle(BinaryReader reader) |
19 |
{ |
20 |
particleClassName = reader.ReadString(64); |
21 |
reader.Skip(4); |
22 |
orientation = reader.ReadInt32(); |
23 |
location = reader.ReadInt32(); |
24 |
|
25 |
switch (location) |
26 |
{ |
27 |
case 1: |
28 |
offset = reader.ReadSingle(); |
29 |
reader.Skip(4); |
30 |
break; |
31 |
case 4: |
32 |
decal1 = (reader.ReadByte() != 0); |
33 |
decal2 = (reader.ReadByte() != 0); |
34 |
reader.Skip(6); |
35 |
break; |
36 |
default: |
37 |
reader.Skip(8); |
38 |
break; |
39 |
} |
40 |
} |
41 |
|
42 |
public void Write(BinaryWriter writer) |
43 |
{ |
44 |
writer.Write(particleClassName, 64); |
45 |
writer.Skip(4); |
46 |
writer.Write(orientation); |
47 |
writer.Write(location); |
48 |
|
49 |
switch (location) |
50 |
{ |
51 |
case 1: |
52 |
writer.Write(offset); |
53 |
break; |
54 |
|
55 |
case 4: |
56 |
writer.WriteByte(decal1 ? 1 : 0); |
57 |
writer.WriteByte(decal2 ? 1 : 0); |
58 |
writer.WriteUInt16(0); |
59 |
break; |
60 |
|
61 |
default: |
62 |
writer.Write(0); |
63 |
break; |
64 |
} |
65 |
|
66 |
writer.Write(0); |
67 |
} |
68 |
|
69 |
public ImpactEffectParticle(XmlReader xml) |
70 |
{ |
71 |
particleClassName = xml.ReadElementContentAsString("Name", ""); |
72 |
orientation = XmlConvert.ToInt32(xml.ReadElementContentAsString("Orientation", "")); |
73 |
location = XmlConvert.ToInt32(xml.ReadElementContentAsString("Location", "")); |
74 |
|
75 |
switch (location) |
76 |
{ |
77 |
case 1: |
78 |
offset = XmlConvert.ToSingle(xml.ReadElementContentAsString("Offset", "")); |
79 |
break; |
80 |
case 4: |
81 |
decal1 = bool.Parse(xml.ReadElementContentAsString("Decal1", "")); |
82 |
decal2 = bool.Parse(xml.ReadElementContentAsString("Decal2", "")); |
83 |
break; |
84 |
} |
85 |
} |
86 |
|
87 |
public void Write(XmlWriter writer) |
88 |
{ |
89 |
writer.WriteElementString("Name", particleClassName); |
90 |
writer.WriteElementString("Orientation", XmlConvert.ToString(orientation)); |
91 |
writer.WriteElementString("Location", XmlConvert.ToString(location)); |
92 |
|
93 |
switch (location) |
94 |
{ |
95 |
case 1: |
96 |
writer.WriteElementString("Offset", XmlConvert.ToString(offset)); |
97 |
break; |
98 |
case 4: |
99 |
writer.WriteElementString("Decal1", XmlConvert.ToString(decal1)); |
100 |
writer.WriteElementString("Decal2", XmlConvert.ToString(decal2)); |
101 |
break; |
102 |
} |
103 |
} |
104 |
|
105 |
public string ParticleClassName => particleClassName; |
106 |
|
107 |
public int Orientation => orientation; |
108 |
public int Location => location; |
109 |
public float Offset => offset; |
110 |
|
111 |
public bool Decal1 => decal1; |
112 |
public bool Decal2 => decal2; |
113 |
} |
114 |
} |