////////////////////////////////////////////////////////////////////// /* bj_debug.sch */ /* Author: DJ Jones */ /* Debug output & drawing for base jump activity. */ ////////////////////////////////////////////////////////////////////// // Widgets for viewing and tweaking values. STRUCT BJ_WIDGETS // Widget groups. WIDGET_GROUP_ID parentGroup WIDGET_GROUP_ID cutsceneGroup WIDGET_GROUP_ID cameraGroup WIDGET_GROUP_ID launchGroup WIDGET_GROUP_ID lookGroup WIDGET_GROUP_ID jumpGroup WIDGET_GROUP_ID targetGroup WIDGET_GROUP_ID targetPropGroup WIDGET_GROUP_ID target1Group WIDGET_GROUP_ID target2Group WIDGET_GROUP_ID target3Group WIDGET_GROUP_ID target4Group WIDGET_GROUP_ID target5Group WIDGET_GROUP_ID target6Group WIDGET_GROUP_ID target7Group WIDGET_GROUP_ID target8Group WIDGET_GROUP_ID target9Group WIDGET_GROUP_ID target10Group WIDGET_GROUP_ID target11Group WIDGET_GROUP_ID target12Group WIDGET_GROUP_ID uiGroup WIDGET_GROUP_ID debugGroup WIDGET_GROUP_ID parachuteGroup WIDGET_GROUP_ID audioGroup // Launch location. VECTOR vLaunchPos VECTOR vLaunchPosLast FLOAT fLaunchHeading FLOAT fLaunchHeadingLast //cam pos rot VECTOR vTmpCamPos VECTOR vTmpCamRot FLOAT fTmpCamFOV BOOL bUpdateDebugCam TEXT_LABEL sParachuteState, sLandingState BOOL bUpdateParachuteState, bUpdateLandingState BOOL bHitLS1, bHitLS2, bHitLS3, bHitLS4, bHitLS5, bHitLS6 BOOL bHitPS1, bHitPS2, bHitPS3, bHitPS4, bHitPS5 // Game state data. // INT iGameState // Debug draw data. BOOL bDebugDraw BOOL bDebugDrawLast BOOL bDrawPlayerToTarget BOOL bDrawFullPath // Audio data. BOOL bUseElevationWind BOOL bUseCustomWind ENDSTRUCT BJ_WIDGETS bjw PROC BJ_DEBUG_DRAW_LITERAL_STRING(STRING sLiteral, INT iColumn, HUD_COLOURS eColour = HUD_COLOUR_PURE_WHITE) INT red, green, blue, iAlpha GET_HUD_COLOUR(eColour, red, green, blue, iAlpha) SET_TEXT_SCALE(0.45, 0.45) SET_TEXT_COLOUR(red, green, blue, iAlpha) DISPLAY_TEXT_WITH_LITERAL_STRING(0.7795, 0.0305*TO_FLOAT(iColumn+1), "STRING", sLiteral) ENDPROC PROC BJ_DEBUG_DRAW_LITERAL_STRING_WITH_INT(STRING sLiteral, INT sInt, INT iColumn, HUD_COLOURS eColour = HUD_COLOUR_PURE_WHITE) TEXT_LABEL_63 sNewLiteral = sLiteral sNewLiteral += sInt BJ_DEBUG_DRAW_LITERAL_STRING(sNewLiteral, iColumn, eColour) ENDPROC PROC BJ_DEBUG_DRAW_LITERAL_STRING_WITH_FLOAT(STRING sLiteral, FLOAT sFloat, INT iColumn, HUD_COLOURS eColour = HUD_COLOUR_PURE_WHITE) TEXT_LABEL_63 sNewLiteral = sLiteral sNewLiteral += GET_STRING_FROM_FLOAT(sFloat) BJ_DEBUG_DRAW_LITERAL_STRING(sNewLiteral, iColumn, eColour) ENDPROC FUNC STRING GET_STRING_FROM_PED_LANDING_TYPE(PED_PARACHUTE_LANDING_TYPE thisType) SWITCH thisType CASE PPLT_INVALID RETURN "PPLT_INVALID" BREAK CASE PPLT_SLOW RETURN "PPLT_SLOW" BREAK CASE PPLT_REGULAR RETURN "PPLT_REGULAR" BREAK CASE PPLT_FAST RETURN "PPLT_FAST" BREAK CASE PPLT_CRASH RETURN "PPLT_CRASH" BREAK CASE PPLT_WATER RETURN "PPLT_WATER" BREAK ENDSWITCH RETURN "OMGZWTF" ENDFUNC FUNC STRING GET_STRING_FROM_PED_PARACHUTE_STATE(PED_PARACHUTE_STATE thisState) SWITCH thisState CASE PPS_INVALID RETURN "PPS_INVALID" BREAK CASE PPS_SKYDIVING RETURN "PPS_SKYDIVING" BREAK CASE PPS_DEPLOYING RETURN "PPS_DEPLOYING" BREAK CASE PPS_PARACHUTING RETURN "PPS_PARACHUTING" BREAK CASE PPS_LANDING RETURN "PPS_LANDING" BREAK ENDSWITCH RETURN "OMGZWTF" ENDFUNC // Create widgets for debugging purposes. PROC BJ_SETUP_DEBUG(BJ_ARGS& bjArgs, BJ_JUMP_ID eJumpID) // Initialize launch location. bjw.vLaunchPos = BJ_GET_COURSE_PLAYER_LOCATION_BY_ID(eJumpID) bjw.fLaunchHeading = BJ_GET_ARG_LAUNCH_HEADING(bjArgs) bjw.vLaunchPosLast = bjw.vLaunchPos bjw.fLaunchHeadingLast = bjw.fLaunchHeading // Initialize debug draw settings. bjw.bDrawPlayerToTarget = TRUE bjw.bDrawFullPath = TRUE bjw.bUpdateDebugCam = FALSE // Initialize audio settings. bjw.bUseElevationWind = FALSE bjw.bUseCustomWind = TRUE // The main widget group. bjw.parentGroup = START_WIDGET_GROUP("Base Jumping") // Cutscene controls. bjw.cutsceneGroup = START_WIDGET_GROUP("Cutscene") ADD_WIDGET_FLOAT_SLIDER("Cutscene End Wait Time", fCUTSCENE_END_WAIT, 0.0, 10.0, 0.1) ADD_WIDGET_INT_SLIDER("Cutscene Interp Duration", iCUTSCENE_INTERP_DUR, 0, 10000, 10) bjw.cameraGroup = START_WIDGET_GROUP("Camera") ADD_WIDGET_VECTOR_SLIDER("Cam Pos", bjw.vTmpCamPos, -5000, 5000, 0.1) ADD_WIDGET_VECTOR_SLIDER("Cam Rot", bjw.vTmpCamRot, -5000, 5000, 0.1) ADD_WIDGET_FLOAT_SLIDER("Cam FOV", bjw.fTmpCamFOV, 0, 100, 0.1) ADD_WIDGET_BOOL("Update Camera", bjw.bUpdateDebugCam) STOP_WIDGET_GROUP() STOP_WIDGET_GROUP() // Launch controls. bjw.launchGroup = START_WIDGET_GROUP("Launch") ADD_WIDGET_FLOAT_SLIDER("Launch Position X", bjw.vLaunchPos.x, -8000.0, 8000.0, 1.0) ADD_WIDGET_FLOAT_SLIDER("Launch Position Y", bjw.vLaunchPos.y, -8000.0, 8000.0, 1.0) ADD_WIDGET_FLOAT_SLIDER("Launch Position Z", bjw.vLaunchPos.z, 0.0, 2500.0, 1.0) ADD_WIDGET_FLOAT_SLIDER("Launch Heading", bjw.fLaunchHeading, 0.0, 360.0, 0.1) STOP_WIDGET_GROUP() // Look controls. bjw.cutsceneGroup = START_WIDGET_GROUP("Look Mode") ADD_WIDGET_FLOAT_SLIDER("Horizontal Cam Scalar", fLOOK_SCALAR_HORIZ, 0.0, 1000.0, 1.0) ADD_WIDGET_FLOAT_SLIDER("Vertical Cam Scalar", fLOOK_SCALAR_VERT, 0.0, 1000.0, 1.0) ADD_WIDGET_FLOAT_SLIDER("Horizontal Rot Max", fLOOK_MAX_HORIZ, 0.0, 180.0, 1.0) ADD_WIDGET_FLOAT_SLIDER("Vertical Rot Max", fLOOK_MAX_VERT, 0.0, 90.0, 1.0) ADD_WIDGET_FLOAT_SLIDER("Vertical Rot Min", fLOOK_MIN_VERT, -90.0, 0.0, 1.0) ADD_WIDGET_FLOAT_SLIDER("Look Initial Pitch", fLOOK_INIT_PITCH, -180.0, 180.0, 0.1) ADD_WIDGET_FLOAT_SLIDER("Look FOV", fLOOK_FOV, 5.0, 120.0, 0.1) ADD_WIDGET_FLOAT_SLIDER("Heli Sway Magnitude", fHELI_SWAY_MAG, 0.0, 1.0, 0.001) ADD_WIDGET_FLOAT_SLIDER("Heli Sway Frequency", fHELI_SWAY_FREQ, 0.0, 20.0, 0.1) STOP_WIDGET_GROUP() // Jump controls. bjw.jumpGroup = START_WIDGET_GROUP("Jump") ADD_WIDGET_FLOAT_SLIDER("Jump Cam Start Interp", fJUMP_CAM_START_INTERP, 0.0, 10.0, 0.1) ADD_WIDGET_FLOAT_SLIDER("Jump Cam Game Interp", fJUMP_CAM_GAME_INTERP, 0.0, 10.0, 0.1) ADD_WIDGET_FLOAT_SLIDER("Jump Cam Duration", fJUMP_CAM_DUR, 0.0, 10.0, 0.1) ADD_WIDGET_FLOAT_SLIDER("Jump Cam Attached X", fHEAD_CAM_X, -100.0, 100.0, 0.01) ADD_WIDGET_FLOAT_SLIDER("Jump Cam Attached Y", fHEAD_CAM_Y, -100.0, 100.0, 0.01) ADD_WIDGET_FLOAT_SLIDER("Jump Cam Attached Z", fHEAD_CAM_Z, -100.0, 100.0, 0.01) ADD_WIDGET_FLOAT_SLIDER("Jump Cam Attached LX", fHEAD_CAM_LX, -100.0, 100.0, 0.01) ADD_WIDGET_FLOAT_SLIDER("Jump Cam Attached LY", fHEAD_CAM_LY, -100.0, 100.0, 0.01) ADD_WIDGET_FLOAT_SLIDER("Jump Cam Attached LZ", fHEAD_CAM_LZ, -100.0, 100.0, 0.01) STOP_WIDGET_GROUP() // Target controls. bjw.targetGroup = START_WIDGET_GROUP("Targets") // Properties for all targets. bjw.targetPropGroup = START_WIDGET_GROUP("Properties") ADD_WIDGET_FLOAT_SLIDER("Air Target Range", fAIR_TGT_RANGE, 0.0, 1000.0, 1.0) ADD_WIDGET_FLOAT_SLIDER("Air Target Inner Range", fAIR_TGT_INNER_RANGE, 0.0, 1000.0, 1.0) ADD_WIDGET_FLOAT_SLIDER("Ground Target Horiz Range", fGROUND_TGT_RG_HORIZ, 0.0, 1000.0, 1.0) ADD_WIDGET_FLOAT_SLIDER("Ground Target Vertical Range (above target)", fGROUND_TGT_RG_VERT_ABOVE, 0.0, 50.0, 0.1) ADD_WIDGET_FLOAT_SLIDER("Ground Target Vertical Range (below target)", fGROUND_TGT_RG_VERT_BELOW, -50.0, 0.0, 0.1) ADD_WIDGET_FLOAT_SLIDER("Target Distance Dropoff", fNEXT_TGT_DIST_DROPOFF, 0.0, 1.0, 0.001) ADD_WIDGET_FLOAT_SLIDER("Air Target Scale", fAIR_TGT_DRAW_SCALE, 0.0, 200.0, 0.1) ADD_WIDGET_FLOAT_SLIDER("Ground Target Scale Small", fGND_TGT_DRAW_SCALE_S, 0.0, 200.0, 0.1) ADD_WIDGET_FLOAT_SLIDER("Ground Target Scale Medium", fGND_TGT_DRAW_SCALE_M, 0.0, 200.0, 0.1) ADD_WIDGET_FLOAT_SLIDER("Ground Target Scale Large", fGND_TGT_DRAW_SCALE_L, 0.0, 200.0, 0.1) ADD_WIDGET_FLOAT_SLIDER("Air Next Target Scale", fAIR_NXT_TGT_SCALE, 0.0, 2.0, 0.01) ADD_WIDGET_FLOAT_SLIDER("Ground Next Target Scale", fGND_NXT_TGT_SCALE, 0.0, 2.0, 0.01) ADD_WIDGET_FLOAT_SLIDER("Current Blip Scale", fCUR_BLIP_SCALE, 0.0, 3.0, 0.01) ADD_WIDGET_FLOAT_SLIDER("Next Blip Scale", fNEXT_BLIP_SCALE, 0.0, 3.0, 0.01) ADD_WIDGET_FLOAT_SLIDER("Finish Reward Multiplier", fFINISH_REWARD_MULT, 0.0, 20.0, 0.1) ADD_WIDGET_INT_SLIDER("Target Red", iTARGET_RED, 0, 255, 1) ADD_WIDGET_INT_SLIDER("Target Green", iTARGET_GREEN, 0, 255, 1) ADD_WIDGET_INT_SLIDER("Target Blue", iTARGET_BLUE, 0, 255, 1) ADD_WIDGET_INT_SLIDER("Target Alpha", iTARGET_ALPHA, 0, 255, 1) ADD_WIDGET_INT_SLIDER("Gate Reward", iGATE_REWARD, 0, 1000, 1) ADD_WIDGET_INT_SLIDER("Finish Reward Base", iFINISH_REWARD_BASE, 0, 1000, 1) STOP_WIDGET_GROUP() // Target 1. bjw.target1Group = START_WIDGET_GROUP("Target 1") ADD_WIDGET_FLOAT_SLIDER("Target 1 X", bjArgs.vTargetPos[0].x, -8000.0, 8000.0, 1.0) ADD_WIDGET_FLOAT_SLIDER("Target 1 Y", bjArgs.vTargetPos[0].y, -8000.0, 8000.0, 1.0) ADD_WIDGET_FLOAT_SLIDER("Target 1 Z", bjArgs.vTargetPos[0].z, -500.0, 2500.0, 1.0) STOP_WIDGET_GROUP() // Target 2. bjw.target2Group = START_WIDGET_GROUP("Target 2") ADD_WIDGET_FLOAT_SLIDER("Target 2 X", bjArgs.vTargetPos[1].x, -8000.0, 8000.0, 1.0) ADD_WIDGET_FLOAT_SLIDER("Target 2 Y", bjArgs.vTargetPos[1].y, -8000.0, 8000.0, 1.0) ADD_WIDGET_FLOAT_SLIDER("Target 2 Z", bjArgs.vTargetPos[1].z, -500.0, 2500.0, 1.0) STOP_WIDGET_GROUP() // Target 3. bjw.target3Group = START_WIDGET_GROUP("Target 3") ADD_WIDGET_FLOAT_SLIDER("Target 3 X", bjArgs.vTargetPos[2].x, -8000.0, 8000.0, 1.0) ADD_WIDGET_FLOAT_SLIDER("Target 3 Y", bjArgs.vTargetPos[2].y, -8000.0, 8000.0, 1.0) ADD_WIDGET_FLOAT_SLIDER("Target 3 Z", bjArgs.vTargetPos[2].z, -500.0, 2500.0, 1.0) STOP_WIDGET_GROUP() // Target 4. bjw.target4Group = START_WIDGET_GROUP("Target 4") ADD_WIDGET_FLOAT_SLIDER("Target 4 X", bjArgs.vTargetPos[3].x, -8000.0, 8000.0, 1.0) ADD_WIDGET_FLOAT_SLIDER("Target 4 Y", bjArgs.vTargetPos[3].y, -8000.0, 8000.0, 1.0) ADD_WIDGET_FLOAT_SLIDER("Target 4 Z", bjArgs.vTargetPos[3].z, -500.0, 2500.0, 1.0) STOP_WIDGET_GROUP() // Target 5. bjw.target5Group = START_WIDGET_GROUP("Target 5") ADD_WIDGET_FLOAT_SLIDER("Target 5 X", bjArgs.vTargetPos[4].x, -8000.0, 8000.0, 1.0) ADD_WIDGET_FLOAT_SLIDER("Target 5 Y", bjArgs.vTargetPos[4].y, -8000.0, 8000.0, 1.0) ADD_WIDGET_FLOAT_SLIDER("Target 5 Z", bjArgs.vTargetPos[4].z, -500.0, 2500.0, 1.0) STOP_WIDGET_GROUP() // Target 6. bjw.target6Group = START_WIDGET_GROUP("Target 6") ADD_WIDGET_FLOAT_SLIDER("Target 6 X", bjArgs.vTargetPos[5].x, -8000.0, 8000.0, 1.0) ADD_WIDGET_FLOAT_SLIDER("Target 6 Y", bjArgs.vTargetPos[5].y, -8000.0, 8000.0, 1.0) ADD_WIDGET_FLOAT_SLIDER("Target 6 Z", bjArgs.vTargetPos[5].z, -500.0, 2500.0, 1.0) STOP_WIDGET_GROUP() // Target 7. bjw.target7Group = START_WIDGET_GROUP("Target 7") ADD_WIDGET_FLOAT_SLIDER("Target 7 X", bjArgs.vTargetPos[6].x, -8000.0, 8000.0, 1.0) ADD_WIDGET_FLOAT_SLIDER("Target 7 Y", bjArgs.vTargetPos[6].y, -8000.0, 8000.0, 1.0) ADD_WIDGET_FLOAT_SLIDER("Target 7 Z", bjArgs.vTargetPos[6].z, -500.0, 2500.0, 1.0) STOP_WIDGET_GROUP() // Target 8. bjw.target8Group = START_WIDGET_GROUP("Target 8") ADD_WIDGET_FLOAT_SLIDER("Target 8 X", bjArgs.vTargetPos[7].x, -8000.0, 8000.0, 1.0) ADD_WIDGET_FLOAT_SLIDER("Target 8 Y", bjArgs.vTargetPos[7].y, -8000.0, 8000.0, 1.0) ADD_WIDGET_FLOAT_SLIDER("Target 8 Z", bjArgs.vTargetPos[7].z, -500.0, 2500.0, 1.0) STOP_WIDGET_GROUP() // Target 9. bjw.target9Group = START_WIDGET_GROUP("Target 9") ADD_WIDGET_FLOAT_SLIDER("Target 9 X", bjArgs.vTargetPos[8].x, -8000.0, 8000.0, 1.0) ADD_WIDGET_FLOAT_SLIDER("Target 9 Y", bjArgs.vTargetPos[8].y, -8000.0, 8000.0, 1.0) ADD_WIDGET_FLOAT_SLIDER("Target 9 Z", bjArgs.vTargetPos[8].z, -500.0, 2500.0, 1.0) STOP_WIDGET_GROUP() // Target 10. bjw.target10Group = START_WIDGET_GROUP("Target 10") ADD_WIDGET_FLOAT_SLIDER("Target 10 X", bjArgs.vTargetPos[9].x, -8000.0, 8000.0, 1.0) ADD_WIDGET_FLOAT_SLIDER("Target 10 Y", bjArgs.vTargetPos[9].y, -8000.0, 8000.0, 1.0) ADD_WIDGET_FLOAT_SLIDER("Target 10 Z", bjArgs.vTargetPos[9].z, -500.0, 2500.0, 1.0) STOP_WIDGET_GROUP() // Target 11. bjw.target11Group = START_WIDGET_GROUP("Target 11") ADD_WIDGET_FLOAT_SLIDER("Target 11 X", bjArgs.vTargetPos[10].x, -8000.0, 8000.0, 1.0) ADD_WIDGET_FLOAT_SLIDER("Target 11 Y", bjArgs.vTargetPos[10].y, -8000.0, 8000.0, 1.0) ADD_WIDGET_FLOAT_SLIDER("Target 11 Z", bjArgs.vTargetPos[10].z, -500.0, 2500.0, 1.0) STOP_WIDGET_GROUP() // Target 12. bjw.target12Group = START_WIDGET_GROUP("Target 12") ADD_WIDGET_FLOAT_SLIDER("Target 12 X", bjArgs.vTargetPos[11].x, -8000.0, 8000.0, 1.0) ADD_WIDGET_FLOAT_SLIDER("Target 12 Y", bjArgs.vTargetPos[11].y, -8000.0, 8000.0, 1.0) ADD_WIDGET_FLOAT_SLIDER("Target 12 Z", bjArgs.vTargetPos[11].z, -500.0, 2500.0, 1.0) STOP_WIDGET_GROUP() STOP_WIDGET_GROUP() // UI controls. bjw.uiGroup = START_WIDGET_GROUP("UI") ADD_WIDGET_FLOAT_SLIDER("Input Delay", fINPUT_DELAY, 0.0, 100.0, 1.0) ADD_WIDGET_FLOAT_SLIDER("Post Win Timeout", fPOST_WIN_TIMEOUT, 0.0, 100.0, 1.0) ADD_WIDGET_FLOAT_SLIDER("Post Loss Timeout", fPOST_LOSS_TIMEOUT, 0.0, 100.0, 1.0) ADD_WIDGET_INT_SLIDER("Fade Out Time", iFADE_OUT_TIME, 0, 10000, 10) ADD_WIDGET_INT_SLIDER("Fade In Time", iFADE_IN_TIME, 0, 10000, 10) STOP_WIDGET_GROUP() // Debug draw controls. bjw.uiGroup = START_WIDGET_GROUP("Debug Draw") ADD_WIDGET_BOOL("Enable Debug Draw", bjw.bDebugDraw) ADD_WIDGET_BOOL("Draw Player to Target", bjw.bDrawPlayerToTarget) ADD_WIDGET_BOOL("Draw Full Path", bjw.bDrawFullPath) STOP_WIDGET_GROUP() // Parachute/Landing info bjw.parachuteGroup = START_WIDGET_GROUP("Parachute States") ADD_WIDGET_BOOL("Update current parachute state:", bjw.bUpdateParachuteState) ADD_TEXT_WIDGET(bjw.sLandingState) ADD_WIDGET_BOOL("Hit PPS_INVALID", bjw.bHitPS1) ADD_WIDGET_BOOL("Hit PPS_SKYDIVING", bjw.bHitPS2) ADD_WIDGET_BOOL("Hit PPS_DEPLOYING", bjw.bHitPS3) ADD_WIDGET_BOOL("Hit PPS_PARACHUTING", bjw.bHitPS4) ADD_WIDGET_BOOL("Hit PPS_LANDING", bjw.bHitPS5) ADD_WIDGET_BOOL("Update current landing state:", bjw.bUpdateLandingState) ADD_TEXT_WIDGET(bjw.sParachuteState) ADD_WIDGET_BOOL("Hit PPLT_INVALID", bjw.bHitLS1) ADD_WIDGET_BOOL("Hit PPLT_SLOW", bjw.bHitLS2) ADD_WIDGET_BOOL("Hit PPLT_REGULAR", bjw.bHitLS3) ADD_WIDGET_BOOL("Hit PPLT_FAST", bjw.bHitLS4) ADD_WIDGET_BOOL("Hit PPLT_CRASH", bjw.bHitLS5) ADD_WIDGET_BOOL("Hit PPLT_WATER", bjw.bHitLS6) STOP_WIDGET_GROUP() // Audio controls. bjw.audioGroup = START_WIDGET_GROUP("Audio Options") ADD_WIDGET_BOOL("Use Elevation Wind", bjw.bUseElevationWind) ADD_WIDGET_BOOL("Use Custom Wind", bjw.bUseCustomWind) STOP_WIDGET_GROUP() STOP_WIDGET_GROUP() ENDPROC // Delete all existing bj hockey widgets. PROC BJ_CLEANUP_WIDGETS() IF DOES_WIDGET_GROUP_EXIST(bjw.debugGroup) DELETE_WIDGET_GROUP(bjw.debugGroup) ENDIF IF DOES_WIDGET_GROUP_EXIST(bjw.uiGroup) DELETE_WIDGET_GROUP(bjw.uiGroup) ENDIF IF DOES_WIDGET_GROUP_EXIST(bjw.target9Group) DELETE_WIDGET_GROUP(bjw.target9Group) ENDIF IF DOES_WIDGET_GROUP_EXIST(bjw.target8Group) DELETE_WIDGET_GROUP(bjw.target8Group) ENDIF IF DOES_WIDGET_GROUP_EXIST(bjw.target7Group) DELETE_WIDGET_GROUP(bjw.target7Group) ENDIF IF DOES_WIDGET_GROUP_EXIST(bjw.target6Group) DELETE_WIDGET_GROUP(bjw.target6Group) ENDIF IF DOES_WIDGET_GROUP_EXIST(bjw.target5Group) DELETE_WIDGET_GROUP(bjw.target5Group) ENDIF IF DOES_WIDGET_GROUP_EXIST(bjw.target4Group) DELETE_WIDGET_GROUP(bjw.target4Group) ENDIF IF DOES_WIDGET_GROUP_EXIST(bjw.target3Group) DELETE_WIDGET_GROUP(bjw.target3Group) ENDIF IF DOES_WIDGET_GROUP_EXIST(bjw.target2Group) DELETE_WIDGET_GROUP(bjw.target2Group) ENDIF IF DOES_WIDGET_GROUP_EXIST(bjw.target1Group) DELETE_WIDGET_GROUP(bjw.target1Group) ENDIF IF DOES_WIDGET_GROUP_EXIST(bjw.targetPropGroup) DELETE_WIDGET_GROUP(bjw.targetPropGroup) ENDIF IF DOES_WIDGET_GROUP_EXIST(bjw.targetGroup) DELETE_WIDGET_GROUP(bjw.targetGroup) ENDIF IF DOES_WIDGET_GROUP_EXIST(bjw.jumpGroup) DELETE_WIDGET_GROUP(bjw.jumpGroup) ENDIF IF DOES_WIDGET_GROUP_EXIST(bjw.lookGroup) DELETE_WIDGET_GROUP(bjw.lookGroup) ENDIF IF DOES_WIDGET_GROUP_EXIST(bjw.launchGroup) DELETE_WIDGET_GROUP(bjw.launchGroup) ENDIF IF DOES_WIDGET_GROUP_EXIST(bjw.cutsceneGroup) DELETE_WIDGET_GROUP(bjw.cutsceneGroup) ENDIF IF DOES_WIDGET_GROUP_EXIST(bjw.cameraGroup) DELETE_WIDGET_GROUP(bjw.cameraGroup) ENDIF IF DOES_WIDGET_GROUP_EXIST(bjw.parachuteGroup) DELETE_WIDGET_GROUP(bjw.parachuteGroup) ENDIF IF DOES_WIDGET_GROUP_EXIST(bjw.parentGroup) DELETE_WIDGET_GROUP(bjw.parentGroup) ENDIF ENDPROC // Update widget variable values. PROC BJ_UPDATE_WIDGETS(BJ_ARGS& bjArgs, INT& iGates, INT iGameState, VEHICLE_INDEX launchVehicle) INT iIndex // Update game state. /* bjw.*/iGameState = iGameState IF bjw.bUpdateDebugCam SET_CAM_COORD(GET_RENDERING_CAM(), bjw.vTmpCamPos) SET_CAM_ROT(GET_RENDERING_CAM(), bjw.vTmpCamRot) SET_CAM_FOV(GET_RENDERING_CAM(), bjw.fTmpCamFOV) ENDIF IF bjw.bUpdateParachuteState IF NOT IS_PED_INJURED(PLAYER_PED_ID()) PED_PARACHUTE_STATE thisPPS = GET_PED_PARACHUTE_STATE(PLAYER_PED_ID()) bjw.sParachuteState = "PPS: " bjw.sParachuteState += GET_STRING_FROM_PED_PARACHUTE_STATE(thisPPS) SWITCH thisPPS CASE PPS_INVALID bjw.bHitPS1 = TRUE BREAK CASE PPS_SKYDIVING bjw.bHitPS2 = TRUE BREAK CASE PPS_DEPLOYING bjw.bHitPS3 = TRUE BREAK CASE PPS_PARACHUTING bjw.bHitPS4 = TRUE BREAK CASE PPS_LANDING bjw.bHitPS5 = TRUE BREAK ENDSWITCH ENDIF ENDIF IF bjw.bUpdateLandingState IF NOT IS_PED_INJURED(PLAYER_PED_ID()) PED_PARACHUTE_LANDING_TYPE thisPPLT = GET_PED_PARACHUTE_LANDING_TYPE(PLAYER_PED_ID()) bjw.sLandingState = "PPLT is: " bjw.sLandingState += GET_STRING_FROM_PED_LANDING_TYPE(thisPPLT) SWITCH thisPPLT CASE PPLT_INVALID bjw.bHitLS1 = TRUE BREAK CASE PPLT_SLOW bjw.bHitLS2 = TRUE BREAK CASE PPLT_REGULAR bjw.bHitLS3 = TRUE BREAK CASE PPLT_FAST bjw.bHitLS4 = TRUE BREAK CASE PPLT_CRASH bjw.bHitLS5 = TRUE BREAK CASE PPLT_WATER bjw.bHitLS6 = TRUE BREAK ENDSWITCH ENDIF ENDIF // Check for a change in launch position. IF NOT ARE_VECTORS_EQUAL(bjw.vLaunchPosLast, bjw.vLaunchPos) IF DOES_ENTITY_EXIST(launchVehicle) SET_ENTITY_COORDS(launchVehicle, bjw.vLaunchPos) ENDIF bjw.vLaunchPosLast = bjw.vLaunchPos ENDIF // Check for a change in launch heading. IF bjw.fLaunchHeadingLast <> bjw.fLaunchHeading IF DOES_ENTITY_EXIST(launchVehicle) SET_ENTITY_HEADING(launchVehicle, bjw.fLaunchHeading) ENDIF bjw.fLaunchHeadingLast = bjw.fLaunchHeading ENDIF // Make sure that if gates are added or removed, we update the total gates. REPEAT iMAX_GATES iIndex IF NOT IS_VECTOR_ZERO(BJ_GET_ARG_TARGET_POSITION(bjArgs, iIndex)) iGates = iIndex + 1 ELSE iIndex = 999999 ENDIF ENDREPEAT ENDPROC // Draw stuff to help. PROC BJ_DEBUG_DRAW(BJ_ARGS& bjArgs, INT iCurrentGate, INT iGates) VECTOR vTargetBottom INT i IF bjw.bDrawPlayerToTarget vTargetBottom = BJ_GET_ARG_TARGET_POSITION(bjArgs, iCurrentGate) vTargetBottom.z -= fAIR_TGT_RANGE DRAW_DEBUG_LINE(GET_ENTITY_COORDS(PLAYER_PED_ID()), BJ_GET_ARG_TARGET_POSITION(bjArgs, iCurrentGate)) DRAW_DEBUG_LINE(GET_ENTITY_COORDS(PLAYER_PED_ID()), vTargetBottom, 255, 50, 0, 255) ENDIF FOR i = iCurrentGate TO iGates - 1 IF bjw.bDrawFullPath AND i > iCurrentGate DRAW_DEBUG_LINE(BJ_GET_ARG_TARGET_POSITION(bjArgs, i-1), BJ_GET_ARG_TARGET_POSITION(bjArgs, i), 255, 0, 255, 255) ENDIF IF i < iGates - 1 DRAW_DEBUG_SPHERE(BJ_GET_ARG_TARGET_POSITION(bjArgs, i), fAIR_TGT_RANGE, 0, 255, PICK_INT(i = iCurrentGate, 255, 100), 128) DRAW_DEBUG_SPHERE(BJ_GET_ARG_TARGET_POSITION(bjArgs, i), fAIR_TGT_INNER_RANGE, 255, 0, PICK_INT( i = iCurrentGate, 255, 100), 128) ELSE DRAW_MARKER(MARKER_CYLINDER, BJ_GET_ARG_TARGET_POSITION(bjArgs, i), <<1,0,0>>, <<0,0,0>>, <<2.0 * fGROUND_TGT_RG_HORIZ, 2.0 * fGROUND_TGT_RG_HORIZ, 2.0 * fGROUND_TGT_RG_VERT_ABOVE>>, 0, 255, PICK_INT(i = iCurrentGate, 255, 100), 128) ENDIF ENDFOR ENDPROC // Main debug update function. PROC BJ_UPDATE_DEBUG(BJ_ARGS& bjArgs, INT iGameState, INT iCurrentGate, INT& iGates, VEHICLE_INDEX launchVehicle) // Update widgets. BJ_UPDATE_WIDGETS(bjArgs, iGates, iGameState, launchVehicle) // Shortcut buttons. //IF IS_BUTTON_JUST_PRESSED(PAD1, LEFTSHOULDER1) // bjw.bDebugDraw = NOT bjw.bDebugDraw //ENDIF // Turn on debug draw and draw. IF bjw.bDebugDraw IF NOT bjw.bDebugDrawLast SET_DEBUG_LINES_AND_SPHERES_DRAWING_ACTIVE(TRUE) bjw.bDebugDrawLast = TRUE ENDIF BJ_DEBUG_DRAW(bjArgs, iCurrentGate, iGates) // Turn off debug draw. ELIF bjw.bDebugDrawLast SET_DEBUG_LINES_AND_SPHERES_DRAWING_ACTIVE(FALSE) bjw.bDebugDrawLast = FALSE ENDIF ENDPROC