internal void Reset() { #if DEBUG bool citDebug = (GlobalConfig.Instance.Debug.CitizenInstanceId == 0 || GlobalConfig.Instance.Debug.CitizenInstanceId == instanceId) && (GlobalConfig.Instance.Debug.CitizenId == 0 || GlobalConfig.Instance.Debug.CitizenId == GetCitizenId()) && (GlobalConfig.Instance.Debug.SourceBuildingId == 0 || GlobalConfig.Instance.Debug.SourceBuildingId == Singleton <CitizenManager> .instance.m_instances.m_buffer[instanceId].m_sourceBuilding) && (GlobalConfig.Instance.Debug.TargetBuildingId == 0 || GlobalConfig.Instance.Debug.TargetBuildingId == Singleton <CitizenManager> .instance.m_instances.m_buffer[instanceId].m_targetBuilding) ; bool debug = GlobalConfig.Instance.Debug.Switches[2] && citDebug; bool fineDebug = GlobalConfig.Instance.Debug.Switches[4] && citDebug; if (fineDebug) { Log.Warning($"ExtCitizenInstance.Reset({instanceId}): Resetting ext. citizen instance {instanceId}"); } #endif //Flags = ExtFlags.None; pathMode = ExtPathMode.None; failedParkingAttempts = 0; parkingSpaceLocation = ExtParkingSpaceLocation.None; parkingSpaceLocationId = 0; lastDistanceToParkedCar = float.MaxValue; atOutsideConnection = false; //ParkedVehiclePosition = default(Vector3); ReleaseReturnPath(); }
internal ExtCitizenInstance(ushort instanceId) { this.instanceId = instanceId; pathMode = ExtPathMode.None; failedParkingAttempts = 0; parkingSpaceLocationId = 0; parkingSpaceLocation = ExtParkingSpaceLocation.None; parkingPathStartPosition = null; returnPathId = 0; returnPathState = ExtPathState.None; lastDistanceToParkedCar = 0; }
internal void Reset(bool debugLog = true) { #if DEBUG if (debugLog && GlobalConfig.Instance.Debug.Switches[4]) { Log.Warning($"ExtCitizenInstance.Reset({instanceId}): Resetting ext. citizen instance {instanceId}"); } #endif //Flags = ExtFlags.None; pathMode = ExtPathMode.None; failedParkingAttempts = 0; parkingSpaceLocation = ExtParkingSpaceLocation.None; parkingSpaceLocationId = 0; lastDistanceToParkedCar = float.MaxValue; //ParkedVehiclePosition = default(Vector3); ReleaseReturnPath(); }
public bool ExtSimulationStep(ushort instanceId, ref CitizenInstance instanceData, ref ExtCitizenInstance extInstance, Vector3 physicsLodRefPos) { IExtCitizenInstanceManager extCitInstMan = Constants.ManagerFactory.ExtCitizenInstanceManager; #if DEBUG bool citizenDebug = (DebugSettings.CitizenInstanceId == 0 || DebugSettings.CitizenInstanceId == instanceId) && (DebugSettings.CitizenId == 0 || DebugSettings.CitizenId == instanceData.m_citizen) && (DebugSettings.SourceBuildingId == 0 || DebugSettings.SourceBuildingId == instanceData.m_sourceBuilding) && (DebugSettings.TargetBuildingId == 0 || DebugSettings.TargetBuildingId == instanceData.m_targetBuilding); bool logParkingAi = DebugSwitch.BasicParkingAILog.Get() && citizenDebug; bool extendedLogParkingAi = DebugSwitch.ExtendedParkingAILog.Get() && citizenDebug; #else var logParkingAi = false; var extendedLogParkingAi = false; #endif #if DEBUG ExtPathMode logPathMode = extInstance.pathMode; #else var logPathMode = 0; #endif switch (extInstance.pathMode) { // check if the citizen has reached a parked car or target case ExtPathMode.WalkingToParkedCar: case ExtPathMode.ApproachingParkedCar: { Citizen[] citizensBuffer = Singleton <CitizenManager> .instance.m_citizens.m_buffer; ushort parkedVehicleId = citizensBuffer[instanceData.m_citizen].m_parkedVehicle; if (parkedVehicleId == 0) { // citizen is reaching their parked car but does not own a parked car Log._DebugOnlyWarningIf( logParkingAi, () => $"CustomHumanAI.ExtSimulationStep({instanceId}): " + $"Citizen instance {instanceId} was walking to / reaching " + $"their parked car ({logPathMode}) but parked " + "car has disappeared. RESET."); extCitInstMan.Reset(ref extInstance); instanceData.m_flags &= ~CitizenInstance.Flags.WaitingPath; instanceData.m_flags &= ~(CitizenInstance.Flags.HangAround | CitizenInstance.Flags.Panicking | CitizenInstance.Flags.SittingDown | CitizenInstance.Flags.Cheering); InvalidPath(instanceId, ref instanceData); return(true); } VehicleParked[] parkedVehicles = Singleton <VehicleManager> .instance.m_parkedVehicles.m_buffer; ParkedCarApproachState approachState = AdvancedParkingManager.Instance.CitizenApproachingParkedCarSimulationStep( instanceId, ref instanceData, ref extInstance, physicsLodRefPos, ref parkedVehicles[parkedVehicleId]); switch (approachState) { case ParkedCarApproachState.None: default: break; case ParkedCarApproachState.Approaching: // citizen approaches their parked car return(true); case ParkedCarApproachState.Approached: { // citizen reached their parked car Log._DebugIf( extendedLogParkingAi, () => $"CustomHumanAI.CustomSimulationStep({instanceId}): " + $"Citizen instance {instanceId} arrived at parked car. " + $"PathMode={logPathMode}"); if (instanceData.m_path != 0) { Singleton <PathManager> .instance.ReleasePath(instanceData.m_path); instanceData.m_path = 0; } instanceData.m_flags &= CitizenInstance.Flags.Created | CitizenInstance.Flags.Cheering | CitizenInstance.Flags.Deleted | CitizenInstance.Flags.Underground | CitizenInstance.Flags.CustomName | CitizenInstance.Flags.Character | CitizenInstance.Flags.BorrowCar | CitizenInstance.Flags.HangAround | CitizenInstance.Flags.InsideBuilding | CitizenInstance.Flags.WaitingPath | CitizenInstance.Flags.TryingSpawnVehicle | CitizenInstance.Flags.CannotUseTransport | CitizenInstance.Flags.Panicking | CitizenInstance.Flags.OnPath | CitizenInstance.Flags.SittingDown | CitizenInstance.Flags.AtTarget | CitizenInstance.Flags.RequireSlowStart | CitizenInstance.Flags.Transition | CitizenInstance.Flags.RidingBicycle | CitizenInstance.Flags.OnBikeLane | CitizenInstance.Flags.CannotUseTaxi | CitizenInstance.Flags.CustomColor | CitizenInstance.Flags.Blown | CitizenInstance.Flags.Floating | CitizenInstance.Flags.TargetFlags; if (StartPathFind(instanceId, ref instanceData)) { return(true); } else { instanceData.Unspawn(instanceId); extCitInstMan.Reset(ref extInstance); return(true); } } case ParkedCarApproachState.Failure: { Log._DebugIf( logParkingAi, () => $"CustomHumanAI.ExtSimulationStep({instanceId}): " + $"Citizen instance {instanceId} failed to arrive at " + $"parked car. PathMode={logPathMode}"); // repeat path-finding instanceData.m_flags &= ~CitizenInstance.Flags.WaitingPath; instanceData.m_flags &= ~(CitizenInstance.Flags.HangAround | CitizenInstance.Flags.Panicking | CitizenInstance.Flags.SittingDown | CitizenInstance.Flags.Cheering); InvalidPath(instanceId, ref instanceData); return(true); } } break; } case ExtPathMode.WalkingToTarget: case ExtPathMode.TaxiToTarget: { AdvancedParkingManager.Instance.CitizenApproachingTargetSimulationStep( instanceId, ref instanceData, ref extInstance); break; } } return(false); }