public void SetVehicleCapacity(string assetName, int newCapacity) { VehicleInfo vehicle = PrefabCollection <VehicleInfo> .FindLoaded(assetName); if (vehicle != null && !VehicleUtils.IsTrailer(vehicle)) { Dictionary <string, MutableTuple <float, int> > assetsCapacitiesPercentagePerTrailer = GetCapacityRelative(vehicle); int capacityUsed = 0; foreach (KeyValuePair <string, MutableTuple <float, int> > entry in assetsCapacitiesPercentagePerTrailer) { SafeGetAsset(entry.Key).Capacity = Mathf.RoundToInt(newCapacity <= 0 ? -1f : entry.Value.First *newCapacity); capacityUsed += SafeGetAsset(entry.Key).Capacity *entry.Value.Second; } if (newCapacity > 0 && capacityUsed != newCapacity) { SafeGetAsset(assetsCapacitiesPercentagePerTrailer.Keys.ElementAt(0)).Capacity += (newCapacity - capacityUsed) / assetsCapacitiesPercentagePerTrailer[assetsCapacitiesPercentagePerTrailer.Keys.ElementAt(0)].Second; } foreach (string entry in assetsCapacitiesPercentagePerTrailer.Keys) { VehicleAI vai = PrefabCollection <VehicleInfo> .FindLoaded(entry).m_vehicleAI; SetVehicleCapacity(vai, SafeGetAsset(entry).Capacity); } SimulationManager.instance.StartCoroutine(TLMVehicleUtils.UpdateCapacityUnitsFromTSD()); } }
public static void RemoveAllUnwantedVehicles() { var r = new Randomizer(); for (ushort vehicleId = 1; vehicleId < Singleton <VehicleManager> .instance.m_vehicles.m_size; vehicleId++) { if ((Singleton <VehicleManager> .instance.m_vehicles.m_buffer[vehicleId].m_flags & Vehicle.Flags.Created) != 0) { ref Vehicle vehicle = ref Singleton <VehicleManager> .instance.m_vehicles.m_buffer[vehicleId]; VehicleInfo vehicleInfo = vehicle.Info; if (vehicleInfo != null && !VehicleUtils.IsTrailer(vehicleInfo) && vehicle.m_transportLine == 0 && vehicle.m_sourceBuilding > 0) { var buildingSsd = ServiceSystemDefinition.from(vehicleInfo); if (buildingSsd != null) { if (!ExtensionStaticExtensionMethods.IsModelCompatible(vehicle.m_sourceBuilding, vehicleInfo, ref buildingSsd)) { if (vehicleInfo.m_vehicleAI is CarAI) { var model = buildingSsd.GetAModel(ref r, vehicle.m_sourceBuilding); VehicleUtils.ReplaceVehicleModel(vehicleId, model); } else { Singleton <VehicleManager> .instance.ReleaseVehicle(vehicleId); } } } } } }
// public static void RemoveAllUnwantedVehicles() { using var x = new EnumerableActionThread(new Func<ThreadBase, IEnumerator>(RemoveAllUnwantedVehicles)); } public static IEnumerator RemoveAllUnwantedVehicles(ThreadBase t) { ushort num = 0; while (num < Singleton <VehicleManager> .instance.m_vehicles.m_size) { VehicleInfo vehicleInfo = Singleton <VehicleManager> .instance.m_vehicles.m_buffer[num].Info; if (vehicleInfo != null && !VehicleUtils.IsTrailer(vehicleInfo) && Singleton <VehicleManager> .instance.m_vehicles.m_buffer[num].m_transportLine == 0 && Singleton <VehicleManager> .instance.m_vehicles.m_buffer[num].m_sourceBuilding > 0) { BuildingInfo buildingInfo = Singleton <BuildingManager> .instance.m_buildings.m_buffer[Singleton <VehicleManager> .instance.m_vehicles.m_buffer[num].m_sourceBuilding].Info; var buildingSsd = ServiceSystemDefinition.from(buildingInfo, vehicleInfo.m_vehicleType); if (buildingSsd != null) { if (!ExtensionStaticExtensionMethods.IsModelCompatible(Singleton <VehicleManager> .instance.m_vehicles.m_buffer[num].m_sourceBuilding, vehicleInfo, ref buildingSsd)) { Singleton <VehicleManager> .instance.ReleaseVehicle(num); } } } if (num % 256 == 255) { yield return(num); } num++; } yield break; }
public static IEnumerator RemoveAllUnwantedVehicles(ThreadBase t) { ushort vehId = 1; while (vehId < Singleton <VehicleManager> .instance.m_vehicles.m_size) { Vehicle vehicle = Singleton <VehicleManager> .instance.m_vehicles.m_buffer[vehId]; VehicleInfo vehicleInfo = vehicle.Info; if (vehicleInfo != null && !VehicleUtils.IsTrailer(vehicleInfo) && vehicle.m_transportLine == 0) { uint citizenOwner = vehicle.Info.m_vehicleAI.GetOwnerID(vehId, ref vehicle).Citizen; if (citizenOwner > 0) { var ownerWealth = CitizenWealthDefinition.from(CitizenManager.instance.m_citizens.m_buffer[citizenOwner].WealthLevel); if (ownerWealth != null) { var ext = ownerWealth.GetVehicleExtension(); if (!ext.IsModelCompatible(vehicleInfo)) { Singleton <VehicleManager> .instance.ReleaseVehicle(vehId); } } } } if (vehId % 256 == 255) { yield return(vehId); } vehId++; } vehId = 1; while (vehId < Singleton <VehicleManager> .instance.m_parkedVehicles.m_size) { VehicleParked vehicle = Singleton <VehicleManager> .instance.m_parkedVehicles.m_buffer[vehId]; VehicleInfo vehicleInfo = vehicle.Info; if (vehicleInfo != null && !VehicleUtils.IsTrailer(vehicleInfo)) { uint citizenOwner = vehicle.m_ownerCitizen; if (citizenOwner > 0) { var ownerWealth = CitizenWealthDefinition.from(CitizenManager.instance.m_citizens.m_buffer[citizenOwner].WealthLevel); if (ownerWealth != null) { if (!ownerWealth.GetVehicleExtension().IsModelCompatible(vehicleInfo)) { Singleton <VehicleManager> .instance.m_parkedVehicles.m_buffer[vehId].Info = ownerWealth.GetVehicleExtension().GetAModel(); } } } } if (vehId % 256 == 255) { yield return(vehId); } vehId++; } yield break; }
internal static List <string> LoadBasicAssets(CitizenWealthDefinition definition) { var basicAssetsList = new List <string>(); for (uint num = 0u; num < (ulong)PrefabCollection <VehicleInfo> .PrefabCount(); num += 1u) { VehicleInfo prefab = PrefabCollection <VehicleInfo> .GetPrefab(num); if (!(prefab == null) && definition.isFromSystem(prefab) && !VehicleUtils.IsTrailer(prefab)) { basicAssetsList.Add(prefab.name); } } return(basicAssetsList); }
internal static List <string> LoadBasicAssets(ref TransportSystemDefinition definition) { var basicAssetsList = new List <string>(); TLMUtils.doLog("LoadBasicAssets: pre prefab read"); for (uint num = 0u; num < (ulong)PrefabCollection <VehicleInfo> .PrefabCount(); num += 1u) { VehicleInfo prefab = PrefabCollection <VehicleInfo> .GetPrefab(num); if (!(prefab == null) && definition.IsFromSystem(prefab) && !VehicleUtils.IsTrailer(prefab)) { basicAssetsList.Add(prefab.name); } } return(basicAssetsList); }