1 | using System.Xml;
|
---|
2 | using Oni.Akira;
|
---|
3 | using Oni.Metadata;
|
---|
4 | using Oni.Motoko;
|
---|
5 | using Oni.Physics;
|
---|
6 | using Oni.Xml;
|
---|
7 |
|
---|
8 | namespace Oni.Objects
|
---|
9 | {
|
---|
10 | internal class ConsoleClass : GunkObjectClass
|
---|
11 | {
|
---|
12 | public ConsoleClassFlags Flags;
|
---|
13 | public Vector3 ActionPoint;
|
---|
14 | public Vector3 ActionOrientation;
|
---|
15 | public ObjectNode Geometry;
|
---|
16 | public Geometry ScreenGeometry;
|
---|
17 | public GunkFlags ScreenGunkFlags;
|
---|
18 | public string InactiveTexture;
|
---|
19 | public string ActiveTexture;
|
---|
20 | public string TriggeredTexture;
|
---|
21 |
|
---|
22 | public static ConsoleClass Read(InstanceDescriptor cons)
|
---|
23 | {
|
---|
24 | var klass = new ConsoleClass();
|
---|
25 |
|
---|
26 | InstanceDescriptor geometryDescriptor;
|
---|
27 | InstanceDescriptor screenGeometryDescriptor;
|
---|
28 |
|
---|
29 | using (var reader = cons.OpenRead())
|
---|
30 | {
|
---|
31 | klass.Flags = (ConsoleClassFlags)reader.ReadUInt32();
|
---|
32 | klass.ActionPoint = reader.ReadVector3();
|
---|
33 | klass.ActionOrientation = reader.ReadVector3();
|
---|
34 | geometryDescriptor = reader.ReadInstance();
|
---|
35 | screenGeometryDescriptor = reader.ReadInstance();
|
---|
36 | klass.ScreenGunkFlags = (GunkFlags)reader.ReadUInt32();
|
---|
37 | klass.InactiveTexture = reader.ReadString(32);
|
---|
38 | klass.ActiveTexture = reader.ReadString(32);
|
---|
39 | klass.TriggeredTexture = reader.ReadString(32);
|
---|
40 | }
|
---|
41 |
|
---|
42 | if (geometryDescriptor != null)
|
---|
43 | klass.Geometry = ObjectDatReader.ReadObjectGeometry(geometryDescriptor);
|
---|
44 |
|
---|
45 | if (screenGeometryDescriptor != null)
|
---|
46 | klass.ScreenGeometry = GeometryDatReader.Read(screenGeometryDescriptor);
|
---|
47 |
|
---|
48 | return klass;
|
---|
49 | }
|
---|
50 |
|
---|
51 | public static ConsoleClass Read(XmlReader xml)
|
---|
52 | {
|
---|
53 | var klass = new ConsoleClass();
|
---|
54 |
|
---|
55 | while (xml.IsStartElement())
|
---|
56 | {
|
---|
57 | switch (xml.LocalName)
|
---|
58 | {
|
---|
59 | case "Flags":
|
---|
60 | klass.Flags = xml.ReadElementContentAsEnum<ConsoleClassFlags>();
|
---|
61 | break;
|
---|
62 | case "ActionPoint":
|
---|
63 | klass.ActionPoint = xml.ReadElementContentAsVector3();
|
---|
64 | break;
|
---|
65 | case "ActionOrientation":
|
---|
66 | klass.ActionOrientation = xml.ReadElementContentAsVector3();
|
---|
67 | break;
|
---|
68 | case "ConsoleGeometry":
|
---|
69 | break;
|
---|
70 | case "InactiveTexture":
|
---|
71 | klass.InactiveTexture = xml.ReadElementContentAsString();
|
---|
72 | break;
|
---|
73 | case "ActiveTexture":
|
---|
74 | klass.ActiveTexture = xml.ReadElementContentAsString();
|
---|
75 | break;
|
---|
76 | case "TriggeredTexture":
|
---|
77 | klass.TriggeredTexture = xml.ReadElementContentAsString();
|
---|
78 | break;
|
---|
79 | }
|
---|
80 | }
|
---|
81 |
|
---|
82 | return klass;
|
---|
83 | }
|
---|
84 |
|
---|
85 | public override ObjectGeometry[] GunkNodes => Geometry.Geometries;
|
---|
86 | }
|
---|
87 | }
|
---|