protected override void Read(BinaryReader br) { var cRegions = br.ReadInt32(); for (int l = 0; l < cRegions; ++l) { var ri = new RegionData(); ri.Id = br.ReadInt32(); ri.GroupId = br.ReadInt32(); ri.X1 = br.ReadInt32(); ri.Y1 = br.ReadInt32(); ri.X2 = br.ReadInt32(); ri.Y2 = br.ReadInt32(); var cAreas = br.ReadInt32(); ri.Areas = new Dictionary <int, AreaData>(); for (int i = 0; i < cAreas; ++i) { var ai = new AreaData(); ai.Id = br.ReadInt32(); ai.X1 = br.ReadInt32(); ai.Y1 = br.ReadInt32(); ai.X2 = br.ReadInt32(); ai.Y2 = br.ReadInt32(); var cProps = br.ReadInt32(); ai.Props = new Dictionary <long, PropData>(); for (int j = 0; j < cProps; ++j) { var pi = new PropData(); pi.EntityId = br.ReadInt64(); pi.Id = br.ReadInt32(); pi.X = br.ReadSingle(); pi.Y = br.ReadSingle(); pi.Direction = br.ReadSingle(); pi.Scale = br.ReadSingle(); var cShapes = br.ReadInt32(); pi.Shapes = new List <ShapeData>(); for (int k = 0; k < cShapes; ++k) { var si = new ShapeData(); si.X1 = br.ReadInt32(); si.Y1 = br.ReadInt32(); si.X2 = br.ReadInt32(); si.Y2 = br.ReadInt32(); si.X3 = br.ReadInt32(); si.Y3 = br.ReadInt32(); si.X4 = br.ReadInt32(); si.Y4 = br.ReadInt32(); pi.Shapes.Add(si); } var cElements = br.ReadInt32(); pi.Parameters = new List <RegionElementData>(); for (int k = 0; k < cElements; ++k) { var red = new RegionElementData(); red.EventType = br.ReadInt32(); red.SignalType = br.ReadInt32(); red.Name = br.ReadString(); red.XML = br.ReadString(); pi.Parameters.Add(red); } ai.Props.Add(pi.EntityId, pi); this.PropEntries.Add(pi.EntityId, pi); } var cEvents = br.ReadInt32(); ai.Events = new Dictionary <long, EventData>(); for (int j = 0; j < cEvents; ++j) { var ei = new EventData(); ei.Id = br.ReadInt64(); ei.RegionId = ri.Id; ei.X = br.ReadSingle(); ei.Y = br.ReadSingle(); ei.Type = (EventType)br.ReadInt32(); var cShapes = br.ReadInt32(); ei.Shapes = new List <ShapeData>(); for (int k = 0; k < cShapes; ++k) { var si = new ShapeData(); si.X1 = br.ReadInt32(); si.Y1 = br.ReadInt32(); si.X2 = br.ReadInt32(); si.Y2 = br.ReadInt32(); si.X3 = br.ReadInt32(); si.Y3 = br.ReadInt32(); si.X4 = br.ReadInt32(); si.Y4 = br.ReadInt32(); ei.Shapes.Add(si); } var cElements = br.ReadInt32(); ei.Parameters = new List <RegionElementData>(); for (int k = 0; k < cElements; ++k) { var red = new RegionElementData(); red.EventType = br.ReadInt32(); red.SignalType = br.ReadInt32(); red.Name = br.ReadString(); red.XML = br.ReadString(); if (!ei.IsAltar && red.EventType == 2110 && red.SignalType == 103) { ei.IsAltar = true; } ei.Parameters.Add(red); } ai.Events.Add(ei.Id, ei); this.EventEntries.Add(ei.Id, ei); } ri.Areas.Add(ai.Id, ai); } this.Entries.Add(ri.Id, ri); } }
/// <summary> /// Loads data. /// </summary> /// <param name="br"></param> protected override void Read(BinaryReader br) { var cRegions = br.ReadInt32(); for (int l = 0; l < cRegions; ++l) { var ri = new RegionInfoData(); ri.Id = br.ReadInt32(); ri.Name = br.ReadString(); ri.GroupId = br.ReadInt32(); ri.X1 = br.ReadInt32(); ri.Y1 = br.ReadInt32(); ri.X2 = br.ReadInt32(); ri.Y2 = br.ReadInt32(); var cAreas = br.ReadInt32(); for (int i = 0; i < cAreas; ++i) { var ai = new AreaData(); ai.Id = br.ReadInt32(); ai.Name = br.ReadString(); ai.X1 = br.ReadInt32(); ai.Y1 = br.ReadInt32(); ai.X2 = br.ReadInt32(); ai.Y2 = br.ReadInt32(); var cProps = br.ReadInt32(); for (int j = 0; j < cProps; ++j) { var pi = new PropData(); pi.EntityId = br.ReadInt64(); pi.Id = br.ReadInt32(); pi.Name = br.ReadString(); pi.X = br.ReadSingle(); pi.Y = br.ReadSingle(); pi.Direction = br.ReadSingle(); pi.Scale = br.ReadSingle(); var cShapes = br.ReadInt32(); for (int k = 0; k < cShapes; ++k) { var si = new ShapeData(); si.DirX1 = br.ReadSingle(); si.DirX2 = br.ReadSingle(); si.DirY1 = br.ReadSingle(); si.DirY2 = br.ReadSingle(); si.LenX = br.ReadSingle(); si.LenY = br.ReadSingle(); si.PosX = br.ReadSingle(); si.PosY = br.ReadSingle(); pi.Shapes.Add(si); } var cElements = br.ReadInt32(); for (int k = 0; k < cElements; ++k) { var red = new RegionElementData(); red.EventType = (EventType)br.ReadInt32(); red.SignalType = (SignalType)br.ReadInt32(); red.Name = br.ReadString(); var xml = br.ReadString(); red.XML = !string.IsNullOrWhiteSpace(xml) ? XElement.Parse(xml) : null; pi.Parameters.Add(red); } ai.Props.Add(pi.EntityId, pi); } var cEvents = br.ReadInt32(); for (int j = 0; j < cEvents; ++j) { var ei = new EventData(); ei.Id = br.ReadInt64(); ei.Name = br.ReadString(); ei.Path = string.Format("{0}/{1}/{2}", ri.Name, ai.Name, ei.Name); ei.RegionId = ri.Id; ei.X = br.ReadSingle(); ei.Y = br.ReadSingle(); ei.Type = (EventType)br.ReadInt32(); var cShapes = br.ReadInt32(); for (int k = 0; k < cShapes; ++k) { var si = new ShapeData(); si.DirX1 = br.ReadSingle(); si.DirX2 = br.ReadSingle(); si.DirY1 = br.ReadSingle(); si.DirY2 = br.ReadSingle(); si.LenX = br.ReadSingle(); si.LenY = br.ReadSingle(); si.PosX = br.ReadSingle(); si.PosY = br.ReadSingle(); ei.Shapes.Add(si); } var cElements = br.ReadInt32(); for (int k = 0; k < cElements; ++k) { var red = new RegionElementData(); red.EventType = (EventType)br.ReadInt32(); red.SignalType = (SignalType)br.ReadInt32(); red.Name = br.ReadString(); var xml = br.ReadString(); red.XML = !string.IsNullOrWhiteSpace(xml) ? XElement.Parse(xml) : null; if (!ei.IsAltar && red.EventType == EventType.Altar && red.SignalType == SignalType.StepOn) { ei.IsAltar = true; } ei.Parameters.Add(red); } ai.Events.Add(ei.Id, ei); } ri.Areas.Add(ai); } this.Entries.Add(ri.Id, ri); } }