ViewVC Help
View File | Revision Log | View Changeset | Root Listing
root/Oni2/OniSplit/Objects/Trigger.cs
Revision: 1114
Committed: Wed Jan 22 14:08:57 2020 UTC (5 years, 8 months ago) by iritscen
File size: 3215 byte(s)
Log Message:
Adding OniSplit source code (v0.9.99.0). Many thanks to Neo for all his work over the years.

File Contents

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