215 lines
9.1 KiB
Python
Executable File
215 lines
9.1 KiB
Python
Executable File
USING "help_at_location.sch"
|
|
USING "commands_hud.sch"
|
|
USING "commands_script.sch"
|
|
USING "script_maths.sch"
|
|
USING "script_player.sch"
|
|
|
|
#IF IS_DEBUG_BUILD
|
|
USING "shared_debug.sch"
|
|
#ENDIF
|
|
|
|
#IF IS_DEBUG_BUILD
|
|
WIDGET_GROUP_ID widget_debug
|
|
INT i_debug_slot = -1
|
|
INT i_debug_duration = DEFAULT_HELP_TEXT_TIME
|
|
INT i_debug_arrow_dir = 0
|
|
BOOL b_debug_print_help = FALSE
|
|
BOOL b_debug_clear_help = FALSE
|
|
BOOL b_debug_use_2d_offset = FALSE
|
|
BOOL b_debug_use_screen_offset = FALSE
|
|
BOOL b_debug_turn_on_prints = FALSE
|
|
VECTOR v_debug_offset = <<0.0, 0.0, 1.0>>
|
|
BOOL b_debug_reset_help[MAX_NUMBER_OF_FLOATING_HELP]
|
|
INT i_new_time[MAX_NUMBER_OF_FLOATING_HELP]
|
|
INT i_arrow_direction[MAX_NUMBER_OF_FLOATING_HELP]
|
|
INT i_message_style[MAX_NUMBER_OF_FLOATING_HELP]
|
|
PROC CREATE_WIDGETS()
|
|
widget_debug = START_WIDGET_GROUP("Floating Help")
|
|
ADD_WIDGET_BOOL("Enable debug prints", b_debug_turn_on_prints)
|
|
ADD_WIDGET_BOOL("Print test help", b_debug_print_help)
|
|
ADD_WIDGET_BOOL("Clear help", b_debug_clear_help)
|
|
ADD_WIDGET_INT_SLIDER("Slot", i_debug_slot, -1, 2, 1)
|
|
ADD_WIDGET_INT_SLIDER("Help duration", i_debug_duration, -1, 50000, 100)
|
|
ADD_WIDGET_VECTOR_SLIDER("Offset", v_debug_offset, -2.0, 2.0, 0.01)
|
|
ADD_WIDGET_INT_SLIDER("arrow direction", i_debug_arrow_dir, 0, 4, 1)
|
|
ADD_WIDGET_BOOL("Use 2D offset from entity", b_debug_use_2d_offset)
|
|
ADD_WIDGET_BOOL("Use screen coords", b_debug_use_screen_offset)
|
|
|
|
TEXT_LABEL_31 txTlabel
|
|
INT i
|
|
REPEAT COUNT_OF(g_sFloatingHelpData) i
|
|
txTlabel = "eHELP_TEXT_FLOATING_ID - "
|
|
txTlabel += i
|
|
START_WIDGET_GROUP(txTlabel)
|
|
ADD_WIDGET_BOOL("Reset Help Message", b_debug_reset_help[i])
|
|
ADD_WIDGET_INT_SLIDER("New Duration",i_new_time[i] , -1, 50000, 1)
|
|
ADD_WIDGET_INT_SLIDER("Current timer", g_sFloatingHelpData[i].i_timer , -1, 50000, 1)
|
|
ADD_WIDGET_INT_SLIDER("arrow direction", i_arrow_direction[i], 0, 4, 1)
|
|
ADD_WIDGET_INT_SLIDER("message style", i_message_style[i], 0, 1, 1)
|
|
ADD_WIDGET_FLOAT_SLIDER("X Coord", g_sFloatingHelpData[i].v_pos.x, -10000.0, 10000.0, 0.001)
|
|
ADD_WIDGET_FLOAT_SLIDER("Y Coord", g_sFloatingHelpData[i].v_pos.y, -10000.0, 10000.0, 0.001)
|
|
ADD_WIDGET_FLOAT_SLIDER("Z Coord", g_sFloatingHelpData[i].v_pos.z, -10000.0, 10000.0, 0.001)
|
|
STOP_WIDGET_GROUP()
|
|
ENDREPEAT
|
|
STOP_WIDGET_GROUP()
|
|
ENDPROC
|
|
|
|
PROC DESTROY_WIDGETS()
|
|
IF DOES_WIDGET_GROUP_EXIST(widget_debug)
|
|
DELETE_WIDGET_GROUP(widget_debug)
|
|
ENDIF
|
|
ENDPROC
|
|
|
|
PROC UPDATE_WIDGETS()
|
|
IF b_debug_print_help
|
|
FLOATING_HELP_SLOT_TYPE e_slot = FLOATING_HELP_FIND_NEXT_FREE_SLOT
|
|
|
|
IF i_debug_slot > -1
|
|
e_slot = INT_TO_ENUM(FLOATING_HELP_SLOT_TYPE, i_debug_slot)
|
|
ENDIF
|
|
|
|
IF b_debug_use_screen_offset
|
|
HELP_AT_SCREEN_LOCATION("CMN_MLEAVE", v_debug_offset.x, v_debug_offset.y, INT_TO_ENUM(eARROW_DIRECTION, i_debug_arrow_dir), i_debug_duration, e_slot)
|
|
ELIF b_debug_use_2d_offset
|
|
HELP_AT_ENTITY_2D_OFFSET("CMN_MLEAVE", PLAYER_PED_ID(), v_debug_offset.x, v_debug_offset.y, INT_TO_ENUM(eARROW_DIRECTION, i_debug_arrow_dir), i_debug_duration, e_slot)
|
|
ELSE
|
|
HELP_AT_ENTITY_OFFSET("CMN_MLEAVE", PLAYER_PED_ID(), v_debug_offset, INT_TO_ENUM(eARROW_DIRECTION, i_debug_arrow_dir), i_debug_duration, e_slot)
|
|
ENDIF
|
|
|
|
b_debug_print_help = FALSE
|
|
ENDIF
|
|
|
|
IF b_debug_clear_help
|
|
IF i_debug_slot = -1
|
|
CLEAR_ALL_FLOATING_HELP()
|
|
ELSE
|
|
CLEAR_FLOATING_HELP(INT_TO_ENUM(eHELP_TEXT_FLOATING_ID, i_debug_slot))
|
|
ENDIF
|
|
|
|
b_debug_clear_help = FALSE
|
|
ENDIF
|
|
|
|
/*IF IS_THIS_FLOATING_HELP_TEXT_BEING_DISPLAYED(FLOATING_HELP_TEXT_ID_1, "CMN_MLEAVE")
|
|
PRINTLN("TEST")
|
|
ENDIF
|
|
|
|
IF IS_THIS_FLOATING_HELP_BEING_DISPLAYED("CMN_MLEAVE")
|
|
PRINTLN("TEST2")
|
|
ENDIF*/
|
|
ENDPROC
|
|
#ENDIF
|
|
|
|
|
|
/// PURPOSE:
|
|
/// Updates all floating help: repositions, manages timers and clears if necessary.
|
|
PROC UPDATE_FLOATING_HELP()
|
|
INT i = 0
|
|
|
|
REPEAT COUNT_OF(g_sFloatingHelpData) i
|
|
IF g_sFloatingHelpData[i].i_timer != 0
|
|
eHELP_TEXT_FLOATING_ID eSlotID = INT_TO_ENUM(eHELP_TEXT_FLOATING_ID, i)
|
|
|
|
IF GET_GAME_TIMER() > g_sFloatingHelpData[i].i_timer
|
|
AND g_sFloatingHelpData[i].i_timer != -1
|
|
#IF IS_DEBUG_BUILD
|
|
IF b_debug_turn_on_prints
|
|
PRINTLN("floating_help_controller: timer finished for help slot ", i)
|
|
ENDIF
|
|
#ENDIF
|
|
|
|
//Help text has displayed for the full amount: clear it.
|
|
IF private_IS_THIS_FLOATING_HELP_BEING_DISPLAYED(i)
|
|
CLEAR_FLOATING_HELP(eSlotID, FALSE)
|
|
ENDIF
|
|
private_RESET_FLOATING_HELP_ELEMENT(i)
|
|
ELSE
|
|
IF private_IS_THIS_FLOATING_HELP_BEING_DISPLAYED(i)
|
|
//If the help text is still off screen, increment the timer so it doesn't count down until the player has viewed the text.
|
|
IF g_sFloatingHelpData[i].i_timer != -1
|
|
IF NOT IS_BIT_SET(g_sFloatingHelpData[i].i_flags, FLOATING_HELP_FLAGS_HAS_BEEN_LOOKED_AT)
|
|
g_sFloatingHelpData[i].i_timer += ROUND(GET_FRAME_TIME() * 1000.0)
|
|
IF IS_FLOATING_HELP_TEXT_ON_SCREEN(eSlotID)
|
|
SET_BIT(g_sFloatingHelpData[i].i_flags, FLOATING_HELP_FLAGS_HAS_BEEN_LOOKED_AT)
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
|
|
//Set the help position: use different commands depending on data stored.
|
|
IF g_sFloatingHelpData[i].v_pos.z != FLOATING_HELP_2D_Z_VALUE
|
|
IF g_sFloatingHelpData[i].entity != NULL
|
|
IF NOT IS_ENTITY_DEAD(g_sFloatingHelpData[i].entity)
|
|
IF NOT IS_BIT_SET(g_sFloatingHelpData[i].i_flags, FLOATING_HELP_FLAGS_USE_2D_OFFSET_FROM_ENTITY)
|
|
SET_FLOATING_HELP_TEXT_WORLD_POSITION(eSlotID, GET_OFFSET_FROM_ENTITY_IN_WORLD_COORDS(g_sFloatingHelpData[i].entity, g_sFloatingHelpData[i].v_pos))
|
|
ELSE
|
|
SET_FLOATING_HELP_TEXT_TO_ENTITY(eSlotID, g_sFloatingHelpData[i].entity, g_sFloatingHelpData[i].v_pos.x, g_sFloatingHelpData[i].v_pos.y)
|
|
ENDIF
|
|
ENDIF
|
|
ELIF (g_sFloatingHelpData[i].v_pos.x != 0.0 OR g_sFloatingHelpData[i].v_pos.y != 0.0 OR g_sFloatingHelpData[i].v_pos.z != 0.0)
|
|
SET_FLOATING_HELP_TEXT_WORLD_POSITION(eSlotID, g_sFloatingHelpData[i].v_pos)
|
|
ENDIF
|
|
ELSE
|
|
SET_FLOATING_HELP_TEXT_SCREEN_POSITION(eSlotID, g_sFloatingHelpData[i].v_pos.x, g_sFloatingHelpData[i].v_pos.y)
|
|
ENDIF
|
|
ELSE
|
|
//If the help text isn't displayed but the data is still active then reset it after some time.
|
|
IF GET_GAME_TIMER() - g_sFloatingHelpData[i].i_start_time > 1000
|
|
private_RESET_FLOATING_HELP_ELEMENT(i)
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
|
|
//Re-print the help messages if the bool has been set by the widget.
|
|
#IF IS_DEBUG_BUILD
|
|
IF b_debug_reset_help[i]
|
|
IF IS_BIT_SET(g_sFloatingHelpData[i].i_flags, FLOATING_HELP_FLAGS_PRINT_WITH_STRING)
|
|
IF IS_BIT_SET(g_sFloatingHelpData[i].i_flags, FLOATING_HELP_FLAGS_PRINT_WITH_NUMBER)
|
|
//IF it is with a literal string and a number
|
|
private_PRINT_FLOATING_HELP( g_sFloatingHelpData[i].s_current_label, g_sFloatingHelpData[i].s_literal_label, g_sFloatingHelpData[i].i_help_number, i_new_time[i],
|
|
INT_TO_ENUM(HELP_MESSAGE_STYLE, i_message_style[i]), g_sFloatingHelpData[i].v_pos, g_sFloatingHelpData[i].entity, INT_TO_ENUM(eARROW_DIRECTION, i_arrow_direction[i]),
|
|
TRUE, TRUE, INT_TO_ENUM(FLOATING_HELP_SLOT_TYPE, i))
|
|
ELSE
|
|
//IF it is with a literal string and no number
|
|
private_PRINT_FLOATING_HELP( g_sFloatingHelpData[i].s_current_label, g_sFloatingHelpData[i].s_literal_label, g_sFloatingHelpData[i].i_help_number,i_new_time[i],
|
|
INT_TO_ENUM(HELP_MESSAGE_STYLE, i_message_style[i]), g_sFloatingHelpData[i].v_pos, g_sFloatingHelpData[i].entity, INT_TO_ENUM(eARROW_DIRECTION, i_arrow_direction[i]),
|
|
TRUE, FALSE, INT_TO_ENUM(FLOATING_HELP_SLOT_TYPE, i))
|
|
ENDIF
|
|
ELIF IS_BIT_SET(g_sFloatingHelpData[i].i_flags, FLOATING_HELP_FLAGS_PRINT_WITH_NUMBER)
|
|
//IF it is with a no literal string and a number
|
|
private_PRINT_FLOATING_HELP( g_sFloatingHelpData[i].s_current_label, g_sFloatingHelpData[i].s_literal_label, g_sFloatingHelpData[i].i_help_number,i_new_time[i],
|
|
INT_TO_ENUM(HELP_MESSAGE_STYLE, i_message_style[i]), g_sFloatingHelpData[i].v_pos, g_sFloatingHelpData[i].entity, INT_TO_ENUM(eARROW_DIRECTION, i_arrow_direction[i]),
|
|
FALSE, TRUE, INT_TO_ENUM(FLOATING_HELP_SLOT_TYPE, i))
|
|
ELSE
|
|
//IF it is with a no literal string and no number
|
|
private_PRINT_FLOATING_HELP( g_sFloatingHelpData[i].s_current_label, g_sFloatingHelpData[i].s_literal_label, g_sFloatingHelpData[i].i_help_number,i_new_time[i],
|
|
INT_TO_ENUM(HELP_MESSAGE_STYLE, i_message_style[i]), g_sFloatingHelpData[i].v_pos, g_sFloatingHelpData[i].entity, INT_TO_ENUM(eARROW_DIRECTION, i_arrow_direction[i]),
|
|
FALSE, FALSE, INT_TO_ENUM(FLOATING_HELP_SLOT_TYPE, i))
|
|
ENDIF
|
|
b_debug_reset_help[i] = FALSE
|
|
ENDIF
|
|
#ENDIF
|
|
ENDREPEAT
|
|
ENDPROC
|
|
|
|
SCRIPT
|
|
//This script needs to be usable by multiplayer
|
|
NETWORK_SET_SCRIPT_IS_SAFE_FOR_NETWORK_GAME()
|
|
|
|
#IF IS_DEBUG_BUILD
|
|
CREATE_WIDGETS()
|
|
#ENDIF
|
|
|
|
WHILE TRUE
|
|
WAIT(0)
|
|
|
|
UPDATE_FLOATING_HELP()
|
|
|
|
#IF IS_DEBUG_BUILD
|
|
UPDATE_WIDGETS()
|
|
#ENDIF
|
|
ENDWHILE
|
|
|
|
#IF IS_DEBUG_BUILD
|
|
DESTROY_WIDGETS()
|
|
#ENDIF
|
|
ENDSCRIPT |