/// <summary> /// Initializes the links between objects in this sub-area. /// </summary> /// <param name="schema">Data about this sub-area.</param> /// <param name="region">The region containing this sub-area.</param> public void InitLinks(Schema.SubArea schema, Region region) { for (ushort i = 0; i != schema.AutomaticSignals.Count; ++i) { AutomaticSignals[i].InitLinks(schema.AutomaticSignals[i], region); } for (ushort i = 0; i != schema.ControlledSignals.Count; ++i) { ControlledSignals[i].InitLinks(schema.ControlledSignals[i], region); } }
/// <summary> /// Constructs a new sub-area. /// </summary> /// <param name="schema">Data about this sub-area.</param> /// <param name="id">The sub-area ID.</param> /// <param name="world">The communication interface to Run8.</param> public SubArea(Schema.SubArea schema, ushort id, World world) { ID = id; Name = schema.Name ?? string.Empty; { ushort maxID = 0; foreach (Schema.TrackCircuit i in schema.TrackCircuits) { maxID = Math.Max(maxID, i.ID); } TrackCircuit[] trackCircuits = new TrackCircuit[maxID + 1]; foreach (Schema.TrackCircuit i in schema.TrackCircuits) { Debug.Assert(trackCircuits[i.ID] == null); trackCircuits[i.ID] = new TrackCircuit(i, ID, i.ID); } TrackCircuits = Array.AsReadOnly(trackCircuits); } { Points[] points = new Points[schema.Points.Count]; for (ushort i = 0; i != schema.Points.Count; ++i) { points[i] = new Points(schema.Points[i], i, this, world); } PowerPoints = Array.AsReadOnly(points); } { ControlledSignal[] sigs = new ControlledSignal[schema.ControlledSignals.Count]; for (ushort i = 0; i != schema.ControlledSignals.Count; ++i) { sigs[i] = new ControlledSignal(schema.ControlledSignals[i], i, ID, world); } ControlledSignals = Array.AsReadOnly(sigs); } { AutomaticSignal[] sigs = new AutomaticSignal[schema.AutomaticSignals.Count]; for (ushort i = 0; i != schema.AutomaticSignals.Count; ++i) { sigs[i] = new AutomaticSignal(schema.AutomaticSignals[i], (short)(-i - 1), ID); } AutomaticSignals = Array.AsReadOnly(sigs); } Signals = new SignalsArray(this); }