using System.Xml; using Oni.Akira; using Oni.Metadata; using Oni.Motoko; using Oni.Physics; using Oni.Xml; namespace Oni.Objects { internal class ConsoleClass : GunkObjectClass { public ConsoleClassFlags Flags; public Vector3 ActionPoint; public Vector3 ActionOrientation; public ObjectNode Geometry; public Geometry ScreenGeometry; public GunkFlags ScreenGunkFlags; public string InactiveTexture; public string ActiveTexture; public string TriggeredTexture; public static ConsoleClass Read(InstanceDescriptor cons) { var klass = new ConsoleClass(); InstanceDescriptor geometryDescriptor; InstanceDescriptor screenGeometryDescriptor; using (var reader = cons.OpenRead()) { klass.Flags = (ConsoleClassFlags)reader.ReadUInt32(); klass.ActionPoint = reader.ReadVector3(); klass.ActionOrientation = reader.ReadVector3(); geometryDescriptor = reader.ReadInstance(); screenGeometryDescriptor = reader.ReadInstance(); klass.ScreenGunkFlags = (GunkFlags)reader.ReadUInt32(); klass.InactiveTexture = reader.ReadString(32); klass.ActiveTexture = reader.ReadString(32); klass.TriggeredTexture = reader.ReadString(32); } if (geometryDescriptor != null) klass.Geometry = ObjectDatReader.ReadObjectGeometry(geometryDescriptor); if (screenGeometryDescriptor != null) klass.ScreenGeometry = GeometryDatReader.Read(screenGeometryDescriptor); return klass; } public static ConsoleClass Read(XmlReader xml) { var klass = new ConsoleClass(); while (xml.IsStartElement()) { switch (xml.LocalName) { case "Flags": klass.Flags = xml.ReadElementContentAsEnum(); break; case "ActionPoint": klass.ActionPoint = xml.ReadElementContentAsVector3(); break; case "ActionOrientation": klass.ActionOrientation = xml.ReadElementContentAsVector3(); break; case "ConsoleGeometry": break; case "InactiveTexture": klass.InactiveTexture = xml.ReadElementContentAsString(); break; case "ActiveTexture": klass.ActiveTexture = xml.ReadElementContentAsString(); break; case "TriggeredTexture": klass.TriggeredTexture = xml.ReadElementContentAsString(); break; } } return klass; } public override ObjectGeometry[] GunkNodes => Geometry.Geometries; } }