Esempio n. 1
0
        /// <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);
        }
Esempio n. 2
0
        /// <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);
            }
        }