public static void CargoTruckAI_PostChangeVehicleType(bool __result, ref CargoParcel __state, ushort vehicleID, ref Vehicle vehicleData, PathUnit.Position pathPos, uint laneID) { if (__result) { CargoData.Instance.Count(__state); } }
public static void CargoTruckAI_PreChangeVehicleType(out CargoParcel __state, ushort vehicleID, ref Vehicle vehicleData, PathUnit.Position pathPos, uint laneID) { Vector3 vector = NetManager.instance.m_lanes.m_buffer[laneID].CalculatePosition(0.5f); NetInfo info = NetManager.instance.m_segments.m_buffer[pathPos.m_segment].Info; ushort buildingID = BuildingManager.instance.FindBuilding(vector, 100f, info.m_class.m_service, ItemClass.SubService.None, Building.Flags.None, Building.Flags.None); __state = new CargoParcel(buildingID, true, vehicleData.m_transferType, vehicleData.m_transferSize, vehicleData.m_flags); }
private void UpdateVehicleInfoPanel() { var vehicleID = WorldInfoPanel.GetCurrentInstanceID().Vehicle; if (vehicleID != 0 && vehicleCargoChart != null) { int guard = 0; // Find leading vehicle that actually has all the cargo while (VehicleManager.instance.m_vehicles.m_buffer[vehicleID].m_leadingVehicle != 0) { guard++; vehicleID = VehicleManager.instance.m_vehicles.m_buffer[vehicleID].m_leadingVehicle; if (guard > ushort.MaxValue) { Debug.LogError("Invalid list detected!"); return; } } var ai = VehicleManager.instance.m_vehicles.m_buffer[vehicleID].Info.m_vehicleAI; if (ai is CargoTrainAI || ai is CargoShipAI) { var cargo = VehicleManager.instance.m_vehicles.m_buffer[vehicleID].m_firstCargo; var result = new float[CargoParcel.ResourceTypes.Length]; guard = 0; while (cargo != 0) { var parcel = new CargoParcel(0, false, VehicleManager.instance.m_vehicles.m_buffer[cargo].m_transferType, VehicleManager.instance.m_vehicles.m_buffer[cargo].m_transferSize, VehicleManager.instance.m_vehicles.m_buffer[cargo].m_flags); result[parcel.ResourceType] += parcel.transferSize; cargo = VehicleManager.instance.m_vehicles.m_buffer[cargo].m_nextCargo; guard++; if (guard > ushort.MaxValue) { Debug.LogError("Invalid list detected!"); return; } } var total = result.Sum(); Debug.Log(string.Join(", ", result.Select(v => v / total).Select(f => f.ToString()).ToArray())); vehicleCargoChart.isVisible = true; vehicleCargoChart.tooltip = string.Format("{0:0}{1}", total / 1000, Localization.Get("KILO_UNITS")); if (Math.Abs(total) < 1f) { total = 1f; } vehicleCargoChart.SetValues(result.Select(v => v / total).ToArray()); } else { vehicleCargoChart.isVisible = false; } } }
public void Count(CargoParcel cargo) { if (cargo.building == 0 || !(BuildingManager.instance.m_buildings.m_buffer[cargo.building].Info.m_buildingAI is CargoStationAI)) { return; } if (cargoStatIndex.TryGetValue(cargo.building, out CargoStats2 stats)) { stats.CarsCounted[(int)cargo.flags] += cargo.transferSize; } }
public static void CargoTruckAI_SetSource(ushort vehicleID, ref Vehicle data, ushort sourceBuilding) { var parcel = new CargoParcel(sourceBuilding, false, data.m_transferType, data.m_transferSize, data.m_flags); CargoData.Instance.Count(parcel); }