Example #1
0
        /// <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);
            }
        }
Example #2
0
        /// <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);
        }