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