701 lines
22 KiB
XML
Executable File
701 lines
22 KiB
XML
Executable File
USING "rage_builtins.sch"
|
|
USING "globals.sch"
|
|
|
|
USING "commands_camera.sch"
|
|
using "commands_misc.sch"
|
|
USING "script_maths.sch"
|
|
USING "Script_player.sch"
|
|
USING "Overlay_Effects.sch"
|
|
|
|
USING "usefulCommands.sch"
|
|
USING "script_buttons.sch"
|
|
//using "commands_path.sch"
|
|
|
|
CONST_INT MAX_CAM_PANS 10
|
|
|
|
|
|
|
|
struct structCamData
|
|
vector vPosa,vposb
|
|
vector vRota,vRotb
|
|
int iPanTime, iPauseTime
|
|
bool bDelete, bStorePosa, bstoreposb, bPlayPan, bMoveUp, bMoveDown, bHoldLastFrame
|
|
int graphTypeA,graphTypeB
|
|
WIDGET_GROUP_ID widget
|
|
int startTime, endTime, shakeStyle
|
|
float amplitude
|
|
vehicle_index linkedVehicle = NULL
|
|
int specialCase //attaching to vehicles etc
|
|
bool persistCam
|
|
ENDSTRUCT
|
|
|
|
structCamData camPans[MAX_CAM_PANS]
|
|
#IF IS_DEBUG_BUILD
|
|
structCamData tempcampan
|
|
#ENDIF
|
|
|
|
#IF IS_DEBUG_BUILD
|
|
USING "script_debug.sch"
|
|
#ENDIF
|
|
|
|
int iCamPanCount = 1
|
|
int iPanPlaying
|
|
int iEndPanTime
|
|
bool bPlayCutscene
|
|
bool bTriggerNextPan
|
|
bool bFullCutPlaying
|
|
bool bDisableScriptTrigger
|
|
bool bPreventScriptAddPans
|
|
int iCuttime,iCutStartTime
|
|
|
|
#IF IS_DEBUG_BUILD
|
|
|
|
bool bPause, bResetCutscene
|
|
#ENDIF
|
|
|
|
|
|
CAMERA_INDEX cutscene_cam //cama,camb
|
|
bool bCamsMade
|
|
|
|
vector vcamNull = <<0,0,0>>
|
|
|
|
proc emptyPanData(int i)
|
|
camPans[i].vPosa = <<0,0,0>>
|
|
camPans[i].vRota = <<0,0,0>>
|
|
camPans[i].vPosb = <<0,0,0>>
|
|
camPans[i].vRotb = <<0,0,0>>
|
|
camPans[i].iPanTime = 0
|
|
camPans[i].iPauseTime = 0
|
|
camPans[i].bDelete = FALSE
|
|
camPans[i].bPlayPan = FALSE
|
|
camPans[i].bMoveUp = FALSE
|
|
camPans[i].bMoveDown = FALSE
|
|
camPans[i].bHoldLastFrame = FALSE
|
|
camPans[i].graphTypeA = 0
|
|
camPans[i].graphTypeB = 0
|
|
ENDPROC
|
|
|
|
#IF IS_DEBUG_BUILD
|
|
|
|
|
|
|
|
bool bWidgetMade
|
|
int iExistingCamPans
|
|
bool bExport
|
|
|
|
WIDGET_GROUP_ID wTemp,debugWidget
|
|
|
|
|
|
|
|
proc cutscene_widget(WIDGET_GROUP_ID parent = null)
|
|
int i
|
|
bool bPanDeleted = false
|
|
|
|
if bWidgetMade = FALSE
|
|
bWidgetMade = true
|
|
iExistingCamPans = iCamPanCount
|
|
|
|
if parent != NULL
|
|
SET_CURRENT_WIDGET_GROUP(parent)
|
|
|
|
|
|
if not DOES_WIDGET_GROUP_EXIST(debugWidget)
|
|
debugWidget = START_WIDGET_GROUP("CUTSCENE DIRECTOR")
|
|
ADD_WIDGET_BOOL("Play all pans",bPlayCutscene)
|
|
ADD_WIDGET_BOOL("Keep debug cam view",bDisableScriptTrigger)
|
|
ADD_WIDGET_BOOL("Prevent ADD_CAM_PAN",bPreventScriptAddPans)
|
|
ADD_WIDGET_INT_SLIDER("No of cam pans",iCamPanCount,0,MAX_CAM_PANS-1,1)
|
|
ADD_WIDGET_INT_READ_ONLY("Cutscene Time",iCutTime)
|
|
ADD_WIDGET_BOOL("Export Cams",bExport)
|
|
ADD_WIDGET_BOOL("Pause",bPause)
|
|
ADD_WIDGET_BOOL("Restart Cut",bResetCutscene)
|
|
STOP_WIDGET_GROUP()
|
|
ENDIF
|
|
|
|
CLEAR_CURRENT_WIDGET_GROUP(parent)
|
|
|
|
SET_CURRENT_WIDGET_GROUP(debugWidget)
|
|
|
|
TEXT_LABEL_7 panWidgetName
|
|
|
|
for i = 0 to MAX_CAM_PANS-1
|
|
if not DOES_WIDGET_GROUP_EXIST(camPans[i].widget)
|
|
if i < iCamPanCount
|
|
panWidgetName = "Pan: "
|
|
panWidgetName += i
|
|
camPans[i].widget = START_WIDGET_GROUP(panWidgetName)
|
|
|
|
|
|
|
|
START_WIDGET_GROUP("Start Cam")
|
|
ADD_WIDGET_VECTOR_SLIDER("Start cam pos",camPans[i].vPosa,-10000,10000,0.1)
|
|
ADD_WIDGET_VECTOR_SLIDER("Start cam rot",camPans[i].vRota,-360,360,0.1)
|
|
ADD_WIDGET_BOOL("Set cam from debug viewport",camPans[i].bStorePosa)
|
|
START_NEW_WIDGET_COMBO()
|
|
ADD_TO_WIDGET_COMBO("GRAPH_TYPE_LINEAR")
|
|
ADD_TO_WIDGET_COMBO("GRAPH_TYPE_SIN_ACCEL_DECEL")
|
|
ADD_TO_WIDGET_COMBO("GRAPH_TYPE_ACCEL")
|
|
ADD_TO_WIDGET_COMBO("GRAPH_TYPE_DECEL")
|
|
STOP_WIDGET_COMBO("Cam Graph Type",camPans[i].graphTypeA)
|
|
STOP_WIDGET_GROUP()
|
|
START_WIDGET_GROUP("End Cam")
|
|
ADD_WIDGET_VECTOR_SLIDER("end cam pos",camPans[i].vPosb,-10000,10000,0.1)
|
|
ADD_WIDGET_VECTOR_SLIDER("end cam rot",camPans[i].vRotb,-360,360,0.1)
|
|
ADD_WIDGET_BOOL("Set cam from debug viewport",camPans[i].bStorePosb)
|
|
START_NEW_WIDGET_COMBO()
|
|
ADD_TO_WIDGET_COMBO("GRAPH_TYPE_LINEAR")
|
|
ADD_TO_WIDGET_COMBO("GRAPH_TYPE_SIN_ACCEL_DECEL")
|
|
ADD_TO_WIDGET_COMBO("GRAPH_TYPE_ACCEL")
|
|
ADD_TO_WIDGET_COMBO("GRAPH_TYPE_DECEL")
|
|
STOP_WIDGET_COMBO("Cam Graph Type",camPans[i].graphTypeB)
|
|
STOP_WIDGET_GROUP()
|
|
|
|
START_NEW_WIDGET_COMBO()
|
|
ADD_TO_WIDGET_COMBO("None")
|
|
ADD_TO_WIDGET_COMBO("Hand Shake")
|
|
ADD_TO_WIDGET_COMBO("Road Vibration Shake")
|
|
ADD_TO_WIDGET_COMBO("Medium Explosion Shake")
|
|
ADD_TO_WIDGET_COMBO("Vibrate Shake")
|
|
STOP_WIDGET_COMBO("Shake type",camPans[i].shakeStyle)
|
|
ADD_WIDGET_FLOAT_SLIDER("Shake Amplitude",camPans[i].amplitude,0,10.0,0.01)
|
|
|
|
|
|
ADD_WIDGET_INT_READ_ONLY("Start at",camPans[i].startTime)
|
|
ADD_WIDGET_INT_SLIDER("Cam pan duration",camPans[i].iPanTime,0,60000,1)
|
|
ADD_WIDGET_INT_SLIDER("Pause at end duration",camPans[i].iPauseTime,0,60000,1)
|
|
ADD_WIDGET_INT_READ_ONLY("end at",camPans[i].endTime)
|
|
|
|
ADD_WIDGET_BOOL("Persist from last pan",camPans[i].persistCam)
|
|
ADD_WIDGET_BOOL("Play this pan",camPans[i].bPlayPan)
|
|
ADD_WIDGET_BOOL("Hold last position",camPans[i].bHoldLastFrame)
|
|
ADD_WIDGET_BOOL("Delete pan",camPans[i].bDelete)
|
|
ADD_WIDGET_BOOL("Shift pan up",camPans[i].bMoveUp)
|
|
ADD_WIDGET_BOOL("Shift pan down",camPans[i].bMoveDown)
|
|
|
|
|
|
|
|
STOP_WIDGET_GROUP()
|
|
ENDIF
|
|
ELSE
|
|
if i >= iCamPanCount
|
|
DELETE_WIDGET_GROUP(camPans[i].widget)
|
|
emptyPanData(i)
|
|
ENDIF
|
|
ENDIF
|
|
ENDFOR
|
|
|
|
|
|
CLEAR_CURRENT_WIDGET_GROUP(debugWidget)
|
|
|
|
|
|
|
|
ENDIF
|
|
ELSE
|
|
if parent != NULL
|
|
if iExistingCamPans != iCamPanCount
|
|
bWidgetMade = FALSE
|
|
ENDIF
|
|
|
|
for i = 0 to MAX_CAM_PANS-1
|
|
if camPans[i].bDelete = TRUE
|
|
camPans[i].bDelete = FALSE
|
|
bPanDeleted = true
|
|
ENDIF
|
|
if bPanDeleted = true
|
|
if DOES_WIDGET_GROUP_EXIST(camPans[i].widget)
|
|
DELETE_WIDGET_GROUP(camPans[i].widget)
|
|
ENDIF
|
|
if i < MAX_CAM_PANS-1
|
|
wTemp = camPans[i].widget
|
|
camPans[i] = camPans[i+1]
|
|
camPans[i].widget = wTemp
|
|
ELSE
|
|
emptyPanData(i)
|
|
ENDIF
|
|
ENDIF
|
|
|
|
if camPans[i].bStorePosa = TRUE
|
|
camPans[i].bStorePosa = FALSE
|
|
CAMERA_INDEX renderingCam = GET_RENDERING_CAM()
|
|
if DOES_CAM_EXIST(renderingCam)
|
|
camPans[i].vPosa = GET_CAM_COORD(renderingCam)
|
|
camPans[i].vRota = GET_CAM_ROT(renderingCam)
|
|
ENDIF
|
|
ENDIF
|
|
|
|
if camPans[i].bStorePosb = TRUE
|
|
camPans[i].bStorePosb = FALSE
|
|
CAMERA_INDEX renderingCam = GET_RENDERING_CAM()
|
|
if DOES_CAM_EXIST(renderingCam)
|
|
camPans[i].vPosb = GET_CAM_COORD(renderingCam)
|
|
camPans[i].vRotb = GET_CAM_ROT(renderingCam)
|
|
ENDIF
|
|
ENDIF
|
|
|
|
if camPans[i].bMoveUp = TRUE
|
|
camPans[i].bMoveUp = FALSE
|
|
if i != 0
|
|
tempcampan = camPans[i-1]
|
|
WIDGET_GROUP_ID wtemp1 = camPans[i-1].widget
|
|
WIDGET_GROUP_ID wtemp2 = camPans[i].widget
|
|
camPans[i-1] = camPans[i]
|
|
camPans[i] = tempcampan
|
|
camPans[i].widget = wtemp2
|
|
camPans[i-1].widget = wtemp1
|
|
ENDIF
|
|
ENDIF
|
|
|
|
if camPans[i].bMoveDown = TRUE
|
|
camPans[i].bMoveDown = FALSE
|
|
if i != iCamPanCount-1
|
|
tempcampan = camPans[i+1]
|
|
WIDGET_GROUP_ID wtemp1 = camPans[i+1].widget
|
|
WIDGET_GROUP_ID wtemp2 = camPans[i].widget
|
|
camPans[i+1] = camPans[i]
|
|
camPans[i] = tempcampan
|
|
camPans[i].widget = wtemp2
|
|
camPans[i+1].widget = wtemp1
|
|
ENDIF
|
|
ENDIF
|
|
|
|
if i = 0
|
|
camPans[i].startTime = 0
|
|
ELSE
|
|
camPans[i].startTime = camPans[i-1].endtime
|
|
ENDIF
|
|
|
|
camPans[i].endTime = camPans[i].startTime + camPans[i].iPanTime + camPans[i].iPauseTime
|
|
|
|
|
|
if camPans[i].bPlayPan = TRUE
|
|
iPanPlaying = i
|
|
|
|
ENDIF
|
|
|
|
|
|
|
|
endfor
|
|
if bPanDeleted = true
|
|
iCamPanCount--
|
|
bWidgetMade = FALSE
|
|
ENDIF
|
|
if bExport = TRUE
|
|
bExport = FALSE
|
|
|
|
STRING sFilePath = "C:/temp/cams"
|
|
STRING sFileName = "cams.txt"
|
|
|
|
OPEN_NAMED_DEBUG_FILE(sFilePath,sFileName)
|
|
|
|
for i = 0 to iCamPanCount-1
|
|
|
|
|
|
SAVE_STRING_TO_NAMED_DEBUG_FILE("ADD_CAM_PAN(",sFilePath,sFileName)
|
|
SAVE_INT_TO_NAMED_DEBUG_FILE(i,sFilePath,sFileName)
|
|
SAVE_STRING_TO_NAMED_DEBUG_FILE(",<<",sFilePath,sFileName)
|
|
|
|
SAVE_FLOAT_TO_NAMED_DEBUG_FILE(camPans[i].vPosa.x,sFilePath,sFileName)
|
|
SAVE_STRING_TO_NAMED_DEBUG_FILE(",",sFilePath,sFileName)
|
|
SAVE_FLOAT_TO_NAMED_DEBUG_FILE(camPans[i].vPosa.y,sFilePath,sFileName)
|
|
SAVE_STRING_TO_NAMED_DEBUG_FILE(",",sFilePath,sFileName)
|
|
SAVE_FLOAT_TO_NAMED_DEBUG_FILE(camPans[i].vPosa.z,sFilePath,sFileName)
|
|
|
|
//SAVE_VECTOR_TO_NAMED_DEBUG_FILE(camPans[i].vPosa,sFilePath,sFileName)
|
|
SAVE_STRING_TO_NAMED_DEBUG_FILE(">>,<<",sFilePath,sFileName)
|
|
|
|
|
|
SAVE_FLOAT_TO_NAMED_DEBUG_FILE(camPans[i].vPosb.x,sFilePath,sFileName)
|
|
SAVE_STRING_TO_NAMED_DEBUG_FILE(",",sFilePath,sFileName)
|
|
SAVE_FLOAT_TO_NAMED_DEBUG_FILE(camPans[i].vPosb.y,sFilePath,sFileName)
|
|
SAVE_STRING_TO_NAMED_DEBUG_FILE(",",sFilePath,sFileName)
|
|
SAVE_FLOAT_TO_NAMED_DEBUG_FILE(camPans[i].vPosb.z,sFilePath,sFileName)
|
|
|
|
//SAVE_VECTOR_TO_NAMED_DEBUG_FILE(camPans[i].vPosb,sFilePath,sFileName)
|
|
SAVE_STRING_TO_NAMED_DEBUG_FILE(">>,<<",sFilePath,sFileName)
|
|
|
|
SAVE_FLOAT_TO_NAMED_DEBUG_FILE(camPans[i].vRota.x,sFilePath,sFileName)
|
|
SAVE_STRING_TO_NAMED_DEBUG_FILE(",",sFilePath,sFileName)
|
|
SAVE_FLOAT_TO_NAMED_DEBUG_FILE(camPans[i].vRota.y,sFilePath,sFileName)
|
|
SAVE_STRING_TO_NAMED_DEBUG_FILE(",",sFilePath,sFileName)
|
|
SAVE_FLOAT_TO_NAMED_DEBUG_FILE(camPans[i].vRota.z,sFilePath,sFileName)
|
|
|
|
//SAVE_VECTOR_TO_NAMED_DEBUG_FILE(camPans[i].vRota,sFilePath,sFileName)
|
|
SAVE_STRING_TO_NAMED_DEBUG_FILE(">>,<<",sFilePath,sFileName)
|
|
|
|
SAVE_FLOAT_TO_NAMED_DEBUG_FILE(camPans[i].vRotb.x,sFilePath,sFileName)
|
|
SAVE_STRING_TO_NAMED_DEBUG_FILE(",",sFilePath,sFileName)
|
|
SAVE_FLOAT_TO_NAMED_DEBUG_FILE(camPans[i].vRotb.y,sFilePath,sFileName)
|
|
SAVE_STRING_TO_NAMED_DEBUG_FILE(",",sFilePath,sFileName)
|
|
SAVE_FLOAT_TO_NAMED_DEBUG_FILE(camPans[i].vRotb.z,sFilePath,sFileName)
|
|
|
|
//SAVE_VECTOR_TO_NAMED_DEBUG_FILE(camPans[i].vRotb,sFilePath,sFileName)
|
|
SAVE_STRING_TO_NAMED_DEBUG_FILE(">>,",sFilePath,sFileName)
|
|
SAVE_INT_TO_NAMED_DEBUG_FILE(camPans[i].iPanTime,sFilePath,sFileName)
|
|
SAVE_STRING_TO_NAMED_DEBUG_FILE(",",sFilePath,sFileName)
|
|
SAVE_INT_TO_NAMED_DEBUG_FILE(camPans[i].iPauseTime,sFilePath,sFileName)
|
|
SAVE_STRING_TO_NAMED_DEBUG_FILE(",",sFilePath,sFileName)
|
|
SAVE_INT_TO_NAMED_DEBUG_FILE(camPans[i].graphTypeA,sFilePath,sFileName)
|
|
SAVE_STRING_TO_NAMED_DEBUG_FILE(",",sFilePath,sFileName)
|
|
SAVE_INT_TO_NAMED_DEBUG_FILE(camPans[i].graphTypeB,sFilePath,sFileName)
|
|
SAVE_STRING_TO_NAMED_DEBUG_FILE(",",sFilePath,sFileName)
|
|
SAVE_INT_TO_NAMED_DEBUG_FILE(camPans[i].shakeStyle,sFilePath,sFileName)
|
|
SAVE_STRING_TO_NAMED_DEBUG_FILE(",",sFilePath,sFileName)
|
|
SAVE_FLOAT_TO_NAMED_DEBUG_FILE(camPans[i].amplitude,sFilePath,sFileName)
|
|
|
|
IF camPans[i].persistCam = TRUE
|
|
SAVE_STRING_TO_NAMED_DEBUG_FILE(",TRUE",sFilePath,sFileName)
|
|
ELSE
|
|
SAVE_STRING_TO_NAMED_DEBUG_FILE(",FALSE",sFilePath,sFileName)
|
|
ENDIF
|
|
SAVE_STRING_TO_NAMED_DEBUG_FILE(")",sFilePath,sFileName)
|
|
SAVE_NEWLINE_TO_NAMED_DEBUG_FILE(sFilePath,sFileName)
|
|
|
|
/*
|
|
SAVE_STRING_TO_DEBUG_FILE("ADD_CAM_PAN(")
|
|
SAVE_INT_TO_DEBUG_FILE(i)
|
|
SAVE_STRING_TO_DEBUG_FILE(",")
|
|
SAVE_VECTOR_TO_DEBUG_FILE(camPans[i].vPosa)
|
|
SAVE_STRING_TO_DEBUG_FILE(",")
|
|
SAVE_VECTOR_TO_DEBUG_FILE(camPans[i].vPosb)
|
|
SAVE_STRING_TO_DEBUG_FILE(",")
|
|
SAVE_VECTOR_TO_DEBUG_FILE(camPans[i].vRota)
|
|
SAVE_STRING_TO_DEBUG_FILE(",")
|
|
SAVE_VECTOR_TO_DEBUG_FILE(camPans[i].vRotb)
|
|
SAVE_STRING_TO_DEBUG_FILE(",")
|
|
SAVE_INT_TO_DEBUG_FILE(camPans[i].iPanTime)
|
|
SAVE_STRING_TO_DEBUG_FILE(",")
|
|
SAVE_INT_TO_DEBUG_FILE(camPans[i].iPauseTime)
|
|
SAVE_STRING_TO_DEBUG_FILE(",")
|
|
SAVE_INT_TO_DEBUG_FILE(camPans[i].graphTypeA)
|
|
SAVE_STRING_TO_DEBUG_FILE(",")
|
|
SAVE_INT_TO_DEBUG_FILE(camPans[i].graphTypeB)
|
|
SAVE_STRING_TO_DEBUG_FILE(")")
|
|
SAVE_NEWLINE_TO_DEBUG_FILE()
|
|
*/
|
|
ENDFOR
|
|
CLOSE_DEBUG_FILE()
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ENDPROC
|
|
#ENDIF
|
|
|
|
proc ADD_CAM_PAN(int a, vector posStart, vector posEnd, vector rotStart, vector rotEnd, int panTime, int pauseAtEnd, int graphTypeStart, int graphTypeEnd, int shakeStyle=0, float shakeAmplitude=0.0, bool bPersistsFromPreviousCam=FALSE)
|
|
if bPreventScriptAddPans = FALSE
|
|
int i
|
|
If a = 0
|
|
for i = 0 to MAX_CAM_PANS-1
|
|
emptyPanData(i)
|
|
endfor
|
|
iCamPanCount = 0
|
|
ENDIF
|
|
camPans[a].vPosa = posStart
|
|
camPans[a].vPosb = posEnd
|
|
camPans[a].vRota = rotStart
|
|
camPans[a].vRotb = rotEnd
|
|
camPans[a].iPanTime = panTime
|
|
camPans[a].iPauseTime = pauseAtEnd
|
|
camPans[a].graphTypeA = graphTypeStart
|
|
camPans[a].graphTypeB = graphTypeEnd
|
|
camPans[a].shakeStyle = shakeStyle
|
|
camPans[a].amplitude = shakeAmplitude
|
|
camPans[a].persistCam = bPersistsFromPreviousCam
|
|
if a >= iCamPanCount
|
|
iCamPanCount = a+1
|
|
ENDIF
|
|
ENDIF
|
|
ENDPROC
|
|
|
|
PROC SET_CAM_PAN_TARGET_VEHICLE(int camPan, VEHICLE_INDEX VEH, vector vOffset)
|
|
camPans[camPan].linkedVehicle = VEH
|
|
camPans[camPan].vRota = vOffset
|
|
camPans[camPan].specialCase = 1
|
|
ENDPROC
|
|
|
|
proc SET_CAM_PAN_ATTACH_VEHICLE(int camPan, VEHICLE_INDEX VEH, vector vOffset)
|
|
camPans[camPan].linkedVehicle = VEH
|
|
camPans[camPan].vPosa = vOffset
|
|
camPans[camPan].specialCase = 2
|
|
ENDPROC
|
|
|
|
proc END_CUTSCENE(bool endWithInterp = true, int iInterpTime=1000)
|
|
IF IS_PLAYER_PLAYING(PLAYER_ID())
|
|
IF DOES_CAM_EXIST(cutscene_cam)
|
|
if IS_CAM_ACTIVE(cutscene_cam)
|
|
if endWithInterp = true
|
|
RENDER_SCRIPT_CAMS(FALSE,TRUE,iInterpTime)
|
|
ELSE
|
|
RENDER_SCRIPT_CAMS(FALSE,FALSE)
|
|
ENDIF
|
|
SET_CAM_ACTIVE(cutscene_cam,FALSE)
|
|
|
|
camPans[iPanPlaying].bPlayPan = FALSE
|
|
|
|
bPlayCutscene = FALSE
|
|
DISPLAY_RADAR(TRUE)
|
|
DISPLAY_HUD(TRUE)
|
|
SET_PLAYER_CONTROL(PLAYER_ID(),TRUE)
|
|
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ENDPROC
|
|
|
|
proc controlCameras()
|
|
|
|
iCuttime=iCuttime
|
|
if bCamsMade = FALSE
|
|
cutscene_cam = CREATE_CAM("DEFAULT_SCRIPTED_CAMERA", FALSE)
|
|
debugMessage(debug_cameras,"controlCameras():created script cam for first time")
|
|
//CLEAR_PRINTS()
|
|
//camb = CREATE_CAM("DEFAULT_SCRIPTED_CAMERA", TRUE)
|
|
bCamsMade = true
|
|
|
|
|
|
ELSE
|
|
|
|
if bPlayCutscene = TRUE
|
|
if bFullCutPlaying = FALSE
|
|
debugMessage(debug_cameras,"controlCameras():trigger cut playing for first time")
|
|
iPanPlaying = 0
|
|
bFullCutPlaying = true
|
|
camPans[iPanPlaying].bPlayPan = TRUE
|
|
|
|
iCutStartTime = GET_GAME_TIMER()
|
|
|
|
ELSE
|
|
|
|
iCuttime = GET_GAME_TIMER() - iCutStartTime
|
|
|
|
ENDIF
|
|
ELSE
|
|
if bFullCutPlaying = TRUE
|
|
//end cutscene
|
|
camPans[iPanPlaying].bPlayPan = FALSE
|
|
bTriggerNextPan = FALSE
|
|
bFullCutPlaying = FALSE
|
|
bPlayCutscene = FALSE
|
|
ENDIF
|
|
ENDIF
|
|
//added this if endif
|
|
if bFullCutPlaying = TRUE
|
|
HIDE_HUD_AND_RADAR_THIS_FRAME()
|
|
if bTriggerNextPan = true
|
|
camPans[iPanPlaying].bPlayPan = FALSE
|
|
iPanPlaying++
|
|
if iPanPlaying < iCamPanCount
|
|
camPans[iPanPlaying].bPlayPan = true
|
|
debugMessage(debug_cameras,"controlCameras():iPanPlaying < iCamPanCount")
|
|
STOP_CAM_POINTING(cutscene_cam)
|
|
DETACH_CAM(cutscene_cam)
|
|
IF camPans[iPanPlaying].persistCam = FALSE
|
|
DESTROY_CAM(cutscene_cam)
|
|
cutscene_cam = CREATE_CAM("DEFAULT_SCRIPTED_CAMERA", FALSE)
|
|
ENDIF
|
|
debugMessage(debug_cameras,"controlCameras():iPanPlaying < iCamPanCount:create cam")
|
|
ELSE
|
|
bTriggerNextPan = FALSE
|
|
bFullCutPlaying = FALSE
|
|
bPlayCutscene = FALSE
|
|
ENDIF
|
|
ENDIF
|
|
|
|
if camPans[iPanPlaying].bPlayPan = TRUE
|
|
debugMessage(debug_cameras,"controlCameras():play pan")
|
|
if not IS_CAM_ACTIVE(cutscene_cam) or bTriggerNextPan = true
|
|
debugMessage(debug_cameras,"controlCameras():trigger next pan")
|
|
bTriggerNextPan = FALSE
|
|
if IS_CAM_RENDERING(GET_DEBUG_CAM())
|
|
if bDisableScriptTrigger = FALSE
|
|
SET_DEBUG_CAM_ACTIVE(FALSE)
|
|
ENDIF
|
|
ENDIF
|
|
if bDisableScriptTrigger = FALSE
|
|
|
|
|
|
if camPans[iPanPlaying].specialCase = 1 //point at vehicle
|
|
if not IS_ENTITY_DEAD(camPans[iPanPlaying].linkedVehicle)
|
|
// SET_CAM_COORD(cutscene_cam,camPans[iPanPlaying].vPosa)
|
|
//SET_CAM_PARAMS(cutscene_cam,camPans[iPanPlaying].vPosa, vcamNull, 45.0)
|
|
//POINT_CAM_AT_ENTITY(cutscene_cam,camPans[iPanPlaying].linkedVehicle,<<0,0,0>>)//camPans[iPanPlaying].vRota)
|
|
|
|
//SET_CAM_PARAMS(cutscene_cam,camPans[iPanPlaying].vPosb, vcamNull, 45.0,camPans[iPanPlaying].iPanTime,INT_TO_ENUM(CAMERA_GRAPH_TYPE,camPans[iPanPlaying].graphTypeA),INT_TO_ENUM(CAMERA_GRAPH_TYPE,camPans[iPanPlaying].graphTypeB))
|
|
debugMessage(debug_cameras,"controlCameras():point at vehicle")
|
|
DESTROY_CAM(cutscene_cam)
|
|
cutscene_cam = CREATE_CAM ("DEFAULT_SPLINE_CAMERA")
|
|
|
|
ADD_CAM_SPLINE_NODE(cutscene_cam,camPans[iPanPlaying].vPosa,vcamNull,0)
|
|
ADD_CAM_SPLINE_NODE(cutscene_cam,camPans[iPanPlaying].vPosb,vcamNull,camPans[iPanPlaying].iPanTime)
|
|
POINT_CAM_AT_ENTITY(cutscene_cam,camPans[iPanPlaying].linkedVehicle,camPans[iPanPlaying].vRota)
|
|
SET_CAM_FOV(cutscene_cam,45.0)
|
|
debugMessage(debug_cameras,"controlCameras():set cam active pointing at vehicle")
|
|
SET_CAM_ACTIVE(cutscene_cam,TRUE)
|
|
//SET_CAM_ACTIVE(cutscene_cam,TRUE)
|
|
ELSE
|
|
debugMessage(debug_cameras,"controlCameras():point at vehicle is dead")
|
|
ENDIF
|
|
ELSE
|
|
if camPans[iPanPlaying].specialCase = 2 // attach to vehicle
|
|
if not IS_ENTITY_DEAD(camPans[iPanPlaying].linkedVehicle)
|
|
//DESTROY_CAM(cutscene_cam)
|
|
//cutscene_cam = CREATE_CAM ("DEFAULT_SPLINE_CAMERA")
|
|
//ADD_CAM_SPLINE_NODE(cutscene_cam,camPans[iPanPlaying].vPosa,vcamNull,0)
|
|
//ADD_CAM_SPLINE_NODE(cutscene_cam,camPans[iPanPlaying].vPosb,vcamNull,camPans[iPanPlaying].iPanTime)
|
|
ATTACH_CAM_TO_ENTITY(cutscene_cam,camPans[iPanPlaying].linkedVehicle,camPans[iPanPlaying].vPosa)
|
|
SET_CAM_FOV(cutscene_cam,45.0)
|
|
debugMessage(debug_cameras,"controlCameras():set cam active attached to vehicle")
|
|
SET_CAM_ACTIVE(cutscene_cam,TRUE)
|
|
ENDIF
|
|
ELSE
|
|
IF camPans[iPanPlaying].persistCam = FALSE
|
|
SET_CAM_PARAMS(cutscene_cam,camPans[iPanPlaying].vPosa, camPans[iPanPlaying].vRota, 45.0)
|
|
SET_CAM_FOV(cutscene_cam,45.0)
|
|
debugMessage(debug_cameras,"controlCameras():set cam active")
|
|
SET_CAM_ACTIVE(cutscene_cam,TRUE)
|
|
ENDIF
|
|
SET_CAM_PARAMS(cutscene_cam,camPans[iPanPlaying].vPosb, camPans[iPanPlaying].vRotb, 45.0,camPans[iPanPlaying].iPanTime,INT_TO_ENUM(CAMERA_GRAPH_TYPE,camPans[iPanPlaying].graphTypeA),INT_TO_ENUM(CAMERA_GRAPH_TYPE,camPans[iPanPlaying].graphTypeB))
|
|
ENDIF
|
|
ENDIF
|
|
if camPans[iPanPlaying].shakeStyle != 0
|
|
switch camPans[iPanPlaying].shakeStyle
|
|
case 1
|
|
SHAKE_CAM(cutscene_cam,"HAND_SHAKE",camPans[iPanPlaying].amplitude)
|
|
BREAK
|
|
case 2
|
|
SHAKE_CAM(cutscene_cam,"ROAD_VIBRATION_SHAKE",camPans[iPanPlaying].amplitude)
|
|
BREAK
|
|
case 3
|
|
SHAKE_CAM(cutscene_cam,"MEDIUM_EXPLOSION_SHAKE",camPans[iPanPlaying].amplitude)
|
|
BREAK
|
|
case 4
|
|
SHAKE_CAM(cutscene_cam,"VIBRATE_SHAKE",camPans[iPanPlaying].amplitude)
|
|
BREAK
|
|
ENDSWITCH
|
|
ELSE
|
|
//shake
|
|
// SHAKE_CAM(cutscene_cam,0)
|
|
ENDIF
|
|
|
|
IF IS_CAM_ACTIVE(cutscene_cam)
|
|
RENDER_SCRIPT_CAMS(TRUE,FALSE)
|
|
debugMessage(debug_cameras,"controlCameras():render script cam")
|
|
ELSE
|
|
debugMessage(debug_cameras,"controlCameras():script cam not active")
|
|
ENDIF
|
|
ENDIF
|
|
iEndPanTime = camPans[iPanPlaying].iPanTime + camPans[iPanPlaying].iPauseTime + GET_GAME_TIMER()
|
|
ENDIF
|
|
|
|
if not IS_CAM_INTERPOLATING(cutscene_cam)
|
|
if (camPans[iPanPlaying].bHoldLastFrame = FALSE and GET_GAME_TIMER() > iEndPanTime)// or (camPans[iPanPlaying].bHoldLastFrame = true and GET_GAME_TIMER() > iEndPanTime)
|
|
if bFullCutPlaying = FALSE
|
|
//RENDER_SCRIPT_CAMS(FALSE,FALSE)
|
|
//SET_CAM_ACTIVE(cutscene_cam,FALSE)
|
|
//camPans[iPanPlaying].bPlayPan = FALSE
|
|
END_CUTSCENE(FALSE)
|
|
ELSE
|
|
bTriggerNextPan = true
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
|
|
ELSE
|
|
if IS_CAM_ACTIVE(cutscene_cam)
|
|
END_CUTSCENE(FALSE)
|
|
//RENDER_SCRIPT_CAMS(FALSE,FALSE)
|
|
//SET_CAM_ACTIVE(cutscene_cam,FALSE)
|
|
//camPans[iPanPlaying].bPlayPan = FALSE
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ENDPROC
|
|
|
|
|
|
|
|
FUNC BOOL PLAY_CAM_PANS()
|
|
IF IS_PLAYER_PLAYING(PLAYER_ID())
|
|
//debugMessage(debug_cameras,"run func: play_cam_pans()")
|
|
CLEAR_HELP()
|
|
CLEAR_PRINTS()
|
|
SET_PLAYER_CONTROL(PLAYER_ID(),FALSE)
|
|
bPlayCutscene = true
|
|
DISPLAY_RADAR(FALSE)
|
|
DISPLAY_HUD(FALSE)
|
|
return true
|
|
ENDIF
|
|
return FALSE
|
|
ENDFUNC
|
|
|
|
func bool ARE_CAM_PANS_PLAYING()
|
|
if bPlayCutscene = true
|
|
return TRUE
|
|
ENDIF
|
|
return FALSE
|
|
ENDFUNC
|
|
|
|
proc RESET_CAM_PANS()
|
|
|
|
//iCamPanCount = 1
|
|
camPans[iPanPlaying].bPlayPan = FALSE
|
|
bTriggerNextPan = FALSE
|
|
bFullCutPlaying = FALSE
|
|
bPlayCutscene = FALSE
|
|
//iCamPanCount = 0
|
|
iPanPlaying = 0
|
|
SET_CAM_ACTIVE(cutscene_cam,FALSE)
|
|
STOP_CAM_POINTING(cutscene_cam)
|
|
DETACH_CAM(cutscene_cam)
|
|
ENDPROC
|
|
|
|
|
|
|
|
#IF IS_DEBUG_BUILD
|
|
func bool RESET_CUTSCENE_CALLED()
|
|
if bResetCutscene = TRUE
|
|
bResetCutscene = FALSE
|
|
bExport = true
|
|
RESET_CAM_PANS()
|
|
return true
|
|
ENDIF
|
|
return FALSE
|
|
ENDFUNC
|
|
|
|
proc cleanup_cam_pans()
|
|
if DOES_WIDGET_GROUP_EXIST(debugWidget)
|
|
DELETE_WIDGET_GROUP(debugWidget)
|
|
ENDIF
|
|
ENDPROC
|
|
|
|
|
|
#ENDIF
|
|
|
|
func bool HAS_CUTSCENE_BEEN_SKIPPED()
|
|
debugMessage(DEBUG_CAMERAS,"HAS_CUTSCENE_BEEN_SKIPPED(): START")
|
|
if IS_CUTSCENE_SKIP_BUTTON_JUST_PRESSED() and ARE_CAM_PANS_PLAYING()
|
|
debugMessage(DEBUG_CAMERAS,"if IS_CUTSCENE_SKIP_BUTTON_JUST_PRESSED() and ARE_CAM_PANS_PLAYING() TRUE")
|
|
if iCuttime > 1000
|
|
END_CUTSCENE(FALSE)
|
|
return true
|
|
ENDIF
|
|
ENDIF
|
|
|
|
|
|
return FALSE
|
|
|
|
ENDFUNC
|
|
|
|
proc CUTSCENE_DIRECTOR(#IF IS_DEBUG_BUILD WIDGET_GROUP_ID parent=null #endif)
|
|
|
|
controlCameras()
|
|
#IF IS_DEBUG_BUILD
|
|
cutscene_widget(parent)
|
|
if bPause = TRUE
|
|
SET_GAME_PAUSED(true)
|
|
ELSE
|
|
SET_GAME_PAUSED(FALSE)
|
|
ENDIF
|
|
#ENDIF
|
|
ENDPROC
|
|
|