Ejemplo n.º 1
0
        private void UpdateTrainLever(Message message, IClient sender)
        {
            if (worldTrains != null)
            {
                using (DarkRiftReader reader = message.GetReader())
                {
                    TrainLever lever = reader.ReadSerializable <TrainLever>();
                    //Logger.Trace($"Setting serverTrainState lever: [{lever.TrainId}] {lever.Lever}: {lever.Value}");
                    WorldTrain train = worldTrains.FirstOrDefault(t => t.Guid == lever.TrainId);
                    if (train == null)
                    {
                        train = new WorldTrain()
                        {
                            Guid   = lever.TrainId,
                            IsLoco = true
                        };
                        worldTrains.Add(train);
                        Logger.Trace($"Train not found adding new one");
                    }

                    if (train.CarType == TrainCarType.LocoShunter)
                    {
                        switch (lever.Lever)
                        {
                        case Levers.Brake:
                        case Levers.IndependentBrake:
                        case Levers.Reverser:
                        case Levers.Sander:
                        case Levers.Throttle:
                            UpdateMULevers(train, lever);
                            break;

                        default:
                            UpdateLeverTrain(train, lever);
                            break;
                        }
                    }
                    else
                    {
                        UpdateLeverTrain(train, lever);
                    }
                }
            }
            Logger.Trace("[SERVER] > TRAIN_LEVER");
            ReliableSendToOthers(message, sender);
        }
Ejemplo n.º 2
0
        private void UpdateMULevers(WorldTrain train, TrainLever lever, string prevGuid = "")
        {
            if (train == null)
            {
                return;
            }

            UpdateLeverTrain(train, lever);

            if (train.MultipleUnit.IsFrontMUConnectedTo != "" && train.MultipleUnit.IsFrontMUConnectedTo != prevGuid)
            {
                UpdateMULevers(worldTrains.FirstOrDefault(t => t.Guid == train.MultipleUnit.IsFrontMUConnectedTo), lever, train.Guid);
            }

            if (train.MultipleUnit.IsRearMUConnectedTo != "" && train.MultipleUnit.IsFrontMUConnectedTo != prevGuid)
            {
                UpdateMULevers(worldTrains.FirstOrDefault(t => t.Guid == train.MultipleUnit.IsRearMUConnectedTo), lever, train.Guid);
            }
        }
Ejemplo n.º 3
0
        private void UpdateLeverTrain(WorldTrain train, TrainLever lever)
        {
            switch (lever.Lever)
            {
            case Levers.Throttle:
                train.Throttle = lever.Value;
                break;

            case Levers.Brake:
                train.Brake = lever.Value;
                break;

            case Levers.IndependentBrake:
                Logger.Trace($"Changed independent brake of {train.Guid}");
                train.IndepBrake = lever.Value;
                break;

            case Levers.Sander:
                train.Sander = lever.Value;
                break;

            case Levers.Reverser:
                train.Reverser = lever.Value;
                break;
            }

            switch (train.CarType)
            {
            case TrainCarType.LocoShunter:
                if (train.Shunter == null)
                {
                    train.Shunter = new Shunter();
                }

                Shunter shunter = train.Shunter;
                switch (lever.Lever)
                {
                case Levers.MainFuse:
                    shunter.IsMainFuseOn = lever.Value == 1;
                    if (lever.Value == 0)
                    {
                        shunter.IsEngineOn = false;
                    }
                    break;

                case Levers.SideFuse_1:
                    shunter.IsSideFuse1On = lever.Value == 1;
                    if (lever.Value == 0)
                    {
                        shunter.IsEngineOn = false;
                    }
                    break;

                case Levers.SideFuse_2:
                    shunter.IsSideFuse2On = lever.Value == 1;
                    if (lever.Value == 0)
                    {
                        shunter.IsEngineOn = false;
                    }
                    break;

                case Levers.FusePowerStarter:
                    if (shunter.IsSideFuse1On && shunter.IsSideFuse2On && shunter.IsMainFuseOn && lever.Value == 1)
                    {
                        shunter.IsEngineOn = true;
                    }
                    else if (lever.Value == 0)
                    {
                        shunter.IsEngineOn = false;
                    }
                    break;
                }
                break;
            }
        }