Ejemplo n.º 1
0
        //================================================================================================//
        /// <summary>
        /// Constructor for speedposts
        /// </summary>

        public SignalHead(Signal signal, int trackItem, int tbdRef, SpeedPostItem speedItem)
        {
            if (speedItem == null)
            {
                throw new ArgumentNullException(nameof(speedItem));
            }

            MainSignal            = signal ?? throw new ArgumentNullException(nameof(signal));
            TrackItemIndex        = trackItem;
            TDBIndex              = tbdRef;
            DrawState             = 1;
            SignalIndicationState = SignalAspectState.Clear_2;
            SignalType            = new SignalType(SignalFunction.Speed, SignalAspectState.Clear_2);

            double speedMpS = Speed.MeterPerSecond.ToMpS(speedItem.Distance, !speedItem.IsMPH);

            if (speedItem.IsResume)
            {
                speedMpS = 999.0;
            }

            float passSpeed    = speedItem.IsPassenger ? (float)speedMpS : -1;
            float freightSpeed = speedItem.IsFreight ? (float)speedMpS : -1;

            SpeedInfoSet[SignalIndicationState] = new SpeedInfo(passSpeed, freightSpeed, false, false, speedItem is TempSpeedPostItem ? (speedMpS == 999f ? 2 : 1) : 0, speedItem.IsWarning);
        }
Ejemplo n.º 2
0
        /// <summary>
        /// Constructor
        /// </summary>
        /// <param name="item">The original track item</param>
        /// <param name="travellerAtItem">The traveller located at the location of the track item</param>
        public ChartableTrackItem(TrItem item, Traveller travellerAtItem)
        {
            this.Height   = item.Y;
            this.ItemText = string.Empty;
            this.ItemType = ChartableTrackItemType.Station;
            switch (item.ItemType)
            {
            case TrItem.trItemType.trEMPTY:
                break;

            case TrItem.trItemType.trCROSSOVER:
                break;

            case TrItem.trItemType.trSIGNAL:
                break;

            case TrItem.trItemType.trSPEEDPOST:
                SpeedPostItem speedPost = item as SpeedPostItem;
                this.ItemText = speedPost.SpeedInd.ToString(System.Globalization.CultureInfo.CurrentCulture);
                if (speedPost.IsMilePost)
                {
                    this.ItemType = ChartableTrackItemType.MilePost;
                }
                if (speedPost.IsLimit)
                {
                    float relativeAngle   = Microsoft.Xna.Framework.MathHelper.WrapAngle(travellerAtItem.RotY + speedPost.Angle - (float)Math.PI / 2);
                    bool  inSameDirection = Math.Abs(relativeAngle) < Math.PI / 2;
                    if (inSameDirection)
                    {
                        this.ItemType = ChartableTrackItemType.SpeedLimitForward;
                    }
                    else
                    {
                        this.ItemType = ChartableTrackItemType.SpeedLimitReverse;
                    }
                }
                break;

            case TrItem.trItemType.trPLATFORM:
                this.ItemText = (item as PlatformItem).Station;
                this.ItemType = ChartableTrackItemType.Station;
                break;

            case TrItem.trItemType.trSOUNDREGION:
                break;

            case TrItem.trItemType.trXING:
                break;

            case TrItem.trItemType.trSIDING:
                break;

            case TrItem.trItemType.trHAZZARD:
                break;

            case TrItem.trItemType.trPICKUP:
                break;

            case TrItem.trItemType.trCARSPAWNER:
                break;

            default:
                break;
            }


            this.TrackVectorSectionIndex = travellerAtItem.TrackVectorSectionIndex;
            var travellerAtSectionStart = new Traveller(travellerAtItem);

            travellerAtSectionStart.MoveInSection(float.MinValue); // Move to begin of section
            this.TrackVectorSectionOffset = travellerAtItem.TrackNodeOffset - travellerAtSectionStart.TrackNodeOffset;
        }
Ejemplo n.º 3
0
 /// <summary>
 /// Default constructor
 /// </summary>
 /// <param name="originalTrItem">The original track item that we are representing for drawing</param>
 public DrawableSpeedPostItem(TrackItem originalTrItem)
     : base(originalTrItem)
 {
     Description  = "speedpost";
     originalItem = originalTrItem as SpeedPostItem;
 }