/// <summary>Adds a message to the in-game display</summary> /// <param name="message">The message to add</param> internal static void AddMessage(AbstractMessage message) { if (TrainManager.PlayerTrain.StationState == TrainStopState.Jumping) { //Ignore messages triggered during a jump return; } if (message is MarkerImage || message is TextureMessage) { for (int i = 0; i < ImageMessages.Count; i++) { if (ImageMessages[i] == message) { return; } } message.AddMessage(Game.SecondsSinceMidnight); ImageMessages.Add(message); return; } for (int i = 0; i < TextualMessages.Count; i++) { if (TextualMessages[i] == message) { //Other messages display one per message return; } } //Prep: May be needed to trigger text replacement etc. message.AddMessage(Game.SecondsSinceMidnight); //Add to the start of the list TextualMessages.Insert(0, message); }
/// <summary>Adds a message to the in-game display</summary> /// <param name="message">The message to add</param> internal static void AddMessage(AbstractMessage message) { if (TrainManager.PlayerTrain.StationState == TrainStopState.Jumping || message.Mode < Interface.CurrentOptions.GameMode) { //Ignore messages triggered during a jump & dummy stations return; } GameMessage gm = message as GameMessage; if (gm != null && (gm.Depencency == MessageDependency.StationArrival || gm.Depencency == MessageDependency.StationDeparture)) { if (Program.CurrentRoute.Stations[TrainManagerBase.PlayerTrain.Station].Dummy) { return; } } if (message is MarkerImage || message is TextureMessage) { for (int i = 0; i < ImageMessages.Count; i++) { if (ImageMessages[i] == message) { return; } } message.AddMessage(Program.CurrentRoute.SecondsSinceMidnight); ImageMessages.Add(message); return; } var m = message as GameMessage; if (m != null && m.Depencency == MessageDependency.PassedRedSignal) { for (int i = TextualMessages.Count - 1; i >= 0; i--) { var c = TextualMessages[i] as GameMessage; if (c != null && (c.Depencency == MessageDependency.SectionLimit || c.Depencency == MessageDependency.RouteLimit)) { TextualMessages.RemoveAt(i); } } } for (int i = 0; i < TextualMessages.Count; i++) { var c = TextualMessages[i] as GameMessage; if (m != null && c != null) { if ((m.Depencency == MessageDependency.SectionLimit || m.Depencency == MessageDependency.RouteLimit) && c.Depencency == MessageDependency.PassedRedSignal) { //Don't add a new section limit message whilst the passed red signal message is active return; } if (m.Depencency == c.Depencency) { switch (m.Depencency) { case MessageDependency.None: case MessageDependency.Plugin: //Continue down the logic tree, multiple messages allowed break; case MessageDependency.SectionLimit: case MessageDependency.RouteLimit: case MessageDependency.PointOfInterest: case MessageDependency.StationArrival: case MessageDependency.CameraView: case MessageDependency.AccessibilityHelper: //Show only the latest message of these types c.QueueForRemoval = true; break; default: //Show only the current message for all other types return; } } } else { if (TextualMessages[i] == message) { //Other messages display one per message return; } } } //Prep: May be needed to trigger text replacement etc. message.AddMessage(Program.CurrentRoute.SecondsSinceMidnight); if (m != null) { //This is a game-message: Add to the end of the list TextualMessages.Add(message); } else { //Add to the start of the list TextualMessages.Insert(0, message); } }