/// <summary> /// Computes the aspects object shown in rear of this one, assuming an unblocked straight route. /// </summary> /// <param name="divergenceLookahead">How far ahead to consider divergences.</param> /// <returns>The aspects in rear of this one.</returns> public Aspects NextInRear(EDivergenceLookahead divergenceLookahead) { switch (Type) { case EAspectsType.Red: case EAspectsType.AllLunar: case EAspectsType.OneLunar: return(new Aspects(EAspectsType.Yellow, 0)); case EAspectsType.Yellow: return(new Aspects(EAspectsType.FlashingYellow, 0)); case EAspectsType.FlashingYellow: case EAspectsType.Green: return(new Aspects(EAspectsType.Green, 0)); case EAspectsType.RedOverYellow: return(new Aspects((divergenceLookahead != EDivergenceLookahead.Short) ? EAspectsType.YellowOverYellow : EAspectsType.FlashingYellow, IdentifiedHead)); case EAspectsType.RedOverFlashingYellow: return(new Aspects((divergenceLookahead != EDivergenceLookahead.Short) ? EAspectsType.YellowOverYellow : EAspectsType.Green, IdentifiedHead)); case EAspectsType.RedOverGreen: return(new Aspects((divergenceLookahead != EDivergenceLookahead.Short) ? EAspectsType.YellowOverGreen : EAspectsType.Green, IdentifiedHead)); case EAspectsType.YellowOverYellow: case EAspectsType.YellowOverGreen: return(new Aspects((divergenceLookahead == EDivergenceLookahead.Long) ? EAspectsType.FlashingYellow : EAspectsType.Green, 0)); } return(new Aspects(EAspectsType.Red, 0)); }
/// <summary> /// Constructs a new Signal. /// </summary> /// <param name="subArea">Which sub-area contains this signal.</param> /// <param name="id">The ID number of the signal.</param> /// <param name="heads">The number of heads (lamps) in this signal.</param> protected Signal(ushort subArea, short id, byte heads, EDivergenceLookahead divergenceLookahead) { Debug.Assert(subArea >= 0); SubArea = subArea; ID = id; Heads = heads; DivergenceLookahead = divergenceLookahead; }