@@ -16275,27 +16275,76 @@ public virtual void TestAbsDelay(ref int delay, int correctedTime)
1627516275 }
1627616276
1627716277 /// <summary>
16278- /// ToggleDoors
16279- /// Toggles status of doors of a train
16280- /// Parameters: right = true if right doors; open = true if opening
16278+ /// SetDoors
16279+ /// Sets status of doors of a train
1628116280 /// </summary>
16282- public void ToggleDoors(bool right , bool open)
16281+ public void SetDoors(DoorSide side , bool open)
1628316282 {
1628416283 foreach (TrainCar car in Cars)
1628516284 {
1628616285 var mstsWagon = car as MSTSWagon;
16287- if (!car.Flipped && right || car.Flipped && !right)
16286+ var carSide = car.Flipped ? Doors.FlippedDoorSide(side) : side;
16287+ if (carSide != DoorSide.Left)
1628816288 {
16289- mstsWagon.DoorRightOpen = open;
16289+ mstsWagon.RightDoor.SetDoor( open) ;
1629016290 }
16291- else
16291+ if (carSide != DoorSide.Right)
16292+ {
16293+ mstsWagon.LeftDoor.SetDoor(open);
16294+ }
16295+ }
16296+ if (Simulator.PlayerLocomotive?.Train == this && MPManager.IsMultiPlayer())
16297+ {
16298+ if (side != DoorSide.Left) MPManager.Notify((new MSGEvent(MPManager.GetUserName(), "DOORR", open ? 1 : 0)).ToString());
16299+ if (side != DoorSide.Right) MPManager.Notify((new MSGEvent(MPManager.GetUserName(), "DOORL", open ? 1 : 0)).ToString());
16300+ }
16301+ }
16302+
16303+ /// <summary>
16304+ /// LockDoors
16305+ /// Locks doors of a train so they cannot be opened
16306+ /// Parameters: right = true if right doors; lck = true if locking
16307+ /// </summary>
16308+ public void LockDoors(DoorSide side, bool lck)
16309+ {
16310+ foreach (TrainCar car in Cars)
16311+ {
16312+ var mstsWagon = car as MSTSWagon;
16313+ var carSide = car.Flipped ? Doors.FlippedDoorSide(side) : side;
16314+ if (carSide != DoorSide.Left)
16315+ {
16316+ mstsWagon.RightDoor.SetDoorLock(lck);
16317+ }
16318+ if (carSide != DoorSide.Right)
1629216319 {
16293- mstsWagon.DoorLeftOpen = open ;
16320+ mstsWagon.LeftDoor.SetDoorLock(lck) ;
1629416321 }
16295- mstsWagon.SignalEvent(open ? Event.DoorOpen : Event.DoorClose); // hook for sound trigger
1629616322 }
1629716323 }
1629816324
16325+ /// <summary>
16326+ /// DoorState
16327+ /// Returns status of doors of a train
16328+ /// </summary>
16329+ public DoorState DoorState(DoorSide side)
16330+ {
16331+ return Cars.Select(car => {
16332+ var wagon = (car as MSTSWagon);
16333+ var carSide = car.Flipped ? Doors.FlippedDoorSide(side) : side;
16334+ switch(carSide)
16335+ {
16336+ case DoorSide.Left:
16337+ return wagon.Doors.LeftDoor.State;
16338+ case DoorSide.Right:
16339+ return wagon.Doors.RightDoor.State;
16340+ default:
16341+ var left = wagon.Doors.LeftDoor.State;
16342+ var right = wagon.Doors.RightDoor.State;
16343+ return left < right ? right : left;
16344+ }
16345+ }).Max();
16346+ }
16347+
1629916348 /// <summary>
1630016349 /// Check if it's time to have a failed car or locomotive
1630116350 /// </summary>
0 commit comments