1 |
using System; |
2 |
using System.Xml; |
3 |
using Oni.Imaging; |
4 |
using Oni.Metadata; |
5 |
using Oni.Xml; |
6 |
|
7 |
namespace Oni.Objects |
8 |
{ |
9 |
internal class Trigger : GunkObject |
10 |
{ |
11 |
public int ScriptId; |
12 |
public TriggerFlags Flags; |
13 |
public Color LaserColor; |
14 |
public float StartPosition; |
15 |
public float Speed; |
16 |
public int EmitterCount; |
17 |
public int TimeOn; |
18 |
public int TimeOff; |
19 |
public ObjectEvent[] Events; |
20 |
|
21 |
public Trigger() |
22 |
{ |
23 |
TypeId = ObjectType.Trigger; |
24 |
} |
25 |
|
26 |
protected override void WriteOsd(BinaryWriter writer) |
27 |
{ |
28 |
writer.Write(ClassName, 63); |
29 |
writer.WriteUInt16(ScriptId); |
30 |
writer.WriteUInt16((ushort)Flags); |
31 |
writer.Write(LaserColor); |
32 |
writer.Write(StartPosition); |
33 |
writer.Write(Speed); |
34 |
writer.WriteUInt16(EmitterCount); |
35 |
writer.WriteUInt16(TimeOn); |
36 |
writer.WriteUInt16(TimeOff); |
37 |
ObjectEvent.WriteEventList(writer, Events); |
38 |
} |
39 |
|
40 |
protected override void ReadOsd(BinaryReader reader) |
41 |
{ |
42 |
ClassName = reader.ReadString(63); |
43 |
ScriptId = reader.ReadUInt16(); |
44 |
Flags = (TriggerFlags)(reader.ReadUInt16() & ~0x84); |
45 |
LaserColor = reader.ReadColor(); |
46 |
StartPosition = reader.ReadSingle(); |
47 |
Speed = reader.ReadSingle(); |
48 |
EmitterCount = reader.ReadUInt16(); |
49 |
TimeOn = reader.ReadUInt16(); |
50 |
TimeOff = reader.ReadUInt16(); |
51 |
Events = ObjectEvent.ReadEventList(reader); |
52 |
} |
53 |
|
54 |
protected override void WriteOsd(XmlWriter xml) |
55 |
{ |
56 |
throw new NotImplementedException(); |
57 |
} |
58 |
|
59 |
protected override void ReadOsd(XmlReader xml, ObjectLoadContext context) |
60 |
{ |
61 |
string className = xml.ReadElementContentAsString("Class", ""); |
62 |
|
63 |
ScriptId = xml.ReadElementContentAsInt("TriggerId", ""); |
64 |
Flags = xml.ReadElementContentAsEnum<TriggerFlags>("Flags"); |
65 |
|
66 |
byte[] values = xml.ReadElementContentAsArray<byte>(XmlConvert.ToByte, "LaserColor"); |
67 |
|
68 |
if (values.Length > 3) |
69 |
LaserColor = new Color(values[0], values[1], values[2], values[3]); |
70 |
else |
71 |
LaserColor = new Color(values[0], values[1], values[2]); |
72 |
|
73 |
StartPosition = xml.ReadElementContentAsFloat("StartPosition", ""); |
74 |
Speed = xml.ReadElementContentAsFloat("Speed", ""); |
75 |
EmitterCount = xml.ReadElementContentAsInt("EmitterCount", ""); |
76 |
|
77 |
if (xml.IsStartElement("Offset_0075")) |
78 |
TimeOn = xml.ReadElementContentAsInt(); |
79 |
else |
80 |
TimeOn = xml.ReadElementContentAsInt("TimeOn", ""); |
81 |
|
82 |
if (xml.IsStartElement("Offset_0077")) |
83 |
TimeOff = xml.ReadElementContentAsInt(); |
84 |
else |
85 |
TimeOff = xml.ReadElementContentAsInt("TimeOff", ""); |
86 |
|
87 |
Events = ObjectEvent.ReadEventList(xml); |
88 |
|
89 |
GunkClass = context.GetClass(TemplateTag.TRIG, className, TriggerClass.Read); |
90 |
} |
91 |
} |
92 |
} |