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); }
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); } }
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; } }