Update CommunityMapLocation
- Fetch trains whose locomotives are turned in addition to what the player may be standing on. - Add reporting of derailed state and speed.
This commit is contained in:
1 parent
7ebf2556ba
commit
2f27c35f57
5 files changed
+55
-9
No files matched your search
@@ -1,5 +1,10 @@
|
||||
using DV.HUD;
|
||||
using DV.Customization;
|
||||
using DV.HUD;
|
||||
using DV.Simulation.Cars;
|
||||
using DV.Utils;
|
||||
using LocoSim.Implementations;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Net;
|
||||
using System.Net.Http;
|
||||
@@ -20,7 +25,7 @@ namespace CommunityMapLocation.Api.Location
|
||||
var reverse = false;
|
||||
|
||||
// If the player is in a loco, we want to get the heading of the loco instead of the play
|
||||
if (PlayerManager.Car?.IsLoco == true)
|
||||
if (PlayerManager.Car != null && PlayerManager.Car.IsLoco)
|
||||
{
|
||||
rotationTransform = PlayerManager.Car.transform;
|
||||
|
||||
@@ -36,16 +41,37 @@ namespace CommunityMapLocation.Api.Location
|
||||
rotationTransform = PlayerManager.PlayerCamera.transform;
|
||||
}
|
||||
|
||||
var cars = Array.Empty<CarLocationResponse>();
|
||||
if (PlayerManager.Car != null)
|
||||
{
|
||||
cars = PlayerManager.Car.trainset.cars.Select(c => new CarLocationResponse(c)).ToArray();
|
||||
var relevantCars = new Dictionary<TrainCar, CarLocationResponse>();
|
||||
foreach(var carEntry in TrainCarRegistry.Instance.logicCarToTrainCar) {
|
||||
if(IsLocoActive(carEntry.Value)) {
|
||||
foreach(var trainsetCar in carEntry.Value.trainset.cars) {
|
||||
if(!relevantCars.ContainsKey(trainsetCar))
|
||||
relevantCars.Add(trainsetCar, new CarLocationResponse(trainsetCar));
|
||||
relevantCars[trainsetCar].IsActive = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
if(PlayerManager.Car != null) {
|
||||
foreach(var car in PlayerManager.Car.trainset.cars) {
|
||||
if(!relevantCars.ContainsKey(car))
|
||||
relevantCars.Add(car, new CarLocationResponse(car));
|
||||
relevantCars[car].IsPlayer = true;
|
||||
}
|
||||
}
|
||||
|
||||
return new LocationResponse(PlayerManager.PlayerTransform, reverse)
|
||||
{
|
||||
Cars = cars
|
||||
Cars = relevantCars.Values.ToArray() ?? Array.Empty<CarLocationResponse>()
|
||||
};
|
||||
}
|
||||
|
||||
private bool IsLocoActive(TrainCar loco) {
|
||||
if(!loco.IsLoco) return false;
|
||||
if(string.IsNullOrWhiteSpace(loco.Customization?.electronicsFuseID)) return false;
|
||||
if(loco.SimController == null || loco.SimController.simFlow == null | loco.Customization == null) return false;
|
||||
if(loco.SimController.simFlow.TryGetFuse(loco.Customization.electronicsFuseID, out Fuse fuse) == true)
|
||||
return fuse.State;
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in new issue
Block a user