[1114] | 1 | using System;
|
---|
| 2 | using System.Collections.Generic;
|
---|
| 3 | using System.Xml;
|
---|
| 4 | using Oni.Metadata;
|
---|
| 5 |
|
---|
| 6 | namespace Oni.Objects
|
---|
| 7 | {
|
---|
| 8 | internal class Neutral : ObjectBase
|
---|
| 9 | {
|
---|
| 10 | public string Name;
|
---|
| 11 | public int Id;
|
---|
| 12 | public NeutralFlags Flags;
|
---|
| 13 | public float TriggerRange;
|
---|
| 14 | public float TalkRange;
|
---|
| 15 | public float FollowRange;
|
---|
| 16 | public float AbortEnemyRange;
|
---|
| 17 | public string TriggerSpeech;
|
---|
| 18 | public string AbortSpeech;
|
---|
| 19 | public string EnemySpeech;
|
---|
| 20 | public string EndScript;
|
---|
| 21 | public string WeaponClass;
|
---|
| 22 | public int AmmoAmount;
|
---|
| 23 | public int CellAmount;
|
---|
| 24 | public int HypoAmount;
|
---|
| 25 | public NeutralItems OtherItems;
|
---|
| 26 | public NeutralDialogLine[] Lines;
|
---|
| 27 |
|
---|
| 28 | public Neutral()
|
---|
| 29 | {
|
---|
| 30 | TypeId = ObjectType.Neutral;
|
---|
| 31 | }
|
---|
| 32 |
|
---|
| 33 | protected override void WriteOsd(BinaryWriter writer)
|
---|
| 34 | {
|
---|
| 35 | writer.Write(Name, 32);
|
---|
| 36 | writer.WriteUInt16(Id);
|
---|
| 37 | writer.WriteUInt16(Lines.Length);
|
---|
| 38 | writer.Write((int)Flags);
|
---|
| 39 | writer.Write(TriggerRange);
|
---|
| 40 | writer.Write(TalkRange);
|
---|
| 41 | writer.Write(FollowRange);
|
---|
| 42 | writer.Write(AbortEnemyRange);
|
---|
| 43 | writer.Write(TriggerSpeech, 32);
|
---|
| 44 | writer.Write(AbortSpeech, 32);
|
---|
| 45 | writer.Write(EnemySpeech, 32);
|
---|
| 46 | writer.Write(EndScript, 32);
|
---|
| 47 | writer.Write(WeaponClass, 32);
|
---|
| 48 | writer.WriteByte(AmmoAmount);
|
---|
| 49 | writer.WriteByte(CellAmount);
|
---|
| 50 | writer.WriteByte(HypoAmount);
|
---|
| 51 | writer.WriteByte((byte)OtherItems);
|
---|
| 52 |
|
---|
| 53 | foreach (var line in Lines)
|
---|
| 54 | {
|
---|
| 55 | writer.Write((int)line.Flags);
|
---|
| 56 | writer.WriteUInt16((ushort)line.AnimType);
|
---|
| 57 | writer.WriteUInt16((ushort)line.OtherAnimationType);
|
---|
| 58 | writer.Write(line.Speech, 32);
|
---|
| 59 | }
|
---|
| 60 | }
|
---|
| 61 |
|
---|
| 62 | protected override void ReadOsd(BinaryReader reader)
|
---|
| 63 | {
|
---|
| 64 | Name = reader.ReadString(32);
|
---|
| 65 | Id = reader.ReadInt16();
|
---|
| 66 | Lines = new NeutralDialogLine[reader.ReadInt16()];
|
---|
| 67 | Flags = (NeutralFlags)reader.ReadInt32();
|
---|
| 68 | TriggerRange = reader.ReadSingle();
|
---|
| 69 | TalkRange = reader.ReadSingle();
|
---|
| 70 | FollowRange = reader.ReadSingle();
|
---|
| 71 | AbortEnemyRange = reader.ReadSingle();
|
---|
| 72 | TriggerSpeech = reader.ReadString(32);
|
---|
| 73 | AbortSpeech = reader.ReadString(32);
|
---|
| 74 | EnemySpeech = reader.ReadString(32);
|
---|
| 75 | EndScript = reader.ReadString(32);
|
---|
| 76 | WeaponClass = reader.ReadString(32);
|
---|
| 77 | AmmoAmount = reader.ReadByte();
|
---|
| 78 | CellAmount = reader.ReadByte();
|
---|
| 79 | HypoAmount = reader.ReadByte();
|
---|
| 80 | OtherItems = (NeutralItems)reader.ReadByte();
|
---|
| 81 |
|
---|
| 82 | for (int i = 0; i < Lines.Length; i++)
|
---|
| 83 | {
|
---|
| 84 | Lines[i] = new NeutralDialogLine
|
---|
| 85 | {
|
---|
| 86 | Flags = (NeutralDialogLineFlags)reader.ReadInt32(),
|
---|
| 87 | AnimType = (Totoro.AnimationType)reader.ReadUInt16(),
|
---|
| 88 | OtherAnimationType = (Totoro.AnimationType)reader.ReadUInt16(),
|
---|
| 89 | Speech = reader.ReadString(32)
|
---|
| 90 | };
|
---|
| 91 | }
|
---|
| 92 | }
|
---|
| 93 |
|
---|
| 94 | protected override void ReadOsd(XmlReader xml, ObjectLoadContext context)
|
---|
| 95 | {
|
---|
| 96 | Name = xml.ReadElementContentAsString("Name", "");
|
---|
| 97 | Id = xml.ReadElementContentAsInt("NeutralId", "");
|
---|
| 98 | Flags = xml.ReadElementContentAsEnum<NeutralFlags>("Flags");
|
---|
| 99 | xml.ReadStartElement("Ranges");
|
---|
| 100 | TriggerRange = xml.ReadElementContentAsFloat("Trigger", "");
|
---|
| 101 | TalkRange = xml.ReadElementContentAsFloat("Talk", "");
|
---|
| 102 | FollowRange = xml.ReadElementContentAsFloat("Follow", "");
|
---|
| 103 | AbortEnemyRange = xml.ReadElementContentAsFloat("Enemy", "");
|
---|
| 104 | xml.ReadEndElement();
|
---|
| 105 | xml.ReadStartElement("Speech");
|
---|
| 106 | TriggerSpeech = xml.ReadElementContentAsString("Trigger", "");
|
---|
| 107 | AbortSpeech = xml.ReadElementContentAsString("Abort", "");
|
---|
| 108 | EnemySpeech = xml.ReadElementContentAsString("Enemy", "");
|
---|
| 109 | xml.ReadEndElement();
|
---|
| 110 | xml.ReadStartElement("Script");
|
---|
| 111 | EndScript = xml.ReadElementContentAsString("AfterTalk", "");
|
---|
| 112 | xml.ReadEndElement();
|
---|
| 113 | xml.ReadStartElement("Rewards");
|
---|
| 114 | WeaponClass = xml.ReadElementContentAsString("WeaponClass", "");
|
---|
| 115 | AmmoAmount = xml.ReadElementContentAsInt("Ammo", "");
|
---|
| 116 | CellAmount = xml.ReadElementContentAsInt("EnergyCell", "");
|
---|
| 117 | HypoAmount = xml.ReadElementContentAsInt("Hypo", "");
|
---|
| 118 | OtherItems = xml.ReadElementContentAsEnum<NeutralItems>("Other");
|
---|
| 119 | xml.ReadEndElement();
|
---|
| 120 | xml.ReadStartElement("DialogLines");
|
---|
| 121 |
|
---|
| 122 | var lineList = new List<NeutralDialogLine>();
|
---|
| 123 |
|
---|
| 124 | while (xml.IsStartElement())
|
---|
| 125 | {
|
---|
| 126 | xml.ReadStartElement("DialogLine");
|
---|
| 127 |
|
---|
| 128 | lineList.Add(new NeutralDialogLine
|
---|
| 129 | {
|
---|
| 130 | Flags = xml.ReadElementContentAsEnum<NeutralDialogLineFlags>("Flags"),
|
---|
| 131 | AnimType = xml.ReadElementContentAsEnum<Totoro.AnimationType>("Anim"),
|
---|
| 132 | OtherAnimationType = xml.ReadElementContentAsEnum<Totoro.AnimationType>("OtherAnim"),
|
---|
| 133 | Speech = xml.ReadElementContentAsString("SpeechName", "")
|
---|
| 134 | });
|
---|
| 135 |
|
---|
| 136 | xml.ReadEndElement();
|
---|
| 137 | }
|
---|
| 138 |
|
---|
| 139 | Lines = lineList.ToArray();
|
---|
| 140 |
|
---|
| 141 | xml.ReadEndElement();
|
---|
| 142 | }
|
---|
| 143 |
|
---|
| 144 | protected override void WriteOsd(XmlWriter xml)
|
---|
| 145 | {
|
---|
| 146 | throw new NotImplementedException();
|
---|
| 147 | }
|
---|
| 148 | }
|
---|
| 149 | }
|
---|