Esempio n. 1
0
 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);
     }
 }
Esempio n. 2
0
        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;
                }
            }
        }
Esempio n. 4
0
        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;
            }
        }
Esempio n. 5
0
        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);
        }