Files
2025-09-29 00:52:08 +02:00

159 lines
5.1 KiB
Scheme
Executable File

USING "rage_builtins.sch"
USING "globals.sch"
USING "commands_debug.sch"
USING "commands_vehicle.sch"
USING "commands_streaming.sch"
USING "commands_script.sch"
USING "script_player.sch"
INT iWdCarRecPlayProg = 0
INT iWdCarRecId = 1
FLOAT fWdCarRecTime = 0.0
BOOL bWdCarRecPutPlayerInCar = TRUE
BOOL bWdCarRecStartPlayback = FALSE
BOOL bWdCarRecBlipCar = FALSE
BOOL bWdCarRecRemoveWidget = FALSE
BOOL bWdCarRecSHowPlayRoute = FALSE
TEXT_WIDGET_ID wdCarModel, wdCarRecName
WIDGET_GROUP_ID wdVehicleRecordingPlayback
VEHICLE_INDEX vehWdCarRecPlayback
BLIP_INDEX blipWdCarRecPlayback
//PARAM NOTES: Specifiy whether or not the script should get cleaned up when the widget gets deleted. Needs to be FALSE if called from a mission script.
//PURPOSE: Wdiget for playing back vehicle recordings
PROC DO_VEHICLE_REC_PLAYBACK_WIDGET(BOOL bKillThreadOnCleanup = FALSE)
MODEL_NAMES mVehicle
VECTOR vTemp
STRING sRecName
SWITCH iWdCarRecPlayProg
CASE 0
wdVehicleRecordingPlayback = START_WIDGET_GROUP("Vehicle Recording Playback")
wdCarModel = ADD_TEXT_WIDGET("Vehicle Model")
wdCarRecName = ADD_TEXT_WIDGET("Recording Filename")
ADD_WIDGET_INT_SLIDER("Recording number", iWdCarRecId, 1, 2000, 1)
ADD_WIDGET_BOOL("Start playback", bWdCarRecStartPlayback)
ADD_WIDGET_FLOAT_SLIDER("Playback time", fWdCarRecTime, 0.0, 2000000.0, 0.1)
ADD_WIDGET_BOOL("Put player in car?", bWdCarRecPutPlayerInCar)
ADD_WIDGET_BOOL("Blip playback car?", bWdCarRecBlipCar)
ADD_WIDGET_BOOL("Show playback route?", bWdCarRecSHowPlayRoute)
ADD_WIDGET_BOOL("Delete widget", bWdCarRecRemoveWidget)
STOP_WIDGET_GROUP()
SET_CONTENTS_OF_TEXT_WIDGET(wdCarModel, "POLICE")
SET_CONTENTS_OF_TEXT_WIDGET(wdCarRecName, "jetBlast")
iWdCarRecPlayProg++
BREAK
CASE 1
IF bWdCarRecStartPlayback
bWdCarRecStartPlayback = FALSE
sRecName = GET_CONTENTS_OF_TEXT_WIDGET(wdCarRecName)
IF NOT HAS_VEHICLE_RECORDING_BEEN_LOADED(iWdCarRecId, sRecName)
REQUEST_VEHICLE_RECORDING(iWdCarRecId, sRecName)
WHILE NOT HAS_VEHICLE_RECORDING_BEEN_LOADED(iWdCarRecId, sRecName)
WAIT(0)
ENDWHILE
ENDIF
//-- Place / Create the car at the beginning the of the recording
vTemp = GET_POSITION_OF_VEHICLE_RECORDING_AT_TIME(iWdCarRecId, 0, sRecName)
CLEAR_AREA(vTemp, 15.0, TRUE)
IF NOT DOES_ENTITY_EXIST(vehWdCarRecPlayback)
mVehicle = INT_TO_ENUM(MODEL_NAMES, GET_HASH_KEY(GET_CONTENTS_OF_TEXT_WIDGET(wdCarModel)))
IF IS_MODEL_IN_CDIMAGE(mVehicle)
IF NOT HAS_MODEL_LOADED(mVehicle)
REQUEST_MODEL(mVehicle)
WHILE NOT HAS_MODEL_LOADED(mVehicle)
WAIT(0)
ENDWHILE
ENDIF
LOAD_SCENE(vTemp)
vehWdCarRecPlayback = CREATE_VEHICLE(mVehicle, vTemp, 0.0)
START_PLAYBACK_RECORDED_VEHICLE(vehWdCarRecPlayback, iWdCarRecId,sRecName )
ELSE
SCRIPT_ASSERT("Vehicle recording playback: Not a valid vehicle model!")
EXIT
ENDIF
ELSE
IF NOT IS_ENTITY_DEAD(vehWdCarRecPlayback)
IF IS_PLAYBACK_GOING_ON_FOR_VEHICLE(vehWdCarRecPlayback)
STOP_PLAYBACK_RECORDED_VEHICLE(vehWdCarRecPlayback)
ENDIF
START_PLAYBACK_RECORDED_VEHICLE(vehWdCarRecPlayback, iWdCarRecId,sRecName)
ENDIF
ENDIF
//-- Puts the player in the playback car.
IF bWdCarRecPutPlayerInCar
bWdCarRecPutPlayerInCar = FALSE
IF NOT IS_ENTITY_DEAD(vehWdCarRecPlayback)
IF NOT IS_PED_INJURED(PLAYER_PED_ID())
IF NOT IS_PED_IN_VEHICLE(PLAYER_PED_ID(), vehWdCarRecPlayback)
SET_PED_INTO_VEHICLE(PLAYER_PED_ID(), vehWdCarRecPlayback)
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
IF NOT IS_ENTITY_DEAD(vehWdCarRecPlayback)
IF IS_PLAYBACK_GOING_ON_FOR_VEHICLE(vehWdCarRecPlayback)
//-- Display the current playback time
fWdCarRecTime = GET_TIME_POSITION_IN_RECORDING(vehWdCarRecPlayback)
//-- Display the route the playback takes
IF bWdCarRecSHowPlayRoute
DISPLAY_PLAYBACK_RECORDED_VEHICLE(vehWdCarRecPlayback, RDM_WHOLELINE)
ELSE
DISPLAY_PLAYBACK_RECORDED_VEHICLE(vehWdCarRecPlayback, RDM_NONE)
ENDIF
ENDIF
//--Blip the playback car
IF bWdCarRecBlipCar
bWdCarRecBlipCar = FALSE
IF NOT DOES_BLIP_EXIST(blipWdCarRecPlayback)
blipWdCarRecPlayback = ADD_BLIP_FOR_ENTITY(vehWdCarRecPlayback)
SET_BLIP_AS_FRIENDLY(blipWdCarRecPlayback, TRUE)
ENDIF
ENDIF
ENDIF
IF bWdCarRecRemoveWidget
//-- Remove the widget and kill the script
bWdCarRecRemoveWidget = FALSE
IF NOT IS_ENTITY_DEAD(vehWdCarRecPlayback)
IF IS_PLAYBACK_GOING_ON_FOR_VEHICLE(vehWdCarRecPlayback)
STOP_PLAYBACK_RECORDED_VEHICLE(vehWdCarRecPlayback)
ENDIF
ENDIF
IF DOES_BLIP_EXIST(blipWdCarRecPlayback)
REMOVE_BLIP(blipWdCarRecPlayback)
ENDIF
DELETE_WIDGET_GROUP(wdVehicleRecordingPlayback)
IF bKillThreadOnCleanup
TERMINATE_THIS_THREAD()
ENDIF
ENDIF
BREAK
ENDSWITCH
ENDPROC