592 lines
18 KiB
Scheme
Executable File
592 lines
18 KiB
Scheme
Executable File
// *****************************************************************************************
|
|
// *****************************************************************************************
|
|
// *****************************************************************************************
|
|
//
|
|
// MISSION NAME : vehicle_chase_debug.sch
|
|
// AUTHOR : Rob Schmitz
|
|
// DESCRIPTION : Widgets and debug routines to aid 'vehicle chase' testing.
|
|
//
|
|
// *****************************************************************************************
|
|
// *****************************************************************************************
|
|
// *****************************************************************************************
|
|
|
|
USING "commands_debug.sch"
|
|
USING "commands_streaming.sch"
|
|
USING "commands_task.sch"
|
|
USING "script_player.sch"
|
|
|
|
CONST_INT VEHICLE_CHASE_DEBUG_MAX_CHASERS 5
|
|
|
|
STRUCT STRUCT_Vehicle_Chase_Debug_Controller
|
|
BOOL bRunTest
|
|
BOOL bTestStarted
|
|
ENDSTRUCT
|
|
|
|
STRUCT STRUCT_Vehicle_Chase_Debug_RunningData
|
|
VEHICLE_INDEX iPlayerVehicle
|
|
PED_INDEX aChaserPeds[VEHICLE_CHASE_DEBUG_MAX_CHASERS]
|
|
VEHICLE_INDEX aChaserVehicles[VEHICLE_CHASE_DEBUG_MAX_CHASERS]
|
|
ENDSTRUCT
|
|
|
|
STRUCT STRUCT_Vehicle_Chase_Debug_PlayerParameters
|
|
INT iVehicleModel
|
|
INT iDrivingMode
|
|
FLOAT fCruiseSpeed
|
|
BOOL bUserControlled
|
|
ENDSTRUCT
|
|
|
|
STRUCT STRUCT_Vehicle_Chase_Debug_ChasersParameters
|
|
INT iPedModel
|
|
INT iVehicleModel
|
|
INT iNumChasers
|
|
BOOL bCantBlock
|
|
BOOL bCantPursue
|
|
BOOL bCantRam
|
|
BOOL bCantSpinOut
|
|
BOOL bCantMakeAggressiveMove
|
|
FLOAT fIdealPursuitDistance
|
|
ENDSTRUCT
|
|
|
|
STRUCT STRUCT_Vehicle_Chase_Debug_EnvironmentParameters
|
|
VECTOR vStart
|
|
FLOAT fStartHeading
|
|
VECTOR vEnd
|
|
ENDSTRUCT
|
|
|
|
STRUCT STRUCT_Vehicle_Chase_Debug_ChasersParameterSets
|
|
BOOL bNone
|
|
BOOL bPursue
|
|
BOOL bChase
|
|
ENDSTRUCT
|
|
|
|
STRUCT STRUCT_Vehicle_Chase_Debug_EnvironmentParameterSets
|
|
BOOL bHighway
|
|
BOOL bCorner
|
|
ENDSTRUCT
|
|
|
|
STRUCT STRUCT_Vehicle_Chase_Debug_GameState
|
|
INT iMaxWantedLevel
|
|
BOOL bPlayerWillFlyThroughWindscreen
|
|
ENDSTRUCT
|
|
|
|
STRUCT STRUCT_Vehicle_Chase_Debug
|
|
STRUCT_Vehicle_Chase_Debug_Controller Controller
|
|
STRUCT_Vehicle_Chase_Debug_RunningData RunningData
|
|
STRUCT_Vehicle_Chase_Debug_PlayerParameters PlayerParameters
|
|
STRUCT_Vehicle_Chase_Debug_ChasersParameters ChasersParameters
|
|
STRUCT_Vehicle_Chase_Debug_EnvironmentParameters EnvironmentParameters
|
|
STRUCT_Vehicle_Chase_Debug_ChasersParameterSets ChasersParameterSets
|
|
STRUCT_Vehicle_Chase_Debug_EnvironmentParameterSets EnvironmentParameterSets
|
|
STRUCT_Vehicle_Chase_Debug_GameState GameState
|
|
ENDSTRUCT
|
|
|
|
PROC Create_Vehicle_Chase_Ped_Model_Widget(INT& iValue)
|
|
START_NEW_WIDGET_COMBO()
|
|
ADD_TO_WIDGET_COMBO("Chef")
|
|
ADD_TO_WIDGET_COMBO("Cop")
|
|
STOP_WIDGET_COMBO("Ped Model", iValue)
|
|
ENDPROC
|
|
|
|
FUNC MODEL_NAMES Vehicle_Chase_Debug_Int_To_Ped_ModelNames(INT iValue)
|
|
|
|
SWITCH iValue
|
|
|
|
CASE 0
|
|
RETURN S_M_Y_CHEF_01
|
|
|
|
CASE 1
|
|
RETURN S_M_Y_COP_01
|
|
|
|
DEFAULT
|
|
RETURN S_M_Y_CHEF_01
|
|
|
|
ENDSWITCH
|
|
|
|
ENDFUNC
|
|
|
|
PROC Create_Vehicle_Chase_Vehicle_Model_Widget(INT& iValue)
|
|
START_NEW_WIDGET_COMBO()
|
|
ADD_TO_WIDGET_COMBO("Tailgater")
|
|
ADD_TO_WIDGET_COMBO("Police")
|
|
STOP_WIDGET_COMBO("Vehicle Model", iValue)
|
|
ENDPROC
|
|
|
|
FUNC MODEL_NAMES Vehicle_Chase_Debug_Int_To_Vehicle_ModelNames(INT iValue)
|
|
|
|
SWITCH iValue
|
|
|
|
CASE 0
|
|
RETURN TAILGATER
|
|
|
|
CASE 1
|
|
RETURN POLICE
|
|
|
|
DEFAULT
|
|
RETURN TAILGATER
|
|
|
|
ENDSWITCH
|
|
|
|
ENDFUNC
|
|
|
|
PROC Create_Vehicle_Chase_Driving_Mode_Widget(INT& iValue)
|
|
START_NEW_WIDGET_COMBO()
|
|
ADD_TO_WIDGET_COMBO("Avoid Cars")
|
|
ADD_TO_WIDGET_COMBO("Avoid Cars (Reckless)")
|
|
ADD_TO_WIDGET_COMBO("Plough Through")
|
|
STOP_WIDGET_COMBO("Driving Mode", iValue)
|
|
ENDPROC
|
|
|
|
FUNC DRIVINGMODE Vehicle_Chase_Debug_Int_To_DrivingMode(INT iValue)
|
|
|
|
SWITCH iValue
|
|
|
|
CASE 0
|
|
RETURN DRIVINGMODE_AVOIDCARS
|
|
CASE 1
|
|
RETURN DRIVINGMODE_AVOIDCARS_RECKLESS
|
|
CASE 2
|
|
RETURN DRIVINGMODE_PLOUGHTHROUGH
|
|
DEFAULT
|
|
RETURN DRIVINGMODE_AVOIDCARS
|
|
ENDSWITCH
|
|
|
|
ENDFUNC
|
|
|
|
PROC Initialise_Vehicle_Chase_Debug(STRUCT_Vehicle_Chase_Debug& rData)
|
|
|
|
//Initialize the controller.
|
|
rData.Controller.bRunTest = FALSE
|
|
rData.Controller.bTestStarted = FALSE
|
|
|
|
//Initialize the running data.
|
|
rData.RunningData.iPlayerVehicle = NULL
|
|
INT i
|
|
FOR i = 0 TO VEHICLE_CHASE_DEBUG_MAX_CHASERS - 1
|
|
rData.RunningData.aChaserPeds[i] = NULL
|
|
rData.RunningData.aChaserVehicles[i] = NULL
|
|
ENDFOR
|
|
|
|
//Initialize the player parameters.
|
|
rData.PlayerParameters.iVehicleModel = 0
|
|
rData.PlayerParameters.iDrivingMode = 0
|
|
rData.PlayerParameters.fCruiseSpeed = 50.0
|
|
rData.PlayerParameters.bUserControlled = FALSE
|
|
|
|
//Initialize the chasers parameters.
|
|
rData.ChasersParameters.iPedModel = 1
|
|
rData.ChasersParameters.iVehicleModel = 1
|
|
rData.ChasersParameters.iNumChasers = 1
|
|
rData.ChasersParameters.bCantBlock = FALSE
|
|
rData.ChasersParameters.bCantPursue = FALSE
|
|
rData.ChasersParameters.bCantRam = FALSE
|
|
rData.ChasersParameters.bCantSpinOut = FALSE
|
|
rData.ChasersParameters.bCantMakeAggressiveMove = FALSE
|
|
rData.ChasersParameters.fIdealPursuitDistance = 15.0
|
|
|
|
//Initialise the environment parameters.
|
|
rData.EnvironmentParameters.vStart = <<0.0, 0.0, 0.0>>
|
|
rData.EnvironmentParameters.fStartHeading = 0.0
|
|
rData.EnvironmentParameters.vEnd = <<0.0, 0.0, 0.0>>
|
|
|
|
//Initialize the chasers parameter sets.
|
|
rData.ChasersParameterSets.bNone = FALSE
|
|
rData.ChasersParameterSets.bPursue = FALSE
|
|
rData.ChasersParameterSets.bChase = TRUE
|
|
|
|
//Initialize the environment parameter sets.
|
|
rData.EnvironmentParameterSets.bHighway = TRUE
|
|
rData.EnvironmentParameterSets.bCorner = FALSE
|
|
|
|
//Initialize the game state.
|
|
rData.GameState.iMaxWantedLevel = GET_MAX_WANTED_LEVEL()
|
|
IF IS_PLAYER_PLAYING(PLAYER_ID())
|
|
rData.GameState.bPlayerWillFlyThroughWindscreen = GET_PED_CONFIG_FLAG(PLAYER_PED_ID(), PCF_WillFlyThroughWindscreen)
|
|
ENDIF
|
|
|
|
ENDPROC
|
|
|
|
PROC Create_Vehicle_Chase_Debug_Widgets(STRUCT_Vehicle_Chase_Debug& rData)
|
|
|
|
START_WIDGET_GROUP("Vehicle Chase Debug")
|
|
START_WIDGET_GROUP("Player Parameters")
|
|
Create_Vehicle_Chase_Vehicle_Model_Widget(rData.PlayerParameters.iVehicleModel)
|
|
Create_Vehicle_Chase_Driving_Mode_Widget(rData.PlayerParameters.iDrivingMode)
|
|
ADD_WIDGET_FLOAT_SLIDER("Cruise Speed", rData.PlayerParameters.fCruiseSpeed, 0.0, 100.0, 1.0)
|
|
ADD_WIDGET_BOOL("User Controlled", rData.PlayerParameters.bUserControlled)
|
|
STOP_WIDGET_GROUP()
|
|
START_WIDGET_GROUP("Chasers Parameters")
|
|
Create_Vehicle_Chase_Ped_Model_Widget(rData.ChasersParameters.iPedModel)
|
|
Create_Vehicle_Chase_Vehicle_Model_Widget(rData.ChasersParameters.iVehicleModel)
|
|
ADD_WIDGET_INT_SLIDER("Num Chasers", rData.ChasersParameters.iNumChasers, 0, VEHICLE_CHASE_DEBUG_MAX_CHASERS, 1)
|
|
ADD_WIDGET_BOOL("Can't Block", rData.ChasersParameters.bCantBlock)
|
|
ADD_WIDGET_BOOL("Can't Pursue", rData.ChasersParameters.bCantPursue)
|
|
ADD_WIDGET_BOOL("Can't Ram", rData.ChasersParameters.bCantRam)
|
|
ADD_WIDGET_BOOL("Can't Spin Out", rData.ChasersParameters.bCantSpinOut)
|
|
ADD_WIDGET_BOOL("Can't Make Aggressive Move", rData.ChasersParameters.bCantMakeAggressiveMove)
|
|
ADD_WIDGET_FLOAT_SLIDER("Ideal Pursuit Distance", rData.ChasersParameters.fIdealPursuitDistance, 0.0, 50.0, 1.0)
|
|
STOP_WIDGET_GROUP()
|
|
START_WIDGET_GROUP("Environment Parameters")
|
|
ADD_WIDGET_FLOAT_SLIDER("Start X", rData.EnvironmentParameters.vStart.x, -10000.0, 10000.0, 1.0)
|
|
ADD_WIDGET_FLOAT_SLIDER("Start Y", rData.EnvironmentParameters.vStart.y, -10000.0, 10000.0, 1.0)
|
|
ADD_WIDGET_FLOAT_SLIDER("Start Z", rData.EnvironmentParameters.vStart.z, -10000.0, 10000.0, 1.0)
|
|
ADD_WIDGET_FLOAT_SLIDER("Start Heading", rData.EnvironmentParameters.fStartHeading, 0.0, 360.0, 0.01)
|
|
ADD_WIDGET_FLOAT_SLIDER("End X", rData.EnvironmentParameters.vEnd.x, -10000.0, 10000.0, 1.0)
|
|
ADD_WIDGET_FLOAT_SLIDER("End Y", rData.EnvironmentParameters.vEnd.y, -10000.0, 10000.0, 1.0)
|
|
ADD_WIDGET_FLOAT_SLIDER("End Z", rData.EnvironmentParameters.vEnd.z, -10000.0, 10000.0, 1.0)
|
|
STOP_WIDGET_GROUP()
|
|
START_WIDGET_GROUP("Chasers Parameter Sets")
|
|
ADD_WIDGET_BOOL("None", rData.ChasersParameterSets.bNone)
|
|
ADD_WIDGET_BOOL("Pursue", rData.ChasersParameterSets.bPursue)
|
|
ADD_WIDGET_BOOL("Chase", rData.ChasersParameterSets.bChase)
|
|
STOP_WIDGET_GROUP()
|
|
START_WIDGET_GROUP("Environment Parameter Sets")
|
|
ADD_WIDGET_BOOL("Highway", rData.EnvironmentParameterSets.bHighway)
|
|
ADD_WIDGET_BOOL("Corner", rData.EnvironmentParameterSets.bCorner)
|
|
STOP_WIDGET_GROUP()
|
|
ADD_WIDGET_BOOL("Run Test", rData.Controller.bRunTest)
|
|
STOP_WIDGET_GROUP()
|
|
|
|
ENDPROC
|
|
|
|
FUNC VEHICLE_INDEX Vehicle_Chase_Debug_Create_Vehicle(MODEL_NAMES nModelName, VECTOR vPosition, FLOAT fHeading)
|
|
|
|
//Create a vehicle.
|
|
VEHICLE_INDEX iVehicleIndex = CREATE_VEHICLE(nModelName, vPosition, fHeading)
|
|
|
|
//Set the vehicle on the ground.
|
|
SET_VEHICLE_ON_GROUND_PROPERLY(iVehicleIndex)
|
|
|
|
//Turn the engine on.
|
|
SET_VEHICLE_ENGINE_ON(iVehicleIndex, TRUE, TRUE)
|
|
|
|
RETURN iVehicleIndex
|
|
|
|
ENDFUNC
|
|
|
|
FUNC BOOL Vehicle_Chase_Debug_Stream(STRUCT_Vehicle_Chase_Debug& rData)
|
|
|
|
//Stream the model for the player vehicle.
|
|
MODEL_NAMES mVehicle = Vehicle_Chase_Debug_Int_To_Vehicle_ModelNames(rData.PlayerParameters.iVehicleModel)
|
|
REQUEST_MODEL(mVehicle)
|
|
IF NOT HAS_MODEL_LOADED(mVehicle)
|
|
RETURN FALSE
|
|
ENDIF
|
|
|
|
//Stream the model for the chaser ped.
|
|
MODEL_NAMES mPed = Vehicle_Chase_Debug_Int_To_Ped_ModelNames(rData.ChasersParameters.iPedModel)
|
|
REQUEST_MODEL(mPed)
|
|
IF NOT HAS_MODEL_LOADED(mPed)
|
|
RETURN FALSE
|
|
ENDIF
|
|
|
|
//Stream the model for the chaser vehicles.
|
|
mVehicle = Vehicle_Chase_Debug_Int_To_Vehicle_ModelNames(rData.ChasersParameters.iVehicleModel)
|
|
REQUEST_MODEL(mVehicle)
|
|
IF NOT HAS_MODEL_LOADED(mVehicle)
|
|
RETURN FALSE
|
|
ENDIF
|
|
|
|
//Stream all path nodes.
|
|
IF NOT LOAD_ALL_PATH_NODES(TRUE)
|
|
RETURN FALSE
|
|
ENDIF
|
|
|
|
RETURN TRUE
|
|
|
|
ENDFUNC
|
|
|
|
PROC Vehicle_Chase_Debug_Save_Game_State(STRUCT_Vehicle_Chase_Debug& rData)
|
|
|
|
//Save the max wanted level.
|
|
rData.GameState.iMaxWantedLevel = GET_MAX_WANTED_LEVEL()
|
|
|
|
//Save whether the player will fly through the windscreen.
|
|
rData.GameState.bPlayerWillFlyThroughWindscreen = GET_PED_CONFIG_FLAG(PLAYER_PED_ID(), PCF_WillFlyThroughWindscreen)
|
|
|
|
ENDPROC
|
|
|
|
PROC Vehicle_Chase_Debug_Restore_Game_State(STRUCT_Vehicle_Chase_Debug& rData)
|
|
|
|
//Restore the max wanted level.
|
|
SET_MAX_WANTED_LEVEL(rData.GameState.iMaxWantedLevel)
|
|
|
|
//Restore whether the player will fly through the windscreen.
|
|
SET_PED_CONFIG_FLAG(PLAYER_PED_ID(), PCF_WillFlyThroughWindscreen, rData.GameState.bPlayerWillFlyThroughWindscreen)
|
|
|
|
ENDPROC
|
|
|
|
PROC Vehicle_Chase_Debug_Setup_Game_State()
|
|
|
|
//Set the max wanted level.
|
|
SET_MAX_WANTED_LEVEL(0)
|
|
|
|
//Block the player from flying through the windscreen.
|
|
SET_PED_CONFIG_FLAG(PLAYER_PED_ID(), PCF_WillFlyThroughWindscreen, FALSE)
|
|
|
|
ENDPROC
|
|
|
|
PROC Vehicle_Chase_Debug_Setup_Player(STRUCT_Vehicle_Chase_Debug& rData)
|
|
|
|
//Grab the player index.
|
|
PED_INDEX iPlayerIndex = PLAYER_PED_ID()
|
|
|
|
//Clear the player tasks.
|
|
CLEAR_PED_TASKS_IMMEDIATELY(iPlayerIndex)
|
|
|
|
//Move the player to the start position.
|
|
SET_PED_COORDS_KEEP_VEHICLE(iPlayerIndex, rData.EnvironmentParameters.vStart)
|
|
|
|
//Create the vehicle.
|
|
MODEL_NAMES mVehicle = Vehicle_Chase_Debug_Int_To_Vehicle_ModelNames(rData.PlayerParameters.iVehicleModel)
|
|
VEHICLE_INDEX iVehicleIndex = Vehicle_Chase_Debug_Create_Vehicle(mVehicle, rData.EnvironmentParameters.vStart, rData.EnvironmentParameters.fStartHeading)
|
|
|
|
//Set the player in the vehicle.
|
|
SET_PED_INTO_VEHICLE(iPlayerIndex, iVehicleIndex)
|
|
|
|
//Check if the player is not user controlled.
|
|
IF NOT rData.PlayerParameters.bUserControlled
|
|
|
|
//Cruise to the end position.
|
|
DRIVINGMODE nDrivingMode = Vehicle_Chase_Debug_Int_To_DrivingMode(rData.PlayerParameters.iDrivingMode)
|
|
TASK_VEHICLE_MISSION_COORS_TARGET(iPlayerIndex, iVehicleIndex, rData.EnvironmentParameters.vEnd, MISSION_GOTO, rData.PlayerParameters.fCruiseSpeed, nDrivingMode, 5.0, 20.0, FALSE)
|
|
ENDIF
|
|
|
|
//Update the running data.
|
|
rData.RunningData.iPlayerVehicle = iVehicleIndex
|
|
|
|
ENDPROC
|
|
|
|
PROC Vehicle_Chase_Debug_Setup_Chaser(STRUCT_Vehicle_Chase_Debug& rData, INT iChaser)
|
|
|
|
//Calculate the position.
|
|
VECTOR vPosition = GET_OFFSET_FROM_ENTITY_IN_WORLD_COORDS(PLAYER_PED_ID(), <<0.0, -15.0 * (iChaser + 1), 0.0>>)
|
|
|
|
//Create the ped.
|
|
MODEL_NAMES mPed = Vehicle_Chase_Debug_Int_To_Ped_ModelNames(rData.ChasersParameters.iPedModel)
|
|
PED_INDEX iPedIndex = CREATE_PED(PEDTYPE_MISSION, mPed, vPosition, rData.EnvironmentParameters.fStartHeading)
|
|
|
|
//Block the ped from flying through the windscreen.
|
|
SET_PED_CONFIG_FLAG(iPedIndex, PCF_WillFlyThroughWindscreen, FALSE)
|
|
|
|
//Create the vehicle.
|
|
MODEL_NAMES mVehicle = Vehicle_Chase_Debug_Int_To_Vehicle_ModelNames(rData.ChasersParameters.iVehicleModel)
|
|
VEHICLE_INDEX iVehicleIndex = Vehicle_Chase_Debug_Create_Vehicle(mVehicle, vPosition, rData.EnvironmentParameters.fStartHeading)
|
|
|
|
//Set the ped in the vehicle.
|
|
SET_PED_INTO_VEHICLE(iPedIndex, iVehicleIndex)
|
|
|
|
//Chase the player.
|
|
TASK_VEHICLE_CHASE(iPedIndex, PLAYER_PED_ID())
|
|
|
|
//Update the running data.
|
|
rData.RunningData.aChaserPeds[iChaser] = iPedIndex
|
|
rData.RunningData.aChaserVehicles[iChaser] = iVehicleIndex
|
|
|
|
ENDPROC
|
|
|
|
PROC Vehicle_Chase_Debug_Setup_Chasers(STRUCT_Vehicle_Chase_Debug& rData)
|
|
|
|
INT i
|
|
FOR i = 0 TO rData.ChasersParameters.iNumChasers - 1
|
|
Vehicle_Chase_Debug_Setup_Chaser(rData, i)
|
|
ENDFOR
|
|
|
|
ENDPROC
|
|
|
|
PROC Vehicle_Chase_Debug_Start(STRUCT_Vehicle_Chase_Debug& rData)
|
|
|
|
//Note that the test has started.
|
|
rData.Controller.bTestStarted = TRUE
|
|
|
|
//Save the game state.
|
|
Vehicle_Chase_Debug_Save_Game_State(rData)
|
|
|
|
//Set up the game state.
|
|
Vehicle_Chase_Debug_Setup_Game_State()
|
|
|
|
//Set up the player.
|
|
Vehicle_Chase_Debug_Setup_Player(rData)
|
|
|
|
//Set up the chasers.
|
|
Vehicle_Chase_Debug_Setup_Chasers(rData)
|
|
|
|
ENDPROC
|
|
|
|
PROC Vehicle_Chase_Debug_Maintain(STRUCT_Vehicle_Chase_Debug& rData)
|
|
|
|
//Maintain the chasers.
|
|
INT i
|
|
FOR i = 0 TO VEHICLE_CHASE_DEBUG_MAX_CHASERS - 1
|
|
|
|
//Check if the chaser ped is valid.
|
|
PED_INDEX iPedIndex = rData.RunningData.aChaserPeds[i]
|
|
IF iPedIndex != NULL
|
|
|
|
//Check if the ped is injured.
|
|
IF NOT IS_PED_INJURED(iPedIndex)
|
|
|
|
//Check if the ped is running the chase task.
|
|
IF GET_SCRIPT_TASK_STATUS(iPedIndex, SCRIPT_TASK_VEHICLE_CHASE) = PERFORMING_TASK
|
|
|
|
//Set the behavior flags.
|
|
SET_TASK_VEHICLE_CHASE_BEHAVIOR_FLAG(iPedIndex, VEHICLE_CHASE_CANT_BLOCK, rData.ChasersParameters.bCantBlock)
|
|
SET_TASK_VEHICLE_CHASE_BEHAVIOR_FLAG(iPedIndex, VEHICLE_CHASE_CANT_PURSUE, rData.ChasersParameters.bCantPursue)
|
|
SET_TASK_VEHICLE_CHASE_BEHAVIOR_FLAG(iPedIndex, VEHICLE_CHASE_CANT_RAM, rData.ChasersParameters.bCantRam)
|
|
SET_TASK_VEHICLE_CHASE_BEHAVIOR_FLAG(iPedIndex, VEHICLE_CHASE_CANT_SPIN_OUT, rData.ChasersParameters.bCantSpinOut)
|
|
SET_TASK_VEHICLE_CHASE_BEHAVIOR_FLAG(iPedIndex, VEHICLE_CHASE_CANT_MAKE_AGGRESSIVE_MOVE, rData.ChasersParameters.bCantMakeAggressiveMove)
|
|
|
|
//Set the ideal pursuit distance.
|
|
SET_TASK_VEHICLE_CHASE_IDEAL_PURSUIT_DISTANCE(iPedIndex, rData.ChasersParameters.fIdealPursuitDistance)
|
|
|
|
ENDIF
|
|
|
|
ENDIF
|
|
|
|
ENDIF
|
|
|
|
ENDFOR
|
|
|
|
ENDPROC
|
|
|
|
PROC Vehicle_Chase_Debug_Clean_Up(STRUCT_Vehicle_Chase_Debug& rData)
|
|
|
|
//Unload all path nodes.
|
|
LOAD_ALL_PATH_NODES(FALSE)
|
|
|
|
//Grab the player index.
|
|
PED_INDEX iPlayerIndex = PLAYER_PED_ID()
|
|
|
|
//Clear the ped tasks.
|
|
CLEAR_PED_TASKS_IMMEDIATELY(iPlayerIndex)
|
|
|
|
//Clear the player vehicle.
|
|
SET_VEHICLE_AS_NO_LONGER_NEEDED(rData.RunningData.iPlayerVehicle)
|
|
rData.RunningData.iPlayerVehicle = NULL
|
|
|
|
//Clear the chasers.
|
|
INT i
|
|
FOR i = 0 TO VEHICLE_CHASE_DEBUG_MAX_CHASERS - 1
|
|
|
|
//Release the ped.
|
|
PED_INDEX iPedIndex = rData.RunningData.aChaserPeds[i]
|
|
IF iPedIndex != NULL
|
|
SET_PED_AS_NO_LONGER_NEEDED(iPedIndex)
|
|
ENDIF
|
|
|
|
//Release the vehicle.
|
|
VEHICLE_INDEX iVehicleIndex = rData.RunningData.aChaserVehicles[i]
|
|
IF iVehicleIndex != NULL
|
|
SET_VEHICLE_AS_NO_LONGER_NEEDED(iVehicleIndex)
|
|
ENDIF
|
|
|
|
//Clear the data.
|
|
rData.RunningData.aChaserPeds[i] = NULL
|
|
rData.RunningData.aChaserVehicles[i] = NULL
|
|
|
|
ENDFOR
|
|
|
|
ENDPROC
|
|
|
|
PROC Vehicle_Chase_Debug_Stop(STRUCT_Vehicle_Chase_Debug& rData)
|
|
|
|
//Note that the test has stopped.
|
|
rData.Controller.bTestStarted = FALSE
|
|
|
|
//Restore the game state.
|
|
Vehicle_Chase_Debug_Restore_Game_State(rData)
|
|
|
|
//Clean up.
|
|
Vehicle_Chase_Debug_Clean_Up(rData)
|
|
|
|
ENDPROC
|
|
|
|
PROC Vehicle_Chase_Debug_ProcessParameterSets(STRUCT_Vehicle_Chase_Debug& rData)
|
|
|
|
//Process the chasers parameter sets.
|
|
IF rData.ChasersParameterSets.bNone
|
|
|
|
rData.ChasersParameterSets.bNone = FALSE
|
|
|
|
rData.ChasersParameters.iNumChasers = 0
|
|
|
|
ENDIF
|
|
IF rData.ChasersParameterSets.bPursue
|
|
|
|
rData.ChasersParameterSets.bPursue = FALSE
|
|
|
|
rData.ChasersParameters.iNumChasers = 1
|
|
rData.ChasersParameters.bCantBlock = TRUE
|
|
rData.ChasersParameters.bCantPursue = FALSE
|
|
rData.ChasersParameters.bCantRam = TRUE
|
|
rData.ChasersParameters.bCantSpinOut = TRUE
|
|
rData.ChasersParameters.bCantMakeAggressiveMove = TRUE
|
|
|
|
ENDIF
|
|
IF rData.ChasersParameterSets.bChase
|
|
|
|
rData.ChasersParameterSets.bChase = FALSE
|
|
|
|
rData.ChasersParameters.iNumChasers = 1
|
|
rData.ChasersParameters.bCantBlock = FALSE
|
|
rData.ChasersParameters.bCantPursue = FALSE
|
|
rData.ChasersParameters.bCantRam = FALSE
|
|
rData.ChasersParameters.bCantSpinOut = FALSE
|
|
rData.ChasersParameters.bCantMakeAggressiveMove = FALSE
|
|
|
|
ENDIF
|
|
|
|
//Process the environment parameter sets.
|
|
IF rData.EnvironmentParameterSets.bHighway
|
|
|
|
rData.EnvironmentParameterSets.bHighway = FALSE
|
|
|
|
rData.EnvironmentParameters.vStart = <<2519.77, 643.73, 106.45>>
|
|
rData.EnvironmentParameters.fStartHeading = 180.0
|
|
rData.EnvironmentParameters.vEnd = <<1392.89,-1074.37,54.31>>
|
|
|
|
ENDIF
|
|
IF rData.EnvironmentParameterSets.bCorner
|
|
|
|
rData.EnvironmentParameterSets.bCorner = FALSE
|
|
|
|
rData.EnvironmentParameters.vStart = <<-27.22, -948.10, 29.58>>
|
|
rData.EnvironmentParameters.fStartHeading = 90.0
|
|
rData.EnvironmentParameters.vEnd = <<-150.20, -798.10, 31.82>>
|
|
|
|
ENDIF
|
|
|
|
ENDPROC
|
|
|
|
PROC Maintain_Vehicle_Chase_Debug(STRUCT_Vehicle_Chase_Debug& rData)
|
|
|
|
//Process the parameter sets.
|
|
Vehicle_Chase_Debug_ProcessParameterSets(rData)
|
|
|
|
IF NOT rData.Controller.bTestStarted
|
|
|
|
IF rData.Controller.bRunTest
|
|
|
|
IF Vehicle_Chase_Debug_Stream(rData)
|
|
|
|
Vehicle_Chase_Debug_Start(rData)
|
|
|
|
ENDIF
|
|
|
|
ENDIF
|
|
|
|
ELSE
|
|
|
|
IF NOT rData.Controller.bRunTest
|
|
|
|
Vehicle_Chase_Debug_Stop(rData)
|
|
|
|
ELSE
|
|
|
|
Vehicle_Chase_Debug_Maintain(rData)
|
|
|
|
ENDIF
|
|
|
|
ENDIF
|
|
|
|
ENDPROC
|