| 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 |
} |