1330 lines
48 KiB
Scheme
Executable File
1330 lines
48 KiB
Scheme
Executable File
// script_usecontext.sch
|
|
USING "commands_graphics.sch"
|
|
USING "commands_pad.sch"
|
|
USING "script_maths.sch"
|
|
USING "minigames_helpers.sch"
|
|
|
|
/**********************************************************************************
|
|
// NOTES:
|
|
As of 5/30/2012 & #523806:
|
|
- No one was using SIMPLE_USE_CONTEXTs... so I took them out. Can always go back
|
|
in the depot and rescue them. They were last present in rev.
|
|
***********************************************************************************/
|
|
|
|
CONST_INT MAX_USE_CONTEXT_LABELS 8 //4
|
|
|
|
/// PURPOSE: Flags that are common to simple and complex use contexts.
|
|
ENUM USE_CONTEXT_FLAGS
|
|
UCF_NONE = 0,
|
|
|
|
UCF_LOADED = BIT0,
|
|
UCF_CREATED = BIT1,
|
|
UCF_IS_FOR_MENU = BIT4,
|
|
|
|
UCF_VERTICAL = BIT5, // If not set, defaults to Horizontal.
|
|
UCF_HAS_TRIGGER = BIT6,
|
|
|
|
UCF_TRIGGER_OFF_LOADED = BIT7,
|
|
UCF_TRIGGER_ON_LOADED = BIT8,
|
|
|
|
UCF_ABOVE_TIMER = BIT9,
|
|
UCF_DRAW_FULLSCREEN = BIT10,
|
|
UCF_BELOW_SCORE = BIT11,
|
|
|
|
UCF_CLICKABLE = BIT12,
|
|
UCF_CHECK_CONTROL_CHANGE = BIT13
|
|
ENDENUM
|
|
|
|
/// PURPOSE: Complex use contexts can have 4 buttons per label.
|
|
/// This enum is used to index them.
|
|
ENUM COMPLEX_USE_CONTEXT_BUTTONS
|
|
CUCB_BUTTON0_1 = 0,
|
|
CUCB_BUTTON0_2,
|
|
CUCB_BUTTON0_3,
|
|
CUCB_BUTTON0_4,
|
|
|
|
CUCB_BUTTON1_1,
|
|
CUCB_BUTTON1_2,
|
|
CUCB_BUTTON1_3,
|
|
CUCB_BUTTON1_4,
|
|
|
|
CUCB_BUTTON2_1,
|
|
CUCB_BUTTON2_2,
|
|
CUCB_BUTTON2_3,
|
|
CUCB_BUTTON2_4,
|
|
|
|
CUCB_BUTTON3_1,
|
|
CUCB_BUTTON3_2,
|
|
CUCB_BUTTON3_3,
|
|
CUCB_BUTTON3_4,
|
|
|
|
CUCB_BUTTON4_1,
|
|
CUCB_BUTTON4_2,
|
|
CUCB_BUTTON4_3,
|
|
CUCB_BUTTON4_4,
|
|
|
|
CUCB_BUTTON5_1,
|
|
CUCB_BUTTON5_2,
|
|
CUCB_BUTTON5_3,
|
|
CUCB_BUTTON5_4,
|
|
|
|
CUCB_BUTTON6_1,
|
|
CUCB_BUTTON6_2,
|
|
CUCB_BUTTON6_3,
|
|
CUCB_BUTTON6_4,
|
|
|
|
CUCB_BUTTON7_1,
|
|
CUCB_BUTTON7_2,
|
|
CUCB_BUTTON7_3,
|
|
CUCB_BUTTON7_4,
|
|
|
|
CUCB_NUM_BUTTONS
|
|
ENDENUM
|
|
|
|
/// PURPOSE: When you have multiple buttons, and multiple labels that each may have multiple buttons, use this.
|
|
STRUCT COMPLEX_USE_CONTEXT
|
|
SCALEFORM_INDEX sfMov = NULL
|
|
USE_CONTEXT_FLAGS eFlags = UCF_NONE
|
|
|
|
STRING sLabel[MAX_USE_CONTEXT_LABELS]
|
|
STRING eButton[CUCB_NUM_BUTTONS]
|
|
CONTROL_ACTION eButtonInput[CUCB_NUM_BUTTONS] // Input for mouse clickable instructional buttons
|
|
STRING sPreButtonLabel[CUCB_NUM_BUTTONS]
|
|
|
|
STRING sTriggerLabel
|
|
|
|
BOOL bMouseClickable
|
|
|
|
ENDSTRUCT
|
|
|
|
/// PURPOSE:
|
|
/// Checks to see if the script scaleform UI passed in is valid or not, also checks to see if it's loaded..
|
|
/// RETURNS:
|
|
/// TRUE if valid and loaded. Also sets an internal flag that says the mov is loaded.
|
|
FUNC BOOL IS_COMPLEX_USE_CONTEXT_VALID(COMPLEX_USE_CONTEXT& useContext)
|
|
IF (useContext.sfMov <> NULL)
|
|
IF HAS_SCALEFORM_MOVIE_LOADED(useContext.sfMov)
|
|
SET_BITMASK_ENUM_AS_ENUM(useContext.eFlags, UCF_LOADED)
|
|
RETURN TRUE
|
|
ENDIF
|
|
ENDIF
|
|
|
|
RETURN FALSE
|
|
ENDFUNC
|
|
|
|
|
|
|
|
/// PURPOSE:
|
|
/// Setup a complex use context (4 labels, up to 4 buttons per label).
|
|
/// This is done in multiple steps. The first being that a single label and single context are setup. The rest are added to the
|
|
/// context by the scripter using ADD_BUTTON_TO_COMPLEX_USE_CONTEXT and
|
|
PROC INIT_COMPLEX_USE_CONTEXT(COMPLEX_USE_CONTEXT& useContext, STRING sLabel0, STRING eLabel0_Button1, BOOL bVertical = TRUE, BOOL bUseSystemTime = FALSE, BOOL bMouseClickable = FALSE, CONTROL_ACTION caInput = MAX_INPUTS)
|
|
// Request the movie, if we haven't already.
|
|
IF (useContext.sfMov = NULL)
|
|
useContext.sfMov = REQUEST_SCALEFORM_MOVIE_INSTANCE("instructional_buttons")
|
|
ENDIF
|
|
|
|
// Wipe all existing data.
|
|
INT index
|
|
REPEAT CUCB_NUM_BUTTONS index
|
|
useContext.eButton[index] = NULL
|
|
useContext.sPreButtonLabel[index] = ""
|
|
useContext.eButtonInput[index] = MAX_INPUTS
|
|
ENDREPEAT
|
|
REPEAT MAX_USE_CONTEXT_LABELS index
|
|
useContext.sLabel[index] = ""
|
|
ENDREPEAT
|
|
|
|
|
|
useContext.sLabel[0] = sLabel0
|
|
useContext.eButton[CUCB_BUTTON0_1] = eLabel0_Button1
|
|
useContext.eButtonInput[CUCB_BUTTON0_1] = caInput
|
|
useContext.eFlags = UCF_NONE
|
|
IF bVertical
|
|
SET_BITMASK_ENUM_AS_ENUM(useContext.eFlags, UCF_VERTICAL)
|
|
ENDIF
|
|
|
|
IF HAS_SCALEFORM_MOVIE_LOADED(useContext.sfMov)
|
|
SET_BITMASK_ENUM_AS_ENUM(useContext.eFlags, UCF_LOADED)
|
|
IF bUseSystemTime
|
|
SET_SCALEFORM_MOVIE_TO_USE_SYSTEM_TIME(useContext.sfMov, TRUE)
|
|
ENDIF
|
|
ENDIF
|
|
|
|
IF IS_PC_VERSION()
|
|
useContext.bMouseClickable = bMouseClickable
|
|
ENDIF
|
|
|
|
ENDPROC
|
|
|
|
/// PURPOSE:
|
|
/// Sets a complex use context as either attached, or detached from a minigame
|
|
PROC SET_COMPLEX_USE_CONTEXT_MINIGAME_ATTACHED(COMPLEX_USE_CONTEXT& useContext, BOOL bAttachToMinigame = TRUE)
|
|
IF (bAttachToMinigame)
|
|
SET_BITMASK_ENUM_AS_ENUM(useContext.eFlags, UCF_IS_FOR_MENU)
|
|
ELSE
|
|
CLEAR_BITMASK_ENUM_AS_ENUM(useContext.eFlags, UCF_IS_FOR_MENU)
|
|
ENDIF
|
|
ENDPROC
|
|
|
|
/// PURPOSE:
|
|
/// Sets a complex use context above a timer, like in darts
|
|
PROC SET_COMPLEX_USE_CONTEXT_ABOVE_TIMER(COMPLEX_USE_CONTEXT& useContext, BOOL bAboveTimer = TRUE)
|
|
IF (bAboveTimer)
|
|
SET_BITMASK_ENUM_AS_ENUM(useContext.eFlags, UCF_ABOVE_TIMER)
|
|
ELSE
|
|
CLEAR_BITMASK_ENUM_AS_ENUM(useContext.eFlags, UCF_ABOVE_TIMER)
|
|
ENDIF
|
|
ENDPROC
|
|
|
|
/// PURPOSE:
|
|
/// Sets a complex use context to draw fullscreen
|
|
PROC SET_COMPLEX_USE_CONTEXT_FULLSCREEN(COMPLEX_USE_CONTEXT& useContext, BOOL bFullScreen = TRUE)
|
|
IF (bFullScreen)
|
|
SET_BITMASK_ENUM_AS_ENUM(useContext.eFlags, UCF_DRAW_FULLSCREEN)
|
|
ELSE
|
|
CLEAR_BITMASK_ENUM_AS_ENUM(useContext.eFlags, UCF_DRAW_FULLSCREEN)
|
|
ENDIF
|
|
ENDPROC
|
|
|
|
/// PURPOSE:
|
|
/// Sets a complex use context above a timer, like in darts
|
|
PROC SET_COMPLEX_USE_CONTEXT_BELOW_SCORE(COMPLEX_USE_CONTEXT& useContext, BOOL bBelowScore = TRUE)
|
|
IF (bBelowScore)
|
|
SET_BITMASK_ENUM_AS_ENUM(useContext.eFlags, UCF_BELOW_SCORE)
|
|
ELSE
|
|
CLEAR_BITMASK_ENUM_AS_ENUM(useContext.eFlags, UCF_BELOW_SCORE)
|
|
ENDIF
|
|
ENDPROC
|
|
|
|
/// PURPOSE:
|
|
/// Adds a button icon to a complex use context. This does not add a label to the use context, but allows overwriting an input there, or adding one.
|
|
/// For example, I set up my complex context as ["Jump" A]. This function would allow mt to display ["Jump" A X Up B], if I added all of those buttons
|
|
/// in the slots.
|
|
/// This does not check to see if there's a label corresponding to where you added the button. If there's no label, this button will not draw.
|
|
PROC ADD_BUTTON_TO_COMPLEX_USE_CONTEXT(COMPLEX_USE_CONTEXT& useContext, COMPLEX_USE_CONTEXT_BUTTONS eSlotToAddIn, STRING eButtonToAdd, STRING sPreButtonText = NULL)
|
|
useContext.sPreButtonLabel[eSlotToAddIn] = sPreButtonText
|
|
useContext.eButton[eSlotToAddIn] = eButtonToAdd
|
|
ENDPROC
|
|
|
|
/// PURPOSE:
|
|
/// Adds a new label and input to a complex use context. This allows new inputs to be added.
|
|
/// PARAMS:
|
|
/// All fairly self explanatory except...
|
|
/// iSlot - The slot where the label will go. Is 0 based. So a 0 passed in means that instruction 0 and it's buttons are set.
|
|
PROC ADD_LABEL_TO_COMPLEX_USE_CONTEXT(COMPLEX_USE_CONTEXT& useContext, STRING sLabelToAdd, STRING eButtontoAdd, INT iSlot, CONTROL_ACTION caInputToAdd = MAX_INPUTS)
|
|
IF (iSlot < 0)
|
|
SCRIPT_ASSERT("ADD_LABEL_TO_COMPLEX_USE_CONTEXT: Trying to add a new label in an invalid slot (< 0)!")
|
|
EXIT
|
|
ENDIF
|
|
|
|
IF (GET_LENGTH_OF_LITERAL_STRING(sLabelToAdd) = 0)
|
|
SCRIPT_ASSERT("ADD_LABEL_TO_COMPLEX_USE_CONTEXT: Blank label passed in!")
|
|
EXIT
|
|
ENDIF
|
|
|
|
// Set the label, then set the slot 1 button, and wipe the others.
|
|
useContext.sLabel[iSlot] = sLabelToAdd
|
|
SWITCH (iSlot)
|
|
CASE 0
|
|
useContext.eButton[CUCB_BUTTON0_1] = eButtontoAdd
|
|
useContext.eButton[CUCB_BUTTON0_2] = NULL
|
|
useContext.eButton[CUCB_BUTTON0_3] = NULL
|
|
useContext.eButton[CUCB_BUTTON0_4] = NULL
|
|
|
|
useContext.eButtonInput[CUCB_BUTTON0_1] = caInputToAdd
|
|
useContext.eButtonInput[CUCB_BUTTON0_2] = MAX_INPUTS
|
|
useContext.eButtonInput[CUCB_BUTTON0_3] = MAX_INPUTS
|
|
useContext.eButtonInput[CUCB_BUTTON0_4] = MAX_INPUTS
|
|
|
|
BREAK
|
|
|
|
CASE 1
|
|
useContext.eButton[CUCB_BUTTON1_1] = eButtontoAdd
|
|
useContext.eButton[CUCB_BUTTON1_2] = NULL
|
|
useContext.eButton[CUCB_BUTTON1_3] = NULL
|
|
useContext.eButton[CUCB_BUTTON1_4] = NULL
|
|
|
|
useContext.eButtonInput[CUCB_BUTTON1_1] = caInputToAdd
|
|
useContext.eButtonInput[CUCB_BUTTON1_2] = MAX_INPUTS
|
|
useContext.eButtonInput[CUCB_BUTTON1_3] = MAX_INPUTS
|
|
useContext.eButtonInput[CUCB_BUTTON1_4] = MAX_INPUTS
|
|
|
|
BREAK
|
|
|
|
CASE 2
|
|
useContext.eButton[CUCB_BUTTON2_1] = eButtontoAdd
|
|
useContext.eButton[CUCB_BUTTON2_2] = NULL
|
|
useContext.eButton[CUCB_BUTTON2_3] = NULL
|
|
useContext.eButton[CUCB_BUTTON2_4] = NULL
|
|
|
|
|
|
useContext.eButtonInput[CUCB_BUTTON2_1] = caInputToAdd
|
|
useContext.eButtonInput[CUCB_BUTTON2_2] = MAX_INPUTS
|
|
useContext.eButtonInput[CUCB_BUTTON2_3] = MAX_INPUTS
|
|
useContext.eButtonInput[CUCB_BUTTON2_4] = MAX_INPUTS
|
|
|
|
BREAK
|
|
|
|
CASE 3
|
|
useContext.eButton[CUCB_BUTTON3_1] = eButtontoAdd
|
|
useContext.eButton[CUCB_BUTTON3_2] = NULL
|
|
useContext.eButton[CUCB_BUTTON3_3] = NULL
|
|
useContext.eButton[CUCB_BUTTON3_4] = NULL
|
|
|
|
|
|
useContext.eButtonInput[CUCB_BUTTON3_1] = caInputToAdd
|
|
useContext.eButtonInput[CUCB_BUTTON3_2] = MAX_INPUTS
|
|
useContext.eButtonInput[CUCB_BUTTON3_3] = MAX_INPUTS
|
|
useContext.eButtonInput[CUCB_BUTTON3_4] = MAX_INPUTS
|
|
|
|
BREAK
|
|
|
|
CASE 4
|
|
useContext.eButton[CUCB_BUTTON4_1] = eButtontoAdd
|
|
useContext.eButton[CUCB_BUTTON4_2] = NULL
|
|
useContext.eButton[CUCB_BUTTON4_3] = NULL
|
|
useContext.eButton[CUCB_BUTTON4_4] = NULL
|
|
|
|
|
|
useContext.eButtonInput[CUCB_BUTTON4_1] = caInputToAdd
|
|
useContext.eButtonInput[CUCB_BUTTON4_2] = MAX_INPUTS
|
|
useContext.eButtonInput[CUCB_BUTTON4_3] = MAX_INPUTS
|
|
useContext.eButtonInput[CUCB_BUTTON4_4] = MAX_INPUTS
|
|
|
|
BREAK
|
|
|
|
CASE 5
|
|
useContext.eButton[CUCB_BUTTON5_1] = eButtontoAdd
|
|
useContext.eButton[CUCB_BUTTON5_2] = NULL
|
|
useContext.eButton[CUCB_BUTTON5_3] = NULL
|
|
useContext.eButton[CUCB_BUTTON5_4] = NULL
|
|
|
|
|
|
useContext.eButtonInput[CUCB_BUTTON5_1] = caInputToAdd
|
|
useContext.eButtonInput[CUCB_BUTTON5_2] = MAX_INPUTS
|
|
useContext.eButtonInput[CUCB_BUTTON5_3] = MAX_INPUTS
|
|
useContext.eButtonInput[CUCB_BUTTON5_4] = MAX_INPUTS
|
|
|
|
BREAK
|
|
|
|
CASE 6
|
|
useContext.eButton[CUCB_BUTTON6_1] = eButtontoAdd
|
|
useContext.eButton[CUCB_BUTTON6_2] = NULL
|
|
useContext.eButton[CUCB_BUTTON6_3] = NULL
|
|
useContext.eButton[CUCB_BUTTON6_4] = NULL
|
|
|
|
|
|
useContext.eButtonInput[CUCB_BUTTON6_1] = caInputToAdd
|
|
useContext.eButtonInput[CUCB_BUTTON6_2] = MAX_INPUTS
|
|
useContext.eButtonInput[CUCB_BUTTON6_3] = MAX_INPUTS
|
|
useContext.eButtonInput[CUCB_BUTTON6_4] = MAX_INPUTS
|
|
|
|
BREAK
|
|
|
|
CASE 7
|
|
useContext.eButton[CUCB_BUTTON7_1] = eButtontoAdd
|
|
useContext.eButton[CUCB_BUTTON7_2] = NULL
|
|
useContext.eButton[CUCB_BUTTON7_3] = NULL
|
|
useContext.eButton[CUCB_BUTTON7_4] = NULL
|
|
|
|
useContext.eButtonInput[CUCB_BUTTON7_1] = caInputToAdd
|
|
useContext.eButtonInput[CUCB_BUTTON7_2] = MAX_INPUTS
|
|
useContext.eButtonInput[CUCB_BUTTON7_3] = MAX_INPUTS
|
|
useContext.eButtonInput[CUCB_BUTTON7_4] = MAX_INPUTS
|
|
|
|
BREAK
|
|
ENDSWITCH
|
|
ENDPROC
|
|
|
|
/// PURPOSE:
|
|
/// Sets up an instructional button to be clickable, and trigger the associated input when clicked.
|
|
/// PARAMS:
|
|
/// bMouseClickable - True if clickable
|
|
/// caInput - The input that gets triggered by the click
|
|
PROC ADD_USE_CONTEXT_MOUSE_CLICKABLE_PARAMS( BOOL bMouseClickable, CONTROL_ACTION caInput )
|
|
|
|
IF IS_PC_VERSION()
|
|
|
|
IF bMouseClickable
|
|
|
|
IF caInput != MAX_INPUTS
|
|
SCALEFORM_MOVIE_METHOD_ADD_PARAM_BOOL(TRUE) // CLICKABLE
|
|
ELSE
|
|
SCALEFORM_MOVIE_METHOD_ADD_PARAM_BOOL(FALSE) // NOT CLICKABLE
|
|
ENDIF
|
|
|
|
SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(ENUM_TO_INT(caInput))
|
|
|
|
ENDIF
|
|
|
|
ENDIF
|
|
|
|
ENDPROC
|
|
|
|
/// PURPOSE:
|
|
/// If you want a trigger on your use context, use this.
|
|
/// A full menu will come up if the Trigger button is held down.
|
|
//PROC ADD_TRIGGER_TO_COMPLEX_USE_CONTEXT(COMPLEX_USE_CONTEXT& useContext, STRING sTriggerLabel, TEXT_LABEL_63 eTriggerButton)
|
|
// IF (GET_LENGTH_OF_LITERAL_STRING(sTriggerLabel) = 0)
|
|
// SCRIPT_ASSERT("ADD_TRIGGER_TO_COMPLEX_USE_CONTEXT: Blank trigger label passed in!")
|
|
// EXIT
|
|
// ENDIF
|
|
//
|
|
// useContext.sTriggerLabel = sTriggerLabel
|
|
// useContext.eTriggerButton = eTriggerButton
|
|
// SET_BITMASK_ENUM_AS_ENUM(useContext.eFlags, UCF_HAS_TRIGGER)
|
|
//ENDPROC
|
|
|
|
/// PURPOSE:
|
|
/// Updates a complex use context.
|
|
/// Can update use contexts with or without trigger.
|
|
/// PARAMS:
|
|
/// useContext -
|
|
/// fClearSpace -
|
|
/// eDrawOrder -
|
|
/// bIgnoreFade -
|
|
/// bJPButtonSwitch - Determines whether the buttons change for Japanese controls or not, TRUE is used for frontend menus, FALSE for in-game actions
|
|
/// RETURNS:
|
|
/// The button in the complex use context that was pressed (does not return the trigger button.)
|
|
PROC UPDATE_COMPLEX_USE_CONTEXT(COMPLEX_USE_CONTEXT& useContext, FLOAT fClearSpace = 200.0, GFX_DRAW_ORDER eDrawOrder = GFX_ORDER_BEFORE_HUD, BOOL bIgnoreFade = FALSE, BOOL bJPButtonSwitch = TRUE, FLOAT fWidth = 1.0)
|
|
IF IS_SCREEN_FADING_OUT()
|
|
OR IS_SCREEN_FADING_IN()
|
|
OR IS_SCREEN_FADED_OUT()
|
|
OR IS_FRONTEND_FADING()
|
|
IF NOT bIgnoreFade
|
|
PRINTLN("Some kind of fade happening...")
|
|
EXIT
|
|
ENDIF
|
|
ENDIF
|
|
|
|
// Make sure we're valid.
|
|
IF NOT IS_COMPLEX_USE_CONTEXT_VALID(useContext)
|
|
PRINTLN("Movie still not valid...")
|
|
EXIT
|
|
ENDIF
|
|
|
|
//hide the loading icon if we're drawing
|
|
HIDE_LOADING_ON_FADE_THIS_FRAME()
|
|
|
|
// Align it to a menu, if need be. Draw it.
|
|
SET_SCRIPT_GFX_DRAW_ORDER(eDrawOrder)
|
|
// IF IS_BITMASK_ENUM_AS_ENUM_SET(useContext.eFlags, UCF_IS_FOR_MENU)
|
|
// DRAW_SCALEFORM_MOVIE(useContext.sfMov, 0.34921875,0.467,1.0,1.0,255,255,255,0)
|
|
// ELIF IS_BITMASK_ENUM_AS_ENUM_SET(useContext.eFlags, UCF_ABOVE_TIMER)
|
|
// DRAW_SCALEFORM_MOVIE(useContext.sfMov, 0.5,0.425,1.0,1.0,255,255,255,0)
|
|
// ELIF IS_BITMASK_ENUM_AS_ENUM_SET(useContext.eFlags, UCF_DRAW_FULLSCREEN)
|
|
// DRAW_SCALEFORM_MOVIE_FULLSCREEN(useContext.sfMov, 255,255,255,0)
|
|
// ELIF IS_BITMASK_ENUM_AS_ENUM_SET(useContext.eFlags, UCF_BELOW_SCORE)
|
|
// SET_SCRIPT_GFX_ALIGN(UI_ALIGN_RIGHT, UI_ALIGN_BOTTOM)
|
|
// DRAW_SCALEFORM_MOVIE(useContext.sfMov, 0.5,0.563,1.0,1.0,255,255,255,0)
|
|
// RESET_SCRIPT_GFX_ALIGN()
|
|
// ELSE
|
|
// ENDIF
|
|
|
|
// // If this complex use context has a trigger, look for that.
|
|
// IF IS_BITMASK_ENUM_AS_ENUM_SET(useContext.eFlags, UCF_HAS_TRIGGER)
|
|
// // Get our pad button from the trigger button.
|
|
// CONTROL_ACTION eTrigger = TRANSLATE_INSTR_BUTTON_TO_CONTROL_ACTION(useContext.eTriggerButton)
|
|
//
|
|
// IF NOT IS_CONTROL_PRESSED(FRONTEND_CONTROL, eTrigger)
|
|
// // We're not pressing the trigger button.
|
|
// IF NOT IS_BITMASK_ENUM_AS_ENUM_SET(useContext.eFlags, UCF_TRIGGER_OFF_LOADED)
|
|
// // Have not loaded the trigger up data. Load it.
|
|
// BEGIN_SCALEFORM_MOVIE_METHOD(useContext.sfMov, "SET_CLEAR_SPACE")
|
|
// SCALEFORM_MOVIE_METHOD_ADD_PARAM_FLOAT(200.0)
|
|
// END_SCALEFORM_MOVIE_METHOD()
|
|
//
|
|
// BEGIN_SCALEFORM_MOVIE_METHOD(useContext.sfMov, "SET_DATA_SLOT_EMPTY")
|
|
// END_SCALEFORM_MOVIE_METHOD()
|
|
//
|
|
// // Load the trigger button to draw.
|
|
// BEGIN_SCALEFORM_MOVIE_METHOD(useContext.sfMov, "SET_DATA_SLOT")
|
|
// SCALEFORM_MOVIE_METHOD_ADD_PARAM_FLOAT(0)
|
|
// SCALEFORM_MOVIE_METHOD_ADD_PARAM_FLOAT(TO_FLOAT(ENUM_TO_INT(useContext.eTriggerButton)))
|
|
// SCALEFORM_MOVIE_METHOD_ADD_PARAM_STRING(useContext.sTriggerLabel)
|
|
// END_SCALEFORM_MOVIE_METHOD()
|
|
//
|
|
// FLOAT fResult = PICK_FLOAT(bJPButtonSwitch, PICK_FLOAT(IS_BITMASK_ENUM_AS_ENUM_SET(useContext.eFlags, UCF_VERTICAL), 1.0, 0.0), -1.0)
|
|
// BEGIN_SCALEFORM_MOVIE_METHOD(useContext.sfMov, "DRAW_INSTRUCTIONAL_BUTTONS")
|
|
// SCALEFORM_MOVIE_METHOD_ADD_PARAM_FLOAT(fResult)
|
|
// END_SCALEFORM_MOVIE_METHOD()
|
|
//
|
|
// BEGIN_SCALEFORM_MOVIE_METHOD(useContext.sfMov, "SET_BACKGROUND_COLOUR")
|
|
// SCALEFORM_MOVIE_METHOD_ADD_PARAM_FLOAT(0)
|
|
// SCALEFORM_MOVIE_METHOD_ADD_PARAM_FLOAT(0)
|
|
// SCALEFORM_MOVIE_METHOD_ADD_PARAM_FLOAT(0)
|
|
// SCALEFORM_MOVIE_METHOD_ADD_PARAM_FLOAT(80)
|
|
// END_SCALEFORM_MOVIE_METHOD()
|
|
//
|
|
// // Flag us as loaded.
|
|
// SET_BITMASK_ENUM_AS_ENUM(useContext.eFlags, UCF_TRIGGER_OFF_LOADED)
|
|
// CLEAR_BITMASK_ENUM_AS_ENUM(useContext.eFlags, UCF_TRIGGER_ON_LOADED)
|
|
// ENDIF
|
|
// ELSE
|
|
// // We're pressing the trigger button.
|
|
// IF NOT IS_BITMASK_ENUM_AS_ENUM_SET(useContext.eFlags, UCF_TRIGGER_ON_LOADED)
|
|
// PRINTLN("SETUP!!!!!!!")
|
|
//
|
|
// BEGIN_SCALEFORM_MOVIE_METHOD(useContext.sfMov, "SET_CLEAR_SPACE")
|
|
// SCALEFORM_MOVIE_METHOD_ADD_PARAM_FLOAT(200.0)
|
|
// END_SCALEFORM_MOVIE_METHOD()
|
|
//
|
|
// BEGIN_SCALEFORM_MOVIE_METHOD(useContext.sfMov, "SET_DATA_SLOT_EMPTY")
|
|
// END_SCALEFORM_MOVIE_METHOD()
|
|
//
|
|
// // Load all button presses to draw.
|
|
// FLOAT fSlot = 0.0
|
|
// INT index
|
|
// COMPLEX_USE_CONTEXT_BUTTONS eButtonSlotBase
|
|
// REPEAT MAX_USE_CONTEXT_LABELS index
|
|
// IF NOT IS_STRING_EMPTY(useContext.sLabel[index])
|
|
// eButtonSlotBase = INT_TO_ENUM(COMPLEX_USE_CONTEXT_BUTTONS, index * 4)
|
|
//
|
|
// // Have a button with a label, we need to add it.
|
|
// BEGIN_SCALEFORM_MOVIE_METHOD(useContext.sfMov, "SET_DATA_SLOT")
|
|
// SCALEFORM_MOVIE_METHOD_ADD_PARAM_FLOAT(fSlot)
|
|
// SCALEFORM_MOVIE_METHOD_ADD_PARAM_FLOAT(TO_FLOAT(ENUM_TO_INT(useContext.eButton[eButtonSlotBase])))
|
|
// IF (ENUM_TO_INT(useContext.eButton[ENUM_TO_INT(eButtonSlotBase)+1]) != -1)
|
|
// SCALEFORM_MOVIE_METHOD_ADD_PARAM_FLOAT(TO_FLOAT(ENUM_TO_INT(useContext.eButton[ENUM_TO_INT(eButtonSlotBase)+1])))
|
|
// ENDIF
|
|
// IF (ENUM_TO_INT(useContext.eButton[ENUM_TO_INT(eButtonSlotBase)+2]) != -1)
|
|
// SCALEFORM_MOVIE_METHOD_ADD_PARAM_FLOAT(TO_FLOAT(ENUM_TO_INT(useContext.eButton[ENUM_TO_INT(eButtonSlotBase)+2])))
|
|
// ENDIF
|
|
// IF (ENUM_TO_INT(useContext.eButton[ENUM_TO_INT(eButtonSlotBase)+3]) != -1)
|
|
// SCALEFORM_MOVIE_METHOD_ADD_PARAM_FLOAT(TO_FLOAT(ENUM_TO_INT(useContext.eButton[ENUM_TO_INT(eButtonSlotBase)+3])))
|
|
// ENDIF
|
|
//
|
|
// SCALEFORM_MOVIE_METHOD_ADD_PARAM_STRING(useContext.sLabel[index])
|
|
// END_SCALEFORM_MOVIE_METHOD()
|
|
//
|
|
// fSlot += 1
|
|
// ENDIF
|
|
// ENDREPEAT
|
|
//
|
|
// FLOAT fResult = PICK_FLOAT(bJPButtonSwitch, PICK_FLOAT(IS_BITMASK_ENUM_AS_ENUM_SET(useContext.eFlags, UCF_VERTICAL), 1.0, 0.0), -1.0)
|
|
// BEGIN_SCALEFORM_MOVIE_METHOD(useContext.sfMov, "DRAW_INSTRUCTIONAL_BUTTONS")
|
|
// SCALEFORM_MOVIE_METHOD_ADD_PARAM_FLOAT(fResult)
|
|
// END_SCALEFORM_MOVIE_METHOD()
|
|
//
|
|
// BEGIN_SCALEFORM_MOVIE_METHOD(useContext.sfMov, "SET_BACKGROUND_COLOUR")
|
|
// SCALEFORM_MOVIE_METHOD_ADD_PARAM_FLOAT(0)
|
|
// SCALEFORM_MOVIE_METHOD_ADD_PARAM_FLOAT(0)
|
|
// SCALEFORM_MOVIE_METHOD_ADD_PARAM_FLOAT(0)
|
|
// SCALEFORM_MOVIE_METHOD_ADD_PARAM_FLOAT(80)
|
|
// END_SCALEFORM_MOVIE_METHOD()
|
|
//
|
|
// // Flag us as loaded.
|
|
// SET_BITMASK_ENUM_AS_ENUM(useContext.eFlags, UCF_TRIGGER_ON_LOADED)
|
|
// CLEAR_BITMASK_ENUM_AS_ENUM(useContext.eFlags, UCF_TRIGGER_OFF_LOADED)
|
|
// ENDIF
|
|
// ENDIF
|
|
//
|
|
// ELSE
|
|
|
|
|
|
// This is a use context without a trigger. Load it once, and move on.
|
|
IF NOT IS_BITMASK_ENUM_AS_ENUM_SET(useContext.eFlags, UCF_TRIGGER_ON_LOADED)
|
|
PRINTLN("SETUP 2!!!!")
|
|
|
|
BEGIN_SCALEFORM_MOVIE_METHOD(useContext.sfMov, "SET_CLEAR_SPACE")
|
|
SCALEFORM_MOVIE_METHOD_ADD_PARAM_FLOAT(fClearSpace)
|
|
END_SCALEFORM_MOVIE_METHOD()
|
|
|
|
BEGIN_SCALEFORM_MOVIE_METHOD(useContext.sfMov, "SET_MAX_WIDTH")
|
|
SCALEFORM_MOVIE_METHOD_ADD_PARAM_FLOAT(fWidth)
|
|
END_SCALEFORM_MOVIE_METHOD()
|
|
|
|
BEGIN_SCALEFORM_MOVIE_METHOD(useContext.sfMov, "SET_DATA_SLOT_EMPTY")
|
|
END_SCALEFORM_MOVIE_METHOD()
|
|
|
|
IF IS_PC_VERSION()
|
|
BEGIN_SCALEFORM_MOVIE_METHOD(useContext.sfMov, "TOGGLE_MOUSE_BUTTONS")
|
|
SCALEFORM_MOVIE_METHOD_ADD_PARAM_BOOL(useContext.bMouseClickable)
|
|
END_SCALEFORM_MOVIE_METHOD()
|
|
|
|
ENDIF
|
|
|
|
FLOAT fSlot = 0.0
|
|
INT index
|
|
COMPLEX_USE_CONTEXT_BUTTONS eButtonSlotBase
|
|
REPEAT MAX_USE_CONTEXT_LABELS index
|
|
eButtonSlotBase = INT_TO_ENUM(COMPLEX_USE_CONTEXT_BUTTONS, index * 4)
|
|
|
|
IF NOT IS_STRING_NULL_OR_EMPTY(useContext.eButton[ENUM_TO_INT(eButtonSlotBase)]) //button was set to somthing
|
|
|
|
// Have a button with a label, we need to add it.
|
|
BEGIN_SCALEFORM_MOVIE_METHOD(useContext.sfMov, "SET_DATA_SLOT")
|
|
SCALEFORM_MOVIE_METHOD_ADD_PARAM_FLOAT(fSlot)
|
|
|
|
IF NOT IS_STRING_NULL_OR_EMPTY(useContext.sPreButtonLabel[eButtonSlotBase])
|
|
PRINTLN("Adding pre button text to slot ", eButtonSlotBase, " text ", useContext.sPreButtonLabel[eButtonSlotBase])
|
|
SCALEFORM_MOVIE_METHOD_ADD_PARAM_STRING(useContext.sPreButtonLabel[eButtonSlotBase])
|
|
ENDIF
|
|
|
|
IF NOT IS_STRING_NULL_OR_EMPTY(useContext.eButton[eButtonSlotBase])
|
|
PRINTLN("Adding instruct button text to slot ", eButtonSlotBase, " number ", useContext.eButton[eButtonSlotBase])
|
|
SCALEFORM_MOVIE_METHOD_ADD_PARAM_INSTRUCTIONAL_BUTTONS(useContext.eButton[eButtonSlotBase])
|
|
ENDIF
|
|
|
|
IF NOT IS_STRING_NULL_OR_EMPTY(useContext.sPreButtonLabel[ENUM_TO_INT(eButtonSlotBase)+1])
|
|
PRINTLN("Adding pre button text to slot ", eButtonSlotBase, " text ", useContext.sPreButtonLabel[ENUM_TO_INT(eButtonSlotBase)+1])
|
|
SCALEFORM_MOVIE_METHOD_ADD_PARAM_STRING(useContext.sPreButtonLabel[ENUM_TO_INT(eButtonSlotBase)+1])
|
|
ENDIF
|
|
|
|
IF NOT IS_STRING_NULL_OR_EMPTY(useContext.eButton[ENUM_TO_INT(eButtonSlotBase)+1])
|
|
PRINTLN("Adding instruct button text to slot ", eButtonSlotBase, " number ", useContext.eButton[eButtonSlotBase])
|
|
SCALEFORM_MOVIE_METHOD_ADD_PARAM_INSTRUCTIONAL_BUTTONS(useContext.eButton[ENUM_TO_INT(eButtonSlotBase)+1])
|
|
ENDIF
|
|
|
|
IF NOT IS_STRING_NULL_OR_EMPTY(useContext.sPreButtonLabel[ENUM_TO_INT(eButtonSlotBase)+2])
|
|
PRINTLN("Adding pre button text to slot ", eButtonSlotBase, " text ", useContext.sPreButtonLabel[ENUM_TO_INT(eButtonSlotBase)+2])
|
|
SCALEFORM_MOVIE_METHOD_ADD_PARAM_STRING(useContext.sPreButtonLabel[ENUM_TO_INT(eButtonSlotBase)+2])
|
|
ENDIF
|
|
|
|
IF NOT IS_STRING_NULL_OR_EMPTY(useContext.eButton[ENUM_TO_INT(eButtonSlotBase)+2])
|
|
PRINTLN("Adding instruct button text to slot ", eButtonSlotBase, " number ", useContext.eButton[eButtonSlotBase])
|
|
SCALEFORM_MOVIE_METHOD_ADD_PARAM_INSTRUCTIONAL_BUTTONS(useContext.eButton[ENUM_TO_INT(eButtonSlotBase)+2])
|
|
ENDIF
|
|
|
|
IF NOT IS_STRING_NULL_OR_EMPTY(useContext.sPreButtonLabel[ENUM_TO_INT(eButtonSlotBase)+3])
|
|
PRINTLN("Adding pre button text to slot ", eButtonSlotBase, " text ", useContext.sPreButtonLabel[ENUM_TO_INT(eButtonSlotBase)+3])
|
|
SCALEFORM_MOVIE_METHOD_ADD_PARAM_STRING(useContext.sPreButtonLabel[ENUM_TO_INT(eButtonSlotBase)+3])
|
|
ENDIF
|
|
IF NOT IS_STRING_NULL_OR_EMPTY(useContext.eButton[ENUM_TO_INT(eButtonSlotBase)+3])
|
|
PRINTLN("Adding instruct button text to slot ", eButtonSlotBase, " number ", useContext.eButton[eButtonSlotBase])
|
|
SCALEFORM_MOVIE_METHOD_ADD_PARAM_INSTRUCTIONAL_BUTTONS(useContext.eButton[ENUM_TO_INT(eButtonSlotBase)+3])
|
|
ENDIF
|
|
|
|
IF NOT IS_STRING_EMPTY(useContext.sLabel[index])
|
|
PRINTLN("Adding label text to slot ", eButtonSlotBase, ": ", useContext.sLabel[index])
|
|
SCALEFORM_MOVIE_METHOD_ADD_PARAM_STRING(useContext.sLabel[index])
|
|
ENDIF
|
|
|
|
ADD_USE_CONTEXT_MOUSE_CLICKABLE_PARAMS( useContext.bMouseClickable, useContext.eButtonInput[eButtonSlotBase])
|
|
|
|
END_SCALEFORM_MOVIE_METHOD()
|
|
|
|
fSlot += 1
|
|
ENDIF
|
|
ENDREPEAT
|
|
|
|
FLOAT fResult = PICK_FLOAT(bJPButtonSwitch, PICK_FLOAT(IS_BITMASK_ENUM_AS_ENUM_SET(useContext.eFlags, UCF_VERTICAL), 1.0, 0.0), -1.0)
|
|
BEGIN_SCALEFORM_MOVIE_METHOD(useContext.sfMov, "DRAW_INSTRUCTIONAL_BUTTONS")
|
|
SCALEFORM_MOVIE_METHOD_ADD_PARAM_FLOAT(fResult)
|
|
END_SCALEFORM_MOVIE_METHOD()
|
|
|
|
BEGIN_SCALEFORM_MOVIE_METHOD(useContext.sfMov, "SET_BACKGROUND_COLOUR")
|
|
SCALEFORM_MOVIE_METHOD_ADD_PARAM_FLOAT(0)
|
|
SCALEFORM_MOVIE_METHOD_ADD_PARAM_FLOAT(0)
|
|
SCALEFORM_MOVIE_METHOD_ADD_PARAM_FLOAT(0)
|
|
SCALEFORM_MOVIE_METHOD_ADD_PARAM_FLOAT(80)
|
|
END_SCALEFORM_MOVIE_METHOD()
|
|
|
|
// Flag us as loaded.
|
|
SET_BITMASK_ENUM_AS_ENUM(useContext.eFlags, UCF_TRIGGER_ON_LOADED)
|
|
CLEAR_BITMASK_ENUM_AS_ENUM(useContext.eFlags, UCF_TRIGGER_OFF_LOADED)
|
|
ENDIF
|
|
DRAW_SCALEFORM_MOVIE_FULLSCREEN(useContext.sfMov, 255,255,255,0)
|
|
//ENDIF
|
|
|
|
// // Check to see if any of our buttons were pressed.
|
|
// INT index
|
|
// REPEAT CUCB_NUM_BUTTONS index
|
|
// //IF NOT IS_STRING_EMPTY(useContext.sLabel[index])
|
|
// CONTROL_ACTION eButton = TRANSLATE_INSTR_BUTTON_TO_CONTROL_ACTION(useContext.eButton[index])
|
|
// IF (ENUM_TO_INT(eButton) != -1)
|
|
// IF IS_CONTROL_JUST_PRESSED(FRONTEND_CONTROL, eButton)
|
|
// RETURN useContext.eButton[index]
|
|
// ENDIF
|
|
// ENDIF
|
|
// //ENDIF
|
|
// ENDREPEAT
|
|
|
|
// RETURN NULL
|
|
ENDPROC
|
|
|
|
/// PURPOSE:
|
|
/// Cleans the simple use context.
|
|
PROC CLEANUP_COMPLEX_USE_CONTEXT(COMPLEX_USE_CONTEXT& useContext)
|
|
|
|
|
|
IF (useContext.sfMov <> NULL)
|
|
|
|
IF IS_PC_VERSION()
|
|
|
|
BEGIN_SCALEFORM_MOVIE_METHOD(useContext.sfMov, "TOGGLE_MOUSE_BUTTONS")
|
|
SCALEFORM_MOVIE_METHOD_ADD_PARAM_BOOL(FALSE)
|
|
END_SCALEFORM_MOVIE_METHOD()
|
|
|
|
useContext.bMouseClickable = FALSE
|
|
|
|
ENDIF
|
|
|
|
|
|
SET_SCALEFORM_MOVIE_AS_NO_LONGER_NEEDED(useContext.sfMov)
|
|
useContext.sfMov = NULL
|
|
ENDIF
|
|
|
|
useContext.sTriggerLabel = ""
|
|
//useContext.eTriggerButton = ICON_UP
|
|
useContext.eFlags = UCF_NONE
|
|
|
|
INT index
|
|
REPEAT CUCB_NUM_BUTTONS index
|
|
useContext.eButton[index] = NULL
|
|
useContext.eButtonInput[index] = MAX_INPUTS
|
|
ENDREPEAT
|
|
|
|
REPEAT MAX_USE_CONTEXT_LABELS index
|
|
useContext.sLabel[index] = ""
|
|
ENDREPEAT
|
|
ENDPROC
|
|
|
|
FUNC BOOL IS_BUTTON_IN_COMPLEX_USE_CONTEXT(COMPLEX_USE_CONTEXT& useContext, STRING eButton)
|
|
INT idx
|
|
REPEAT CUCB_NUM_BUTTONS idx
|
|
IF NOT IS_STRING_NULL(useContext.eButton[idx])
|
|
IF ARE_STRINGS_EQUAL(useContext.eButton[idx], eButton)
|
|
RETURN TRUE
|
|
ENDIF
|
|
ENDIF
|
|
ENDREPEAT
|
|
RETURN FALSE
|
|
ENDFUNC
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/// PURPOSE: These do most of what COMPLEX_USE_CONTEXTs do (The only omission is that you can't put a pre-label on the inputs)
|
|
/// It can do things that COMPLEX_USE_CONTEXTs can't, such as automatically refresh the decals when the control method changes.
|
|
/// The way the movie loads, way the flags work, etc is the same as COMPLEX_USE_CONTEXTS, so you should be able to swap them out fairly easily.
|
|
/// The main difference in the interface, is that the init function doesn't also setup the first button, it just inits the system.
|
|
/// Use the ADD INPUT (or ADD GROUP) functions to add buttons, then call ADD INPUT CONCATENATED (or ADD GROUP CONCATENATED) functions immediately afterwards if you want multiple inputs per button.
|
|
///
|
|
/// New feature: You can now make a button pad-only or keyboard-only.
|
|
/// So if your script checks for different inputs depending on which control method is used - Add buttons for both versions, using the relevant display condition for each one.
|
|
/// Note - this affects the entire button, so any concatenated inputs will have the condition applied to them too.
|
|
/// Also note - this reduces the max amount of buttons, as you're having to double up on those ones.
|
|
|
|
ENUM UC_XO_SWAP_PARAM
|
|
UC_DONT_ALLOW_XO_SWAP = 0,
|
|
UC_ALLOW_XO_SWAP
|
|
ENDENUM
|
|
|
|
ENUM UC_MOUSE_CLICK_PARAM
|
|
UC_DONT_ALLOW_MOUSE_CLICK = 0,
|
|
UC_ALLOW_MOUSE_CLICK
|
|
ENDENUM
|
|
|
|
ENUM UC_CONDITION_PARAM
|
|
UC_CONDITION_ALWAYS_DISPLAY = 0,
|
|
UC_CONDITION_DISPLAY_FOR_KB_ONLY,
|
|
UC_CONDITION_DISPLAY_FOR_PAD_ONLY
|
|
ENDENUM
|
|
|
|
CONST_INT MAX_SIMPLE_USE_CONTEXT_BUTTONS 8
|
|
CONST_INT MAX_SIMPLE_USE_CONTEXT_CONTROLS 4
|
|
|
|
STRUCT SIMPLE_USE_CONTEXT_CONTROL
|
|
CONTROL_TYPE eType
|
|
INT iAction
|
|
ENDSTRUCT
|
|
|
|
STRUCT SIMPLE_USE_CONTEXT_BUTTON
|
|
STRING sLabel
|
|
BOOL bIsClickable
|
|
UC_CONDITION_PARAM eCondition
|
|
|
|
SIMPLE_USE_CONTEXT_CONTROL mControls[MAX_SIMPLE_USE_CONTEXT_CONTROLS]
|
|
INT iControlGroupBits
|
|
INT iControlSwapBits
|
|
INT iControlCount
|
|
ENDSTRUCT
|
|
|
|
STRUCT SIMPLE_USE_CONTEXT
|
|
SCALEFORM_INDEX sfMov = NULL
|
|
USE_CONTEXT_FLAGS eFlags = UCF_NONE
|
|
|
|
SIMPLE_USE_CONTEXT_BUTTON mButtons[MAX_SIMPLE_USE_CONTEXT_BUTTONS]
|
|
INT iButtonCount
|
|
ENDSTRUCT
|
|
|
|
|
|
|
|
/// INIT_SIMPLE_USE_CONTEXT()
|
|
///
|
|
/// Clears any previously added buttons, and prepares use context for buttons to be added.
|
|
///
|
|
/// bIsVertical - Display the input vertically or horizontally in a bar.
|
|
/// bUseSystemTime - When the game is paused, system time continues to run.
|
|
/// bAllowMouseClick - Overall enable/disable for mouse clicking on instructional buttons [note, you must also enable for each added input too].
|
|
/// bAllowAutoRefresh - Allows the system to recalculate and redraw the sprites, if the control scheme changes between pad / keyboard.
|
|
PROC INIT_SIMPLE_USE_CONTEXT(SIMPLE_USE_CONTEXT& system, BOOL bIsVertical = TRUE, BOOL bUseSystemTime = FALSE, BOOL bAllowMouseClick = FALSE, BOOL bAllowAutoRefresh = FALSE)
|
|
|
|
// Request the movie, if we haven't already
|
|
IF (system.sfMov = NULL)
|
|
system.sfMov = REQUEST_SCALEFORM_MOVIE_INSTANCE("instructional_buttons")
|
|
ENDIF
|
|
|
|
// Clear data
|
|
system.eFlags = UCF_NONE
|
|
system.iButtonCount = 0
|
|
|
|
// Set flags
|
|
IF bIsVertical
|
|
SET_BITMASK_ENUM_AS_ENUM(system.eFlags, UCF_VERTICAL)
|
|
ENDIF
|
|
|
|
IF HAS_SCALEFORM_MOVIE_LOADED(system.sfMov)
|
|
SET_BITMASK_ENUM_AS_ENUM(system.eFlags, UCF_LOADED)
|
|
IF bUseSystemTime
|
|
SET_SCALEFORM_MOVIE_TO_USE_SYSTEM_TIME(system.sfMov, TRUE)
|
|
ENDIF
|
|
ENDIF
|
|
|
|
IF IS_PC_VERSION()
|
|
IF bAllowMouseClick
|
|
SET_BITMASK_ENUM_AS_ENUM(system.eFlags, UCF_CLICKABLE)
|
|
ENDIF
|
|
ENDIF
|
|
|
|
IF bAllowAutoRefresh
|
|
SET_BITMASK_ENUM_AS_ENUM(system.eFlags, UCF_CHECK_CONTROL_CHANGE)
|
|
ENDIF
|
|
|
|
ENDPROC
|
|
|
|
/// ADD_SIMPLE_USE_CONTEXT_INPUT()
|
|
///
|
|
/// Adds a label and an input sprite to the use context (instructional button) bar.
|
|
/// Returns true if it manages to add it.
|
|
///
|
|
/// You can add a maximum of 8 labels.
|
|
///
|
|
/// system - The use context struct
|
|
/// sLabel - The text string for the prompt
|
|
/// eControlType - Frontend or player control
|
|
/// eControlAction - The input to display
|
|
/// eAllowXOSwap - Allow XO swapping when choosing the sprite [japanese control schemes will often swap these]
|
|
/// eAllowMouseClick - Allow the player to click on the icon in the instructional button bar [note you must also enable mouse clicking when calling INIT_SIMPLE_USE_CONTEXT()]
|
|
FUNC BOOL ADD_SIMPLE_USE_CONTEXT_INPUT(SIMPLE_USE_CONTEXT& system, STRING sLabel, CONTROL_TYPE eControlType, CONTROL_ACTION eControlAction, UC_XO_SWAP_PARAM eAllowXOSwap = UC_ALLOW_XO_SWAP, UC_MOUSE_CLICK_PARAM eAllowMouseClick = UC_ALLOW_MOUSE_CLICK, UC_CONDITION_PARAM eCondition = UC_CONDITION_ALWAYS_DISPLAY)
|
|
|
|
IF system.sfMov = NULL
|
|
SCRIPT_ASSERT("ADD_SIMPLE_USE_CONTEXT_INPUT() - System not init")
|
|
RETURN FALSE
|
|
ENDIF
|
|
|
|
BOOL bIsClickable = FALSE
|
|
IF eAllowMouseClick = UC_ALLOW_MOUSE_CLICK
|
|
bIsClickable = TRUE
|
|
ENDIF
|
|
|
|
INT iButtonID = system.iButtonCount
|
|
IF iButtonID < MAX_SIMPLE_USE_CONTEXT_BUTTONS
|
|
|
|
// Init button data
|
|
system.mButtons[iButtonID].sLabel = sLabel
|
|
system.mButtons[iButtonID].bIsClickable = bIsClickable
|
|
system.mButtons[iButtonID].eCondition = eCondition
|
|
|
|
system.mButtons[iButtonID].iControlGroupBits = 0
|
|
system.mButtons[iButtonID].iControlSwapBits = 0
|
|
system.mButtons[iButtonID].iControlCount = 0
|
|
|
|
// Add button's control[0] data
|
|
system.mButtons[iButtonID].mControls[0].eType = eControlType
|
|
system.mButtons[iButtonID].mControls[0].iAction = ENUM_TO_INT(eControlAction)
|
|
|
|
IF eAllowXOSwap = UC_ALLOW_XO_SWAP
|
|
SET_BIT(system.mButtons[iButtonID].iControlSwapBits, 0)
|
|
ENDIF
|
|
|
|
// Update counts
|
|
system.mButtons[iButtonID].iControlCount++
|
|
system.iButtonCount++
|
|
RETURN TRUE
|
|
|
|
ENDIF
|
|
|
|
SCRIPT_ASSERT("ADD_SIMPLE_USE_CONTEXT_INPUT() - Out of button slots")
|
|
RETURN FALSE
|
|
|
|
ENDFUNC
|
|
|
|
/// ADD_SIMPLE_USE_CONTEXT_GROUP()
|
|
///
|
|
/// Adds a label and a group input sprite to the use context (instructional button) bar.
|
|
/// Returns true if it manages to add it.
|
|
///
|
|
/// You can add a maximum of 8 labels.
|
|
///
|
|
/// system - The use context struct
|
|
/// sLabel - The text string for the prompt
|
|
/// eControlType - Frontend or player control
|
|
/// eControlActionGroup - The input to display
|
|
/// eAllowXOSwap - Allow XO swapping when choosing the sprite [japanese control schemes will often swap these]
|
|
FUNC BOOL ADD_SIMPLE_USE_CONTEXT_GROUP(SIMPLE_USE_CONTEXT& system, STRING sLabel, CONTROL_TYPE eControlType, CONTROL_ACTION_GROUP eControlActionGroup, UC_XO_SWAP_PARAM eAllowXOSwap = UC_ALLOW_XO_SWAP, UC_CONDITION_PARAM eCondition = UC_CONDITION_ALWAYS_DISPLAY)
|
|
|
|
IF system.sfMov = NULL
|
|
SCRIPT_ASSERT("ADD_SIMPLE_USE_CONTEXT_GROUP() - System not init")
|
|
RETURN FALSE
|
|
ENDIF
|
|
|
|
INT iButtonID = system.iButtonCount
|
|
IF iButtonID < MAX_SIMPLE_USE_CONTEXT_BUTTONS
|
|
|
|
// Init button data
|
|
system.mButtons[iButtonID].sLabel = sLabel
|
|
system.mButtons[iButtonID].bIsClickable = FALSE // (Groups cannot be clickable)
|
|
system.mButtons[iButtonID].eCondition = eCondition
|
|
|
|
system.mButtons[iButtonID].iControlGroupBits = 0
|
|
system.mButtons[iButtonID].iControlSwapBits = 0
|
|
system.mButtons[iButtonID].iControlCount = 0
|
|
|
|
// Add button's control[0] data
|
|
system.mButtons[iButtonID].mControls[0].eType = eControlType
|
|
system.mButtons[iButtonID].mControls[0].iAction = ENUM_TO_INT(eControlActionGroup)
|
|
|
|
SET_BIT(system.mButtons[iButtonID].iControlGroupBits, 0)
|
|
|
|
IF eAllowXOSwap = UC_ALLOW_XO_SWAP
|
|
SET_BIT(system.mButtons[iButtonID].iControlSwapBits, 0)
|
|
ENDIF
|
|
|
|
// Update counts
|
|
system.mButtons[iButtonID].iControlCount++
|
|
system.iButtonCount++
|
|
RETURN TRUE
|
|
|
|
ENDIF
|
|
|
|
SCRIPT_ASSERT("ADD_SIMPLE_USE_CONTEXT_GROUP() - Out of button slots")
|
|
RETURN FALSE
|
|
|
|
ENDFUNC
|
|
|
|
/// ADD_SIMPLE_USE_CONTEXT_INPUT_CONCATENATED()
|
|
///
|
|
/// Adds an extra input sprite to the most recently added label.
|
|
/// Returns true if it manages to add it.
|
|
///
|
|
/// Each label can have a maximum of 4 inputs (including the original one that wasn't added with concatenate).
|
|
///
|
|
/// system - The use context struct
|
|
/// eControlType - Frontend or player control
|
|
/// eControlAction - The input to concatenate
|
|
/// eAllowXOSwap - Allow XO swapping when choosing the sprite [japanese control schemes will often swap these]
|
|
FUNC BOOL ADD_SIMPLE_USE_CONTEXT_INPUT_CONCATENATED(SIMPLE_USE_CONTEXT& system, CONTROL_TYPE eControlType, CONTROL_ACTION eControlAction, UC_XO_SWAP_PARAM eAllowXOSwap = UC_ALLOW_XO_SWAP)
|
|
|
|
IF system.sfMov = NULL
|
|
SCRIPT_ASSERT("ADD_SIMPLE_USE_CONTEXT_INPUT_CONCATENATED() - System not init")
|
|
RETURN FALSE
|
|
ENDIF
|
|
|
|
INT iButtonID = system.iButtonCount - 1
|
|
|
|
IF iButtonID >= 0
|
|
AND iButtonID < MAX_SIMPLE_USE_CONTEXT_BUTTONS
|
|
|
|
INT iControlID = system.mButtons[iButtonID].iControlCount
|
|
IF iControlID < MAX_SIMPLE_USE_CONTEXT_CONTROLS
|
|
|
|
// Add button's control[n] data
|
|
system.mButtons[iButtonID].mControls[iControlID].eType = eControlType
|
|
system.mButtons[iButtonID].mControls[iControlID].iAction = ENUM_TO_INT(eControlAction)
|
|
|
|
IF eAllowXOSwap = UC_ALLOW_XO_SWAP
|
|
SET_BIT(system.mButtons[iButtonID].iControlSwapBits, iControlID)
|
|
ENDIF
|
|
|
|
// Update count
|
|
system.mButtons[iButtonID].iControlCount++
|
|
RETURN TRUE
|
|
|
|
ENDIF
|
|
|
|
SCRIPT_ASSERT("ADD_SIMPLE_USE_CONTEXT_INPUT_CONCATENATED() - Out of control slots")
|
|
|
|
ENDIF
|
|
|
|
SCRIPT_ASSERT("ADD_SIMPLE_USE_CONTEXT_INPUT_CONCATENATED() - No valid button to add to")
|
|
RETURN FALSE
|
|
|
|
ENDFUNC
|
|
|
|
/// ADD_SIMPLE_USE_CONTEXT_GROUP_CONCATENATED()
|
|
///
|
|
/// Adds an extra input group sprite to the most recently added label.
|
|
/// Returns true if it manages to add it.
|
|
///
|
|
/// Each label can have a maximum of 4 inputs (including the original one that wasn't added with concatenate).
|
|
///
|
|
/// system - The use context struct
|
|
/// eControlType - Frontend or player control
|
|
/// eControlActionGroup - The input group to concatenate
|
|
/// eAllowXOSwap - Allow XO swapping when choosing the sprite [japanese control schemes will often swap these]
|
|
FUNC BOOL ADD_SIMPLE_USE_CONTEXT_GROUP_CONCATENATED(SIMPLE_USE_CONTEXT& system, CONTROL_TYPE eControlType, CONTROL_ACTION_GROUP eControlActionGroup, UC_XO_SWAP_PARAM eAllowXOSwap = UC_ALLOW_XO_SWAP)
|
|
|
|
IF system.sfMov = NULL
|
|
SCRIPT_ASSERT("ADD_SIMPLE_USE_CONTEXT_GROUP_CONCATENATED() - System not init")
|
|
RETURN FALSE
|
|
ENDIF
|
|
|
|
INT iButtonID = system.iButtonCount - 1
|
|
|
|
IF iButtonID >= 0
|
|
AND iButtonID < MAX_SIMPLE_USE_CONTEXT_BUTTONS
|
|
|
|
INT iControlID = system.mButtons[iButtonID].iControlCount
|
|
IF iControlID < MAX_SIMPLE_USE_CONTEXT_CONTROLS
|
|
|
|
// Add button's control[n] data
|
|
system.mButtons[iButtonID].mControls[iControlID].eType = eControlType
|
|
system.mButtons[iButtonID].mControls[iControlID].iAction = ENUM_TO_INT(eControlActionGroup)
|
|
|
|
SET_BIT(system.mButtons[iButtonID].iControlGroupBits, iControlID)
|
|
|
|
IF eAllowXOSwap = UC_ALLOW_XO_SWAP
|
|
SET_BIT(system.mButtons[iButtonID].iControlSwapBits, iControlID)
|
|
ENDIF
|
|
|
|
// Update count
|
|
system.mButtons[iButtonID].iControlCount++
|
|
RETURN TRUE
|
|
|
|
ENDIF
|
|
|
|
SCRIPT_ASSERT("ADD_SIMPLE_USE_CONTEXT_GROUP_CONCATENATED() - Out of control slots")
|
|
|
|
ENDIF
|
|
|
|
SCRIPT_ASSERT("ADD_SIMPLE_USE_CONTEXT_GROUP_CONCATENATED() - No valid button to add to")
|
|
RETURN FALSE
|
|
|
|
ENDFUNC
|
|
|
|
FUNC BOOL IS_SIMPLE_USE_CONTEXT_INPUT_ADDED(SIMPLE_USE_CONTEXT& system, CONTROL_TYPE eControlType, CONTROL_ACTION eControlAction)
|
|
|
|
IF system.sfMov = NULL
|
|
SCRIPT_ASSERT("IS_SIMPLE_USE_CONTEXT_INPUT_ADDED() - System not init")
|
|
RETURN FALSE
|
|
ENDIF
|
|
|
|
INT iControlAction = ENUM_TO_INT(eControlAction)
|
|
|
|
INT iButtonID
|
|
REPEAT system.iButtonCount iButtonID
|
|
|
|
INT iControlID
|
|
REPEAT system.mButtons[iButtonID].iControlCount iControlID
|
|
|
|
// Check group flag is false
|
|
IF NOT IS_BIT_SET(system.mButtons[iButtonID].iControlGroupBits, iControlID)
|
|
|
|
// Check control data
|
|
IF system.mButtons[iButtonID].mControls[iControlID].eType = eControlType
|
|
AND system.mButtons[iButtonID].mControls[iControlID].iAction = iControlAction
|
|
RETURN TRUE
|
|
ENDIF
|
|
|
|
ENDIF
|
|
|
|
ENDREPEAT
|
|
|
|
ENDREPEAT
|
|
|
|
RETURN FALSE
|
|
|
|
ENDFUNC
|
|
|
|
FUNC BOOL IS_SIMPLE_USE_CONTEXT_GROUP_ADDED(SIMPLE_USE_CONTEXT& system, CONTROL_TYPE eControlType, CONTROL_ACTION_GROUP eControlActionGroup)
|
|
|
|
IF system.sfMov = NULL
|
|
SCRIPT_ASSERT("IS_SIMPLE_USE_CONTEXT_GROUP_ADDED() - System not init")
|
|
RETURN FALSE
|
|
ENDIF
|
|
|
|
INT iControlAction = ENUM_TO_INT(eControlActionGroup)
|
|
|
|
INT iButtonID
|
|
REPEAT system.iButtonCount iButtonID
|
|
|
|
INT iControlID
|
|
REPEAT system.mButtons[iButtonID].iControlCount iControlID
|
|
|
|
// Check group flag is true
|
|
IF IS_BIT_SET(system.mButtons[iButtonID].iControlGroupBits, iControlID)
|
|
|
|
// Check control data
|
|
IF system.mButtons[iButtonID].mControls[iControlID].eType = eControlType
|
|
AND system.mButtons[iButtonID].mControls[iControlID].iAction = iControlAction
|
|
RETURN TRUE
|
|
ENDIF
|
|
|
|
ENDIF
|
|
|
|
ENDREPEAT
|
|
|
|
ENDREPEAT
|
|
|
|
RETURN FALSE
|
|
|
|
ENDFUNC
|
|
|
|
FUNC BOOL IS_SIMPLE_USE_CONTEXT_VALID(SIMPLE_USE_CONTEXT& system)
|
|
IF (system.sfMov != NULL)
|
|
IF HAS_SCALEFORM_MOVIE_LOADED(system.sfMov)
|
|
SET_BITMASK_ENUM_AS_ENUM(system.eFlags, UCF_LOADED)
|
|
RETURN TRUE
|
|
ENDIF
|
|
ENDIF
|
|
|
|
RETURN FALSE
|
|
ENDFUNC
|
|
|
|
/// PURPOSE:
|
|
/// Sets a complex use context as either attached, or detached from a minigame
|
|
PROC SET_SIMPLE_USE_CONTEXT_MINIGAME_ATTACHED(SIMPLE_USE_CONTEXT& system, BOOL bAttachToMinigame = TRUE)
|
|
IF (bAttachToMinigame)
|
|
SET_BITMASK_ENUM_AS_ENUM(system.eFlags, UCF_IS_FOR_MENU)
|
|
ELSE
|
|
CLEAR_BITMASK_ENUM_AS_ENUM(system.eFlags, UCF_IS_FOR_MENU)
|
|
ENDIF
|
|
ENDPROC
|
|
|
|
/// PURPOSE:
|
|
/// Sets a complex use context above a timer, like in darts
|
|
PROC SET_SIMPLE_USE_CONTEXT_ABOVE_TIMER(SIMPLE_USE_CONTEXT& system, BOOL bAboveTimer = TRUE)
|
|
IF (bAboveTimer)
|
|
SET_BITMASK_ENUM_AS_ENUM(system.eFlags, UCF_ABOVE_TIMER)
|
|
ELSE
|
|
CLEAR_BITMASK_ENUM_AS_ENUM(system.eFlags, UCF_ABOVE_TIMER)
|
|
ENDIF
|
|
ENDPROC
|
|
|
|
/// PURPOSE:
|
|
/// Sets a complex use context to draw fullscreen
|
|
PROC SET_SIMPLE_USE_CONTEXT_FULLSCREEN(SIMPLE_USE_CONTEXT& system, BOOL bFullScreen = TRUE)
|
|
IF (bFullScreen)
|
|
SET_BITMASK_ENUM_AS_ENUM(system.eFlags, UCF_DRAW_FULLSCREEN)
|
|
ELSE
|
|
CLEAR_BITMASK_ENUM_AS_ENUM(system.eFlags, UCF_DRAW_FULLSCREEN)
|
|
ENDIF
|
|
ENDPROC
|
|
|
|
/// PURPOSE:
|
|
/// Sets a complex use context above a timer, like in darts
|
|
PROC SET_SIMPLE_USE_CONTEXT_BELOW_SCORE(SIMPLE_USE_CONTEXT& system, BOOL bBelowScore = TRUE)
|
|
IF (bBelowScore)
|
|
SET_BITMASK_ENUM_AS_ENUM(system.eFlags, UCF_BELOW_SCORE)
|
|
ELSE
|
|
CLEAR_BITMASK_ENUM_AS_ENUM(system.eFlags, UCF_BELOW_SCORE)
|
|
ENDIF
|
|
ENDPROC
|
|
|
|
PROC UPDATE_SIMPLE_USE_CONTEXT(SIMPLE_USE_CONTEXT& system, FLOAT fClearSpace = 200.0, GFX_DRAW_ORDER eDrawOrder = GFX_ORDER_BEFORE_HUD, BOOL bIgnoreFade = FALSE, BOOL bJPButtonSwitch = TRUE, FLOAT fWidth = 1.0)
|
|
|
|
//-----------------------------------------
|
|
// Check conditions and set script settings
|
|
//-----------------------------------------
|
|
|
|
IF IS_SCREEN_FADING_OUT()
|
|
OR IS_SCREEN_FADING_IN()
|
|
OR IS_SCREEN_FADED_OUT()
|
|
OR IS_FRONTEND_FADING()
|
|
IF NOT bIgnoreFade
|
|
PRINTLN(" Some kind of fade happening...")
|
|
EXIT
|
|
ENDIF
|
|
ENDIF
|
|
|
|
// Make sure we're valid.
|
|
IF NOT IS_SIMPLE_USE_CONTEXT_VALID(system)
|
|
PRINTLN(" Movie still not valid...")
|
|
EXIT
|
|
ENDIF
|
|
|
|
//hide the loading icon if we're drawing
|
|
HIDE_LOADING_ON_FADE_THIS_FRAME()
|
|
|
|
// Align it to a menu, if need be. Draw it.
|
|
SET_SCRIPT_GFX_DRAW_ORDER(eDrawOrder)
|
|
// IF IS_BITMASK_ENUM_AS_ENUM_SET(system.eFlags, UCF_IS_FOR_MENU)
|
|
// DRAW_SCALEFORM_MOVIE(system.sfMov, 0.34921875,0.467,1.0,1.0,255,255,255,0)
|
|
// ELIF IS_BITMASK_ENUM_AS_ENUM_SET(system.eFlags, UCF_ABOVE_TIMER)
|
|
// DRAW_SCALEFORM_MOVIE(system.sfMov, 0.5,0.425,1.0,1.0,255,255,255,0)
|
|
// ELIF IS_BITMASK_ENUM_AS_ENUM_SET(system.eFlags, UCF_DRAW_FULLSCREEN)
|
|
// DRAW_SCALEFORM_MOVIE_FULLSCREEN(system.sfMov, 255,255,255,0)
|
|
// ELIF IS_BITMASK_ENUM_AS_ENUM_SET(system.eFlags, UCF_BELOW_SCORE)
|
|
// SET_SCRIPT_GFX_ALIGN(UI_ALIGN_RIGHT, UI_ALIGN_BOTTOM)
|
|
// DRAW_SCALEFORM_MOVIE(system.sfMov, 0.5,0.563,1.0,1.0,255,255,255,0)
|
|
// RESET_SCRIPT_GFX_ALIGN()
|
|
// ELSE
|
|
// ENDIF
|
|
|
|
// This is a use context without a trigger. Load it once, and move on.
|
|
IF NOT IS_BITMASK_ENUM_AS_ENUM_SET(system.eFlags, UCF_TRIGGER_ON_LOADED)
|
|
OR (IS_BITMASK_ENUM_AS_ENUM_SET(system.eFlags, UCF_CHECK_CONTROL_CHANGE) AND HAVE_CONTROLS_CHANGED(FRONTEND_CONTROL))
|
|
|
|
PRINTLN("UPDATE_SIMPLE_USE_CONTEXT() rebuild...")
|
|
|
|
//-----------------------------------
|
|
// Clear data and set scaleform flags
|
|
//-----------------------------------
|
|
|
|
BEGIN_SCALEFORM_MOVIE_METHOD(system.sfMov, "SET_CLEAR_SPACE")
|
|
SCALEFORM_MOVIE_METHOD_ADD_PARAM_FLOAT(fClearSpace)
|
|
END_SCALEFORM_MOVIE_METHOD()
|
|
|
|
BEGIN_SCALEFORM_MOVIE_METHOD(system.sfMov, "SET_MAX_WIDTH")
|
|
SCALEFORM_MOVIE_METHOD_ADD_PARAM_FLOAT(fWidth)
|
|
END_SCALEFORM_MOVIE_METHOD()
|
|
|
|
BEGIN_SCALEFORM_MOVIE_METHOD(system.sfMov, "SET_DATA_SLOT_EMPTY")
|
|
END_SCALEFORM_MOVIE_METHOD()
|
|
|
|
IF IS_PC_VERSION()
|
|
BEGIN_SCALEFORM_MOVIE_METHOD(system.sfMov, "TOGGLE_MOUSE_BUTTONS")
|
|
SCALEFORM_MOVIE_METHOD_ADD_PARAM_BOOL(IS_BITMASK_ENUM_AS_ENUM_SET(system.eFlags, UCF_CLICKABLE))
|
|
END_SCALEFORM_MOVIE_METHOD()
|
|
ENDIF
|
|
|
|
//------------------------
|
|
// Add buttons and symbols
|
|
//------------------------
|
|
|
|
CONTROL_TYPE eControlType
|
|
INT iControlAction
|
|
BOOL bControlSwap
|
|
STRING sControlString
|
|
|
|
BOOL bCanDisplay
|
|
INT iDisplaySlotID = 0
|
|
|
|
// For each button...
|
|
INT iButtonID
|
|
REPEAT system.iButtonCount iButtonID
|
|
|
|
// Check button can be displayed
|
|
SWITCH system.mButtons[iButtonID].eCondition
|
|
CASE UC_CONDITION_ALWAYS_DISPLAY bCanDisplay = TRUE BREAK
|
|
CASE UC_CONDITION_DISPLAY_FOR_KB_ONLY bCanDisplay = IS_USING_KEYBOARD_AND_MOUSE(FRONTEND_CONTROL) BREAK
|
|
CASE UC_CONDITION_DISPLAY_FOR_PAD_ONLY bCanDisplay = NOT IS_USING_KEYBOARD_AND_MOUSE(FRONTEND_CONTROL) BREAK
|
|
DEFAULT bCanDisplay = FALSE BREAK
|
|
ENDSWITCH
|
|
|
|
IF bCanDisplay
|
|
|
|
IF BEGIN_SCALEFORM_MOVIE_METHOD(system.sfMov, "SET_DATA_SLOT")
|
|
|
|
// Start adding button
|
|
PRINTLN(" Adding button ", iButtonID)
|
|
SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(iDisplaySlotID)
|
|
iDisplaySlotID++
|
|
|
|
// For each control...
|
|
INT iControlID
|
|
REPEAT system.mButtons[iButtonID].iControlCount iControlID
|
|
|
|
// Get control data
|
|
eControlType = system.mButtons[iButtonID].mControls[iControlID].eType
|
|
iControlAction = system.mButtons[iButtonID].mControls[iControlID].iAction
|
|
bControlSwap = IS_BIT_SET(system.mButtons[iButtonID].iControlSwapBits, iControlID)
|
|
|
|
IF NOT IS_BIT_SET(system.mButtons[iButtonID].iControlGroupBits, iControlID)
|
|
sControlString = GET_CONTROL_INSTRUCTIONAL_BUTTONS_STRING(eControlType, INT_TO_ENUM(CONTROL_ACTION, iControlAction), bControlSwap)
|
|
ELSE
|
|
sControlString = GET_CONTROL_GROUP_INSTRUCTIONAL_BUTTONS_STRING(eControlType, INT_TO_ENUM(CONTROL_ACTION_GROUP, iControlAction), bControlSwap)
|
|
ENDIF
|
|
|
|
// Add control
|
|
IF NOT IS_STRING_NULL_OR_EMPTY(sControlString)
|
|
PRINTLN(" - control: \"", sControlString, "\"")
|
|
SCALEFORM_MOVIE_METHOD_ADD_PARAM_INSTRUCTIONAL_BUTTONS(sControlString)
|
|
ENDIF
|
|
|
|
ENDREPEAT
|
|
|
|
// Add label
|
|
IF NOT IS_STRING_NULL_OR_EMPTY(system.mButtons[iButtonID].sLabel)
|
|
PRINTLN(" - label: \"", system.mButtons[iButtonID].sLabel, "\"")
|
|
SCALEFORM_MOVIE_METHOD_ADD_PARAM_STRING(system.mButtons[iButtonID].sLabel)
|
|
ENDIF
|
|
|
|
// Add clickable data (if whole system is enabled for clicks)
|
|
IF IS_PC_VERSION()
|
|
IF IS_BITMASK_ENUM_AS_ENUM_SET(system.eFlags, UCF_CLICKABLE)
|
|
|
|
IF system.mButtons[iButtonID].bIsClickable
|
|
PRINTLN(" - Clickable")
|
|
SCALEFORM_MOVIE_METHOD_ADD_PARAM_BOOL(TRUE) // This button is clickable
|
|
SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(system.mButtons[iButtonID].mControls[0].iAction)
|
|
ELSE
|
|
PRINTLN(" - NotClickable")
|
|
SCALEFORM_MOVIE_METHOD_ADD_PARAM_BOOL(FALSE) // This button is non-clickable
|
|
SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(-1)
|
|
ENDIF
|
|
|
|
ENDIF
|
|
ENDIF
|
|
|
|
END_SCALEFORM_MOVIE_METHOD()
|
|
|
|
ENDIF
|
|
|
|
ENDIF
|
|
|
|
ENDREPEAT
|
|
|
|
FLOAT fResult = PICK_FLOAT(bJPButtonSwitch, PICK_FLOAT(IS_BITMASK_ENUM_AS_ENUM_SET(system.eFlags, UCF_VERTICAL), 1.0, 0.0), -1.0)
|
|
BEGIN_SCALEFORM_MOVIE_METHOD(system.sfMov, "DRAW_INSTRUCTIONAL_BUTTONS")
|
|
SCALEFORM_MOVIE_METHOD_ADD_PARAM_FLOAT(fResult)
|
|
END_SCALEFORM_MOVIE_METHOD()
|
|
|
|
BEGIN_SCALEFORM_MOVIE_METHOD(system.sfMov, "SET_BACKGROUND_COLOUR")
|
|
SCALEFORM_MOVIE_METHOD_ADD_PARAM_FLOAT(0)
|
|
SCALEFORM_MOVIE_METHOD_ADD_PARAM_FLOAT(0)
|
|
SCALEFORM_MOVIE_METHOD_ADD_PARAM_FLOAT(0)
|
|
SCALEFORM_MOVIE_METHOD_ADD_PARAM_FLOAT(80)
|
|
END_SCALEFORM_MOVIE_METHOD()
|
|
|
|
// Flag us as loaded.
|
|
SET_BITMASK_ENUM_AS_ENUM(system.eFlags, UCF_TRIGGER_ON_LOADED)
|
|
CLEAR_BITMASK_ENUM_AS_ENUM(system.eFlags, UCF_TRIGGER_OFF_LOADED)
|
|
|
|
ENDIF
|
|
|
|
DRAW_SCALEFORM_MOVIE_FULLSCREEN(system.sfMov, 255,255,255,0)
|
|
|
|
ENDPROC
|
|
|
|
PROC CLEANUP_SIMPLE_USE_CONTEXT(SIMPLE_USE_CONTEXT& system)
|
|
|
|
// Unload movie
|
|
IF (system.sfMov != NULL)
|
|
|
|
// fix for B* 2333651 - Don't think this is necessary anyway as the movie gets unloaded immediately after. - Steve R. LDS 12/May/15
|
|
// IF IS_PC_VERSION()
|
|
// BEGIN_SCALEFORM_MOVIE_METHOD(system.sfMov, "TOGGLE_MOUSE_BUTTONS")
|
|
// SCALEFORM_MOVIE_METHOD_ADD_PARAM_BOOL(FALSE)
|
|
// END_SCALEFORM_MOVIE_METHOD()
|
|
// ENDIF
|
|
|
|
SET_SCALEFORM_MOVIE_AS_NO_LONGER_NEEDED(system.sfMov)
|
|
system.sfMov = NULL
|
|
|
|
ENDIF
|
|
|
|
// Clear data
|
|
system.eFlags = UCF_NONE
|
|
system.iButtonCount = 0
|
|
|
|
ENDPROC
|
|
|