/// <summary> /// De-assigns the vehicle. /// </summary> private void DeAssign() { if (Global.Buildings != null) { foreach (BuildingKeeper.StandardServiceBuildings buildings in Global.Buildings.StandardServices) { foreach (ServiceBuildingInfo serviceBuilding in buildings.ServiceBuildings.Values) { ServiceVehicleInfo serviceVehicle; if (serviceBuilding.Vehicles.TryGetValue(this.VehicleId, out serviceVehicle) && serviceVehicle.Target != 0) { TargetBuildingInfo targetBuilding; if (buildings.TargetBuildings.TryGetValue(serviceVehicle.Target, out targetBuilding)) { targetBuilding.Handled = false; } if (this.lastDeAssignStamp != Global.CurrentFrame) { if (serviceVehicle.DeAssign().DeSpawned) { serviceBuilding.Vehicles.Remove(this.VehicleId); } this.lastDeAssignStamp = Global.CurrentFrame; } } } } } if (this.lastDeAssignStamp != Global.CurrentFrame) { if (Log.LogALot) { Log.DevDebug(this, "DeAssign", this.dispatcherType, this.VehicleId); } VehicleHelper.DeAssign(this.VehicleId); } }
/// <summary> /// De-assign target from vehicle. /// </summary> /// <param name="vehicle">The vehicle.</param> /// <param name="force">If set to <c>true</c> force de-assignment.</param> /// <param name="sourceObject">The source object.</param> /// <param name="sourceBlock">The source block.</param> /// <param name="logMessage">The log message.</param> /// <returns>The result of the action.</returns> public VehicleResult DeAssign(ref Vehicle vehicle, bool force = false, object sourceObject = null, string sourceBlock = null, string logMessage = null) { if (this.lastDeAssignStamp == Global.CurrentFrame) { return(new VehicleResult(vehicle.m_targetBuilding == 0 && this.Target == 0)); } if (force || Global.CurrentFrame - this.LastAssigned > Global.TargetLingerDelay || (vehicle.m_targetBuilding != this.Target && !this.LingerWrongTargets)) { this.lastDeAssignStamp = Global.CurrentFrame; if (vehicle.m_targetBuilding == 0 && this.Target == 0) { return(new VehicleResult(true)); } if (Log.LogALot && (sourceObject != null || sourceBlock != null || logMessage != null)) { Log.DevDebug(this, "DeAssign", sourceBlock, logMessage, this.VehicleId, vehicle.m_targetBuilding, this.Target); } // Set internal target. this.Target = 0; // Unassign the vehicle. ushort serviceBuildingId = vehicle.m_sourceBuilding; VehicleResult result = VehicleHelper.DeAssign(this.VehicleId, ref vehicle); if (result.DeSpawned) { ServiceBuildingInfo building = Global.Buildings.GetServiceBuilding(serviceBuildingId); if (building != null) { building.Vehicles.Remove(this.VehicleId); } } return(result); } return(new VehicleResult(vehicle.m_targetBuilding == 0 && this.Target == 0)); }