Ejemplo n.º 1
0
        /// <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);
            }
        }
Ejemplo n.º 2
0
        /// <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));
        }