5472 lines
220 KiB
XML
Executable File
5472 lines
220 KiB
XML
Executable File
//////////////////////////////////////////////////////////////////////////////////////////
|
|
// //
|
|
// SCRIPT NAME : menu_public.sch //
|
|
// AUTHOR : Kenneth Ross //
|
|
// DESCRIPTION : Public functions to set up a menu and display it. //
|
|
// //
|
|
//////////////////////////////////////////////////////////////////////////////////////////
|
|
|
|
USING "rage_builtins.sch"
|
|
USING "globals.sch"
|
|
USING "commands_camera.sch"
|
|
USING "net_hud_activating.sch"
|
|
USING "cellphone_public.sch"
|
|
USING "scaleform_helper.sch"
|
|
USING "vehicle_int_to_rgb.sch"
|
|
USING "shared_hud_displays.sch"
|
|
USING "menu_cursor_public.sch"
|
|
|
|
|
|
FUNC STRING GET_MENU_STRING_FROM_TEXT_LABEL(STRING paramStr)
|
|
RETURN paramStr
|
|
ENDFUNC
|
|
|
|
|
|
/// PURPOSE: Returns the texture name for the specified icon
|
|
FUNC STRING GET_MENU_ICON_TEXTURE(MENU_ICON_TYPE paramIcon, BOOL paramSelected)
|
|
|
|
STRING sTexture[2]
|
|
|
|
IF NOT IS_STRING_NULL_OR_EMPTY(g_sMenuData.sIconTextureOverride[paramIcon])
|
|
IF GET_HASH_KEY(g_sMenuData.sIconTextureOverride[paramIcon]) = HASH("CREW_LOGO")
|
|
TEXT_LABEL_63 outTXDName
|
|
GAMER_HANDLE gamerHandle = GET_GAMER_HANDLE_PLAYER(PLAYER_ID())
|
|
|
|
IF NETWORK_CLAN_GET_EMBLEM_TXD_NAME(gamerHandle, outTXDName)
|
|
RETURN GET_MENU_STRING_FROM_TEXT_LABEL(outTXDName)
|
|
ENDIF
|
|
ELSE
|
|
RETURN GET_MENU_STRING_FROM_TEXT_LABEL(g_sMenuData.sIconTextureOverride[paramIcon])
|
|
ENDIF
|
|
ENDIF
|
|
|
|
SWITCH paramIcon
|
|
CASE MENU_ICON_CROWN sTexture[0] = "MP_hostCrown" sTexture[1] = "MP_hostCrown" BREAK
|
|
CASE MENU_ICON_BLADE sTexture[0] = "MP_SpecItem_Coke" sTexture[1] = "MP_SpecItem_Coke" BREAK
|
|
CASE MENU_ICON_SYRINGE sTexture[0] = "MP_SpecItem_Heroin" sTexture[1] = "MP_SpecItem_Heroin" BREAK
|
|
CASE MENU_ICON_WEED sTexture[0] = "MP_SpecItem_Weed" sTexture[1] = "MP_SpecItem_Weed" BREAK
|
|
CASE MENU_ICON_METH sTexture[0] = "MP_SpecItem_Meth" sTexture[1] = "MP_SpecItem_Meth" BREAK
|
|
CASE MENU_ICON_CASH sTexture[0] = "MP_SpecItem_Cash" sTexture[1] = "MP_SpecItem_Cash" BREAK
|
|
CASE MENU_ICON_STAR sTexture[0] = "shop_NEW_Star" sTexture[1] = "shop_NEW_Star" BREAK
|
|
CASE MENU_ICON_LEFT_STAR sTexture[0] = "shop_NEW_Star" sTexture[1] = "shop_NEW_Star" BREAK
|
|
CASE MENU_ICON_TICK sTexture[0] = "Shop_Tick_Icon" sTexture[1] = "Shop_Tick_Icon" BREAK
|
|
CASE MENU_ICON_BOX_CROSS sTexture[0] = "Shop_Box_CrossB" sTexture[1] = "Shop_Box_Cross" BREAK
|
|
CASE MENU_ICON_BOX_EMPTY sTexture[0] = "Shop_Box_BlankB" sTexture[1] = "Shop_Box_Blank" BREAK
|
|
CASE MENU_ICON_BOX_TICK sTexture[0] = "Shop_Box_TickB" sTexture[1] = "Shop_Box_Tick" BREAK
|
|
CASE MENU_ICON_COLOUR sTexture[0] = "shop_NEW_Star" sTexture[1] = "shop_NEW_Star" BREAK
|
|
CASE MENU_ICON_TSHIRT sTexture[0] = "Shop_Clothing_Icon_B" sTexture[1] = "Shop_Clothing_Icon_A" BREAK
|
|
CASE MENU_ICON_GUN sTexture[0] = "Shop_GunClub_Icon_B" sTexture[1] = "Shop_GunClub_Icon_A" BREAK
|
|
CASE MENU_ICON_AMMO sTexture[0] = "Shop_Ammo_Icon_B" sTexture[1] = "Shop_Ammo_Icon_A" BREAK
|
|
CASE MENU_ICON_ARMOUR sTexture[0] = "Shop_Armour_Icon_B" sTexture[1] = "Shop_Armour_Icon_A" BREAK
|
|
CASE MENU_ICON_HEALTH sTexture[0] = "Shop_Health_Icon_B" sTexture[1] = "Shop_Health_Icon_A" BREAK
|
|
CASE MENU_ICON_MAKEUP sTexture[0] = "Shop_MakeUp_Icon_B" sTexture[1] = "Shop_MakeUp_Icon_A" BREAK
|
|
CASE MENU_ICON_INK sTexture[0] = "Shop_Tattoos_Icon_B" sTexture[1] = "Shop_Tattoos_Icon_A" BREAK
|
|
CASE MENU_ICON_CAR sTexture[0] = "Shop_Garage_Icon_B" sTexture[1] = "Shop_Garage_Icon_A" BREAK
|
|
CASE MENU_ICON_BIKE sTexture[0] = "Shop_Garage_Bike_Icon_B" sTexture[1] = "Shop_Garage_Bike_Icon_A" BREAK
|
|
CASE MENU_ICON_SCISSORS sTexture[0] = "Shop_Barber_Icon_B" sTexture[1] = "Shop_Barber_Icon_A" BREAK
|
|
CASE MENU_ICON_LOCK sTexture[0] = "shop_Lock" sTexture[1] = "shop_Lock" BREAK
|
|
CASE MENU_ICON_LSC sTexture[0] = "Shop_Tick_Icon" sTexture[1] = "Shop_Tick_Icon" BREAK // The LSC logo is big so we load separately and override.
|
|
CASE MENU_ICON_ARROW_L sTexture[0] = "arrowleft" sTexture[1] = "arrowleft" BREAK
|
|
CASE MENU_ICON_ARROW_R sTexture[0] = "arrowright" sTexture[1] = "arrowright" BREAK
|
|
CASE MENU_ICON_ALERT sTexture[0] = "MP_AlertTriangle" sTexture[1] = "MP_AlertTriangle" BREAK
|
|
CASE MENU_ICON_HEADER sTexture[0] = "shop_NEW_Star" sTexture[1] = "shop_NEW_Star" BREAK // Script should override this
|
|
|
|
CASE MENU_ICON_M sTexture[0] = "Shop_Michael_Icon_B" sTexture[1] = "Shop_Michael_Icon_A" BREAK
|
|
CASE MENU_ICON_F sTexture[0] = "Shop_Franklin_Icon_B" sTexture[1] = "Shop_Franklin_Icon_A" BREAK
|
|
CASE MENU_ICON_T sTexture[0] = "Shop_Trevor_Icon_B" sTexture[1] = "Shop_Trevor_Icon_A" BREAK
|
|
|
|
CASE MENU_ICON_DISCOUNT sTexture[0] = "SaleIcon" sTexture[1] = "SaleIcon" BREAK
|
|
|
|
CASE MENU_ICON_YACHT sTexture[0] = "Shop_Tick_Icon" sTexture[1] = "Shop_Tick_Icon" BREAK
|
|
|
|
CASE MENU_ICON_STAR_FADED sTexture[0] = "shop_NEW_Star" sTexture[1] = "shop_NEW_Star" BREAK
|
|
|
|
CASE MENU_ICON_BIN_LOCK sTexture[0] = "Shop_Lock_Arena" sTexture[1] = "Shop_Lock_Arena" BREAK
|
|
|
|
CASE MENU_ICON_CLUBS sTexture[0] = "Card_Suit_Clubs" sTexture[1] = "Card_Suit_Clubs" BREAK
|
|
CASE MENU_ICON_HEARTS sTexture[0] = "Card_Suit_Hearts" sTexture[1] = "Card_Suit_Hearts" BREAK
|
|
CASE MENU_ICON_SPADES sTexture[0] = "Card_Suit_Spades" sTexture[1] = "Card_Suit_Spades" BREAK
|
|
CASE MENU_ICON_DIAMONDS sTexture[0] = "Card_Suit_Diamonds" sTexture[1] = "Card_Suit_Diamonds" BREAK
|
|
CASE MENU_ICON_DECORATION sTexture[0] = "Shop_Art_Icon_B" sTexture[1] = "Shop_Art_Icon_A" BREAK
|
|
CASE MENU_ICON_DECORATION_FADED sTexture[0] = "Shop_Art_Icon_B" sTexture[1] = "Shop_Art_Icon_A" BREAK
|
|
CASE MENU_ICON_CHIPS sTexture[0] = "Shop_Chips_A" sTexture[1] = "Shop_Chips_B" BREAK
|
|
|
|
CASE MENU_ICON_DUMMY sTexture[0] = "" sTexture[1] = "" BREAK
|
|
ENDSWITCH
|
|
|
|
IF paramSelected
|
|
RETURN sTexture[0]
|
|
ELSE
|
|
RETURN sTexture[1]
|
|
ENDIF
|
|
ENDFUNC
|
|
|
|
/// PURPOSE: Returns the texture name for the specified icon
|
|
FUNC STRING GET_MENU_ICON_TXD(MENU_ICON_TYPE paramIcon)
|
|
|
|
IF NOT IS_STRING_NULL_OR_EMPTY(g_sMenuData.sIconTXDOverride[paramIcon])
|
|
IF GET_HASH_KEY(g_sMenuData.sIconTXDOverride[paramIcon]) = HASH("CREW_LOGO")
|
|
TEXT_LABEL_63 outTXDName
|
|
GAMER_HANDLE gamerHandle = GET_GAMER_HANDLE_PLAYER(PLAYER_ID())
|
|
NETWORK_CLAN_GET_EMBLEM_TXD_NAME(gamerHandle, outTXDName)
|
|
RETURN GET_MENU_STRING_FROM_TEXT_LABEL(outTXDName)
|
|
ELSE
|
|
RETURN GET_MENU_STRING_FROM_TEXT_LABEL(g_sMenuData.sIconTXDOverride[paramIcon])
|
|
ENDIF
|
|
ENDIF
|
|
|
|
IF paramIcon = MENU_ICON_DISCOUNT
|
|
RETURN "MPShopSale"
|
|
ENDIF
|
|
|
|
RETURN "CommonMenu"
|
|
ENDFUNC
|
|
|
|
/// PURPOSE: Returns the rgb for menu icon
|
|
PROC GET_MENU_ICON_TEXTURE_RGB(MENU_ICON_TYPE paramIcon, BOOL paramSelected, INT &iR, INT &iG, INT &iB, INT &iA)
|
|
GET_HUD_COLOUR(HUD_COLOUR_WHITE, iR, iG, iB, iA)
|
|
|
|
iA = 255
|
|
|
|
SWITCH paramIcon
|
|
CASE MENU_ICON_ALERT
|
|
iR = 194
|
|
iG = 80
|
|
iB = 80
|
|
BREAK
|
|
CASE MENU_ICON_LOCK
|
|
CASE MENU_ICON_TICK
|
|
CASE MENU_ICON_LSC
|
|
CASE MENU_ICON_ARROW_L
|
|
CASE MENU_ICON_ARROW_R
|
|
CASE MENU_ICON_SURVIVAL
|
|
CASE MENU_ICON_MISSION
|
|
CASE MENU_ICON_LTS
|
|
CASE MENU_ICON_CAPTURE
|
|
CASE MENU_ICON_BASE_JUMPING
|
|
CASE MENU_ICON_GANG_ATTACK
|
|
CASE MENU_ICON_RACE_LAND
|
|
CASE MENU_ICON_RACE_STUNT
|
|
CASE MENU_ICON_RACE_WATER
|
|
CASE MENU_ICON_RACE_AIR
|
|
CASE MENU_ICON_RACE_BIKE
|
|
CASE MENU_ICON_DEATHMATCH
|
|
CASE MENU_ICON_TEAM_DM
|
|
CASE MENU_ICON_VEH_DM
|
|
CASE MENU_ICON_YACHT
|
|
CASE MENU_ICON_CLUBS
|
|
CASE MENU_ICON_HEARTS
|
|
CASE MENU_ICON_SPADES
|
|
CASE MENU_ICON_DIAMONDS
|
|
IF paramSelected
|
|
iR = 0
|
|
iG = 0
|
|
iB = 0
|
|
ENDIF
|
|
BREAK
|
|
|
|
CASE MENU_ICON_STAR_FADED
|
|
iA = 100
|
|
BREAK
|
|
|
|
CASE MENU_ICON_DECORATION_FADED
|
|
iA = 100
|
|
BREAK
|
|
|
|
CASE MENU_ICON_BIN_LOCK
|
|
GET_HUD_COLOUR(HUD_COLOUR_PINK, iR, iG, iB, iA)
|
|
iA = 255
|
|
BREAK
|
|
ENDSWITCH
|
|
ENDPROC
|
|
|
|
/// PURPOSE: Returns the scale multiplier for menu icon. Defaults to 1.0
|
|
FUNC FLOAT GET_MENU_ICON_SCALE_MULTIPLIER(MENU_ICON_TYPE paramIcon)
|
|
|
|
SWITCH paramIcon
|
|
CASE MENU_ICON_SURVIVAL
|
|
CASE MENU_ICON_MISSION
|
|
CASE MENU_ICON_LTS
|
|
CASE MENU_ICON_CAPTURE
|
|
CASE MENU_ICON_BASE_JUMPING
|
|
CASE MENU_ICON_GANG_ATTACK
|
|
CASE MENU_ICON_RACE_LAND
|
|
CASE MENU_ICON_RACE_WATER
|
|
CASE MENU_ICON_RACE_AIR
|
|
CASE MENU_ICON_RACE_BIKE
|
|
CASE MENU_ICON_RACE_STUNT
|
|
CASE MENU_ICON_DEATHMATCH
|
|
CASE MENU_ICON_TEAM_DM
|
|
CASE MENU_ICON_VEH_DM
|
|
RETURN 0.85
|
|
BREAK
|
|
ENDSWITCH
|
|
|
|
RETURN 1.0
|
|
ENDFUNC
|
|
|
|
/// PURPOSE: Returns the scale multiplier for menu icon. Defaults to 1.0
|
|
FUNC FLOAT GET_MENU_ICON_TEXTURE_SCALE(MENU_ICON_TYPE paramIcon)
|
|
|
|
SWITCH paramIcon
|
|
// Fix for bug # 1859693 - Reducing size as textures were doubled in size
|
|
CASE MENU_ICON_T
|
|
CASE MENU_ICON_TICK
|
|
CASE MENU_ICON_INK
|
|
CASE MENU_ICON_M
|
|
CASE MENU_ICON_MAKEUP
|
|
CASE MENU_ICON_LOCK
|
|
// CASE MENU_ICON_BIN_LOCK
|
|
CASE MENU_ICON_GUN
|
|
CASE MENU_ICON_CAR
|
|
CASE MENU_ICON_BIKE
|
|
CASE MENU_ICON_F
|
|
CASE MENU_ICON_TSHIRT
|
|
CASE MENU_ICON_BOX_TICK
|
|
CASE MENU_ICON_BOX_CROSS
|
|
CASE MENU_ICON_BOX_EMPTY
|
|
CASE MENU_ICON_SCISSORS
|
|
CASE MENU_ICON_ARMOUR
|
|
CASE MENU_ICON_HEALTH
|
|
CASE MENU_ICON_AMMO
|
|
CASE MENU_ICON_ALERT
|
|
CASE MENU_ICON_ARROW_L
|
|
CASE MENU_ICON_ARROW_R
|
|
// CASE MENU_ICON_STAR
|
|
// CASE MENU_ICON_LEFT_STAR
|
|
// CASE MENU_ICON_DISCOUNT
|
|
CASE MENU_ICON_YACHT
|
|
CASE MENU_ICON_CLUBS
|
|
CASE MENU_ICON_HEARTS
|
|
CASE MENU_ICON_SPADES
|
|
CASE MENU_ICON_DIAMONDS
|
|
CASE MENU_ICON_DECORATION
|
|
CASE MENU_ICON_DECORATION_FADED
|
|
RETURN 0.5
|
|
BREAK
|
|
CASE MENU_ICON_CHIPS
|
|
RETURN 0.8
|
|
BREAK
|
|
ENDSWITCH
|
|
|
|
RETURN 1.0
|
|
ENDFUNC
|
|
|
|
/// PURPOSE: Is the horizontal width so much larger than the vertical that we should assume the game
|
|
/// is running a triple monitor setup?
|
|
FUNC BOOL IS_PHYSICAL_RES_CONSIDERED_TRIPLE_HEAD(INT iScreenXPixels, INT iScreenYPixels)
|
|
RETURN TO_FLOAT(iScreenXPixels)/TO_FLOAT(iScreenYPixels) > CUSTOM_MENU_TRIPLE_HEAD_THRESHOLD_RATIO
|
|
ENDFUNC
|
|
|
|
/// PURPOSE: Calculate the resolution that the menu should consider as the full screen. NB. This may not be the
|
|
/// actual resolution if the game is running a triple head setup where the menu should only use the center screen.
|
|
PROC GET_SCREEN_RESOLUTION_FOR_MENU(BOOL bUseActualRes, INT &iScreenXPixels, INT &iScreenYPixels, FLOAT &fAspectMultiplier)
|
|
IF NOT bUseActualRes
|
|
//At least in the past, this native returned a hardcoded 16:9 resolution.
|
|
GET_SCREEN_RESOLUTION(iScreenXPixels, iScreenYPixels)
|
|
EXIT
|
|
ENDIF
|
|
|
|
GET_ACTUAL_SCREEN_RESOLUTION(iScreenXPixels, iScreenYPixels)
|
|
FLOAT fScreenXPixels = TO_FLOAT(iScreenXPixels)
|
|
FLOAT fScreenYPixels = TO_FLOAT(iScreenYPixels)
|
|
FLOAT fFakeAspect = GET_ASPECT_RATIO(FALSE)
|
|
|
|
//Is the physical res considered large enough for the game to be running triple head?
|
|
IF IS_PHYSICAL_RES_CONSIDERED_TRIPLE_HEAD(iScreenXPixels, iScreenYPixels)
|
|
//Yes, pretend the screen width is actually the size of a standard 16:9 monitor.
|
|
fAspectMultiplier = 1.0
|
|
iScreenXPixels = ROUND(fScreenYPixels * fFakeAspect)
|
|
iScreenYPixels = ROUND(fScreenYPixels)
|
|
EXIT
|
|
ENDIF
|
|
|
|
//No, calculate the real aspect ratio.
|
|
fAspectMultiplier = (fScreenXPixels / fScreenYPixels) / fFakeAspect
|
|
iScreenXPixels = ROUND(fScreenXPixels/fAspectMultiplier)
|
|
iScreenYPixels = ROUND(fScreenYPixels/fAspectMultiplier)
|
|
ENDPROC
|
|
|
|
/// PURPOSE: Gets the width and height of a specific icon in screen space.
|
|
FUNC BOOL GET_MENU_ICON_SCREEN_RESOLUTION(MENU_ICON_TYPE paramIcon, BOOL paramSelected, BOOL paramForRender, FLOAT &fWidth, FLOAT &fHeight, BOOL bUseActualRes = FALSE)
|
|
|
|
TEXT_LABEL_63 sTXD = GET_MENU_ICON_TXD(paramIcon)
|
|
TEXT_LABEL_63 sTexture = GET_MENU_ICON_TEXTURE(paramIcon, paramSelected)
|
|
|
|
IF GET_HASH_KEY(sTexture) != 0
|
|
|
|
// B* 2147964 - Gets the physical screen aspect and compares to fake aspect ratio to get a multiplier
|
|
INT xScreen, yScreen
|
|
FLOAT fAspectMulti = 1.0
|
|
GET_SCREEN_RESOLUTION_FOR_MENU(bUseActualRes, xScreen, yScreen, fAspectMulti)
|
|
|
|
VECTOR vTexture = GET_TEXTURE_RESOLUTION(sTXD, sTexture)
|
|
FLOAT fTextureResScale = GET_MENU_ICON_TEXTURE_SCALE(paramIcon)/fAspectMulti
|
|
vTexture *= fTextureResScale
|
|
|
|
// All dds files have a border around them so subtract
|
|
IF NOT paramForRender
|
|
vTexture.X -= 2.0
|
|
vTexture.Y -= 2.0
|
|
ENDIF
|
|
|
|
IF paramIcon = MENU_ICON_DLC_IMAGE
|
|
vTexture.X = 288
|
|
vTexture.Y = 106
|
|
ENDIF
|
|
|
|
IF paramIcon = MENU_ICON_HEADER
|
|
AND GET_HASH_KEY(g_sMenuData.sIconTextureOverride[MENU_ICON_HEADER]) = HASH("CREW_LOGO")
|
|
vTexture.X = 106
|
|
vTexture.Y = 106
|
|
ENDIF
|
|
|
|
fWidth = (vTexture.X/xScreen) * (xScreen/yScreen)
|
|
fHeight = (vTexture.Y/yScreen) / (vTexture.X/xScreen) * fWidth
|
|
|
|
IF NOT bUseActualRes
|
|
IF NOT GET_IS_WIDESCREEN()
|
|
AND paramIcon != MENU_ICON_DLC_IMAGE
|
|
fWidth *= 1.33
|
|
ENDIF
|
|
ENDIF
|
|
|
|
// Some textures have been upscaled so we need to ensure they do not exceed the menu width.
|
|
IF paramIcon = MENU_ICON_HEADER
|
|
IF fWidth > CUSTOM_MENU_W
|
|
// Make sure we scale the height to match this..
|
|
fHeight *= (CUSTOM_MENU_W / fWidth)
|
|
fWidth = CUSTOM_MENU_W
|
|
ENDIF
|
|
ENDIF
|
|
|
|
RETURN TRUE
|
|
ENDIF
|
|
|
|
RETURN FALSE
|
|
ENDFUNC
|
|
|
|
/// PURPOSE: Sets the appropriate text states for heading text
|
|
PROC SETUP_MENU_HEADING_TEXT()
|
|
INT iR, iG, iB, iA
|
|
GET_HUD_COLOUR(HUD_COLOUR_WHITE, iR, iG, iB, iA)
|
|
|
|
IF g_sMenuData.bUseCustomHeaderTextColour
|
|
iR = g_sMenuData.iHeaderTextR
|
|
iG = g_sMenuData.iHeaderTextG
|
|
iB = g_sMenuData.iHeaderTextB
|
|
iA = g_sMenuData.iHeaderTextA
|
|
ENDIF
|
|
|
|
SET_TEXT_FONT(FONT_STANDARD)
|
|
SET_TEXT_SCALE(0.0000, CUSTOM_MENU_TEXT_SCALE_Y)
|
|
SET_TEXT_COLOUR(iR, iG, iB, iA)
|
|
SET_TEXT_WRAP(CUSTOM_MENU_X+CUSTOM_MENU_TEXT_INDENT_X, CUSTOM_MENU_X+CUSTOM_MENU_W-CUSTOM_MENU_TEXT_INDENT_X)
|
|
SET_TEXT_CENTRE(FALSE)
|
|
SET_TEXT_DROPSHADOW(0, 0, 0, 0, 0)
|
|
SET_TEXT_EDGE(0, 0, 0, 0, 0)
|
|
ENDPROC
|
|
|
|
PROC SETUP_MENU_CUSTOM_ITEM_TEXT_COLOUR(BOOL bSelected)
|
|
INT iR, iG, iB, iA
|
|
IF bSelected
|
|
GET_HUD_COLOUR(g_sMenuData.eRowColour[0], iR, iG, iB, iA)
|
|
ELSE
|
|
GET_HUD_COLOUR(g_sMenuData.eRowColour[1], iR, iG, iB, iA)
|
|
ENDIF
|
|
SET_TEXT_COLOUR(iR, iG, iB, 255)
|
|
ENDPROC
|
|
|
|
/// PURPOSE: Sets the appropriate text states for item text
|
|
PROC SETUP_MENU_ITEM_TEXT(BOOL bSelected, BOOL bIsSelectable = TRUE, BOOL bIsDefault = FALSE, BOOL bSetCarColour = FALSE, INT iArray = 0, BOOL bPlayerNameFont = FALSE, BOOL bCondensedFont = FALSE)
|
|
INT iR, iG, iB, iA
|
|
IF bIsDefault
|
|
IF bSetCarColour
|
|
GET_VEHICLE_RGB_FROM_INT(g_sMenuData.iCarColour[iArray], iR, iG, iB)
|
|
IF iR < 20
|
|
AND iG < 20
|
|
AND iB < 20
|
|
IF bSelected = FALSE
|
|
GET_HUD_COLOUR(HUD_COLOUR_WHITE, iR, iG, iB, iA)
|
|
ENDIF
|
|
ELIF iR > 230
|
|
AND iG > 230
|
|
AND iB > 230
|
|
IF bSelected
|
|
iR = 0
|
|
iG = 0
|
|
iB = 0
|
|
ENDIF
|
|
ENDIF
|
|
SET_TEXT_COLOUR(iR, iG, iB, 255)
|
|
ELIF bIsSelectable
|
|
IF bSelected
|
|
GET_HUD_COLOUR(HUD_COLOUR_YELLOWDARK, iR, iG, iB, iA)
|
|
SET_TEXT_COLOUR(iR, iG, iB, 255)
|
|
ELSE
|
|
GET_HUD_COLOUR(HUD_COLOUR_YELLOW, iR, iG, iB, iA)
|
|
SET_TEXT_COLOUR(iR, iG, iB, 255)
|
|
ENDIF
|
|
ELSE
|
|
IF bSelected
|
|
SET_TEXT_COLOUR(155, 155, 155, 255)
|
|
ELSE
|
|
SET_TEXT_COLOUR(155, 155, 155, 255)
|
|
ENDIF
|
|
ENDIF
|
|
ELSE
|
|
IF bIsSelectable
|
|
IF bSelected
|
|
SET_TEXT_COLOUR(0, 0 ,0 , FLOOR(255*0.8)) //
|
|
ELSE
|
|
GET_HUD_COLOUR(HUD_COLOUR_WHITE, iR, iG, iB, iA)
|
|
SET_TEXT_COLOUR(iR, iG, iB, iA)
|
|
ENDIF
|
|
ELSE
|
|
IF bSelected
|
|
SET_TEXT_COLOUR(155, 155, 155, 255)
|
|
ELSE
|
|
SET_TEXT_COLOUR(155, 155, 155, 255)
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
SET_TEXT_SCALE(0.0000, CUSTOM_MENU_TEXT_SCALE_Y)
|
|
SET_TEXT_JUSTIFICATION(FONT_LEFT)
|
|
|
|
IF bPlayerNameFont
|
|
SET_TEXT_SCALE(0.0000, CUSTOM_MENU_CONDENSED_TEXT_SCALE_Y)
|
|
SET_TEXT_FONT(FONT_CONDENSED)
|
|
ELIF bCondensedFont
|
|
SET_TEXT_SCALE(0.0000, CUSTOM_MENU_CONDENSED_TEXT_SCALE_Y)
|
|
SET_TEXT_FONT(FONT_CONDENSED_NOT_GAMERNAME)
|
|
ELSE
|
|
SET_TEXT_FONT(FONT_STANDARD)
|
|
ENDIF
|
|
|
|
SET_TEXT_WRAP(0.0, 1.0)
|
|
SET_TEXT_CENTRE(FALSE)
|
|
SET_TEXT_DROPSHADOW(0, 0, 0, 0, 0)
|
|
SET_TEXT_EDGE(0, 0, 0, 0, 0)
|
|
ENDPROC
|
|
|
|
/// PURPOSE: Sets the appropriate text states for item text
|
|
PROC SETUP_MENU_ITEM_MESSAGE_TEXT(FLOAT fXWrapStart)
|
|
INT iR, iG, iB, iA
|
|
GET_HUD_COLOUR(HUD_COLOUR_WHITE, iR, iG, iB, iA)
|
|
SET_TEXT_FONT(FONT_STANDARD)
|
|
SET_TEXT_SCALE(0.0000, CUSTOM_MENU_TEXT_SCALE_Y)
|
|
SET_TEXT_LEADING(2)
|
|
SET_TEXT_COLOUR(iR, iG, iB, iA)
|
|
SET_TEXT_WRAP(fXWrapStart, CUSTOM_MENU_X+CUSTOM_MENU_W-CUSTOM_MENU_TEXT_INDENT_X)
|
|
SET_TEXT_CENTRE(FALSE)
|
|
SET_TEXT_DROPSHADOW(0, 0, 0, 0, 0)
|
|
SET_TEXT_EDGE(0, 0, 0, 0, 0)
|
|
ENDPROC
|
|
|
|
/// PURPOSE: Sets the appropriate text states for item text
|
|
PROC SETUP_MENU_HELP_KEY_TEXT(FLOAT fWrapStartX = -1.0, FLOAT fWrapEndX = -1.0)
|
|
INT iR, iG, iB, iA
|
|
GET_HUD_COLOUR(HUD_COLOUR_WHITE, iR, iG, iB, iA)
|
|
SET_TEXT_FONT(FONT_STANDARD)
|
|
SET_TEXT_SCALE(0.0000, 0.315)
|
|
SET_TEXT_COLOUR(iR, iG, iB, iA)
|
|
IF fWrapStartX != -1.0
|
|
OR fWrapEndX != -1.0
|
|
SET_TEXT_WRAP(fWrapStartX, fWrapEndX)
|
|
ELSE
|
|
SET_TEXT_WRAP(CUSTOM_MENU_X+CUSTOM_MENU_TEXT_INDENT_X, CUSTOM_MENU_X+CUSTOM_MENU_W-CUSTOM_MENU_TEXT_INDENT_X)
|
|
ENDIF
|
|
SET_TEXT_CENTRE(FALSE)
|
|
SET_TEXT_DROPSHADOW(0, 0, 0, 0, 0)
|
|
SET_TEXT_EDGE(0, 0, 0, 0, 0)
|
|
ENDPROC
|
|
|
|
FUNC FLOAT GET_MENU_HEADING_TEXT_HEIGHT()
|
|
IF NOT DOES_TEXT_LABEL_EXIST(g_sMenuData.tl15Title)
|
|
RETURN GET_RENDERED_CHARACTER_HEIGHT(CUSTOM_MENU_TEXT_SCALE_Y)
|
|
ENDIF
|
|
|
|
FLOAT fHeaderGraphicHeight = 0.0
|
|
FLOAT fTempWidth, fTempHeight
|
|
IF g_sMenuData.bUseHeaderGraphic
|
|
AND GET_MENU_ICON_SCREEN_RESOLUTION(MENU_ICON_HEADER, TRUE, TRUE, fTempWidth, fTempHeight)
|
|
fHeaderGraphicHeight = fTempHeight
|
|
ENDIF
|
|
|
|
INT iIntParam, iFloatParam, iTextParam, iPlayerNameParam, i
|
|
SETUP_MENU_HEADING_TEXT()
|
|
BEGIN_TEXT_COMMAND_GET_NUMBER_OF_LINES_FOR_STRING(g_sMenuData.tl15Title)
|
|
REPEAT MAX_STORED_TEXT_COMPS i
|
|
IF g_sMenuData.eTitleComps[i] = MENU_TEXT_COMP_INT
|
|
ADD_TEXT_COMPONENT_INTEGER(g_sMenuData.iTitleInt[iIntParam])
|
|
iIntParam++
|
|
ELIF g_sMenuData.eTitleComps[i] = MENU_TEXT_COMP_FLOAT
|
|
ADD_TEXT_COMPONENT_FLOAT(g_sMenuData.fTitleFloat[iFloatParam], g_sMenuData.iTitleFloatDP[iFloatParam])
|
|
iFloatParam++
|
|
ELIF g_sMenuData.eTitleComps[i] = MENU_TEXT_COMP_TEXT
|
|
ADD_TEXT_COMPONENT_SUBSTRING_TEXT_LABEL(g_sMenuData.tl15TitleText[iTextParam])
|
|
iTextParam++
|
|
ELIF g_sMenuData.eTitleComps[i] = MENU_TEXT_COMP_VEHICLE_NAME
|
|
ADD_TEXT_COMPONENT_SUBSTRING_TEXT_LABEL(g_sMenuData.tl15TitleText[iTextParam])
|
|
iTextParam++
|
|
ELIF g_sMenuData.eTitleComps[i] = MENU_TEXT_COMP_PLAYER_NAME
|
|
ADD_TEXT_COMPONENT_SUBSTRING_PLAYER_NAME(g_sMenuData.tlTitlePlayerName[iPlayerNameParam])
|
|
iPlayerNameParam++
|
|
ELIF g_sMenuData.eTitleComps[i] = MENU_TEXT_COMP_RADIO_STATION
|
|
ADD_TEXT_COMPONENT_SUBSTRING_TEXT_LABEL(g_sMenuData.tlTitlePlayerName[iPlayerNameParam])
|
|
iPlayerNameParam++
|
|
ELIF g_sMenuData.eTitleComps[i] = MENU_TEXT_COMP_LITERAL
|
|
ADD_TEXT_COMPONENT_SUBSTRING_PLAYER_NAME(g_sMenuData.tlTitlePlayerName[iPlayerNameParam])
|
|
iPlayerNameParam++
|
|
ELIF g_sMenuData.eTitleComps[i] = MENU_TEXT_COMP_CONDENSED_LITERAL
|
|
ADD_TEXT_COMPONENT_SUBSTRING_PLAYER_NAME(g_sMenuData.tlTitlePlayerName[iPlayerNameParam])
|
|
iPlayerNameParam++
|
|
ENDIF
|
|
ENDREPEAT
|
|
RETURN (GET_RENDERED_CHARACTER_HEIGHT(CUSTOM_MENU_TEXT_SCALE_Y)*END_TEXT_COMMAND_GET_NUMBER_OF_LINES_FOR_STRING(CUSTOM_MENU_X+CUSTOM_MENU_TEXT_INDENT_X, CUSTOM_MENU_Y+fHeaderGraphicHeight+0.008))
|
|
ENDFUNC
|
|
|
|
FUNC FLOAT GET_MENU_HEADING_TEXT_WIDTH()
|
|
IF NOT DOES_TEXT_LABEL_EXIST(g_sMenuData.tl15Title)
|
|
RETURN 0.0
|
|
ENDIF
|
|
FLOAT fWidth
|
|
INT iIntParam, iFloatParam, iTextParam, iPlayerNameParam, i
|
|
SETUP_MENU_HEADING_TEXT()
|
|
BEGIN_TEXT_COMMAND_GET_SCREEN_WIDTH_OF_DISPLAY_TEXT(g_sMenuData.tl15Title)
|
|
REPEAT MAX_STORED_TEXT_COMPS i
|
|
IF g_sMenuData.eTitleComps[i] = MENU_TEXT_COMP_INT
|
|
ADD_TEXT_COMPONENT_INTEGER(g_sMenuData.iTitleInt[iIntParam])
|
|
iIntParam++
|
|
ELIF g_sMenuData.eTitleComps[i] = MENU_TEXT_COMP_FLOAT
|
|
ADD_TEXT_COMPONENT_FLOAT(g_sMenuData.fTitleFloat[iFloatParam], g_sMenuData.iTitleFloatDP[iFloatParam])
|
|
iFloatParam++
|
|
ELIF g_sMenuData.eTitleComps[i] = MENU_TEXT_COMP_TEXT
|
|
ADD_TEXT_COMPONENT_SUBSTRING_TEXT_LABEL(g_sMenuData.tl15TitleText[iTextParam])
|
|
iTextParam++
|
|
ELIF g_sMenuData.eTitleComps[i] = MENU_TEXT_COMP_VEHICLE_NAME
|
|
ADD_TEXT_COMPONENT_SUBSTRING_TEXT_LABEL(g_sMenuData.tl15TitleText[iTextParam])
|
|
iTextParam++
|
|
ELIF g_sMenuData.eTitleComps[i] = MENU_TEXT_COMP_PLAYER_NAME
|
|
ADD_TEXT_COMPONENT_SUBSTRING_TEXT_LABEL(g_sMenuData.tlTitlePlayerName[iPlayerNameParam])
|
|
iPlayerNameParam++
|
|
ELIF g_sMenuData.eTitleComps[i] = MENU_TEXT_COMP_RADIO_STATION
|
|
ADD_TEXT_COMPONENT_SUBSTRING_TEXT_LABEL(g_sMenuData.tlTitlePlayerName[iPlayerNameParam])
|
|
iPlayerNameParam++
|
|
ELIF g_sMenuData.eTitleComps[i] = MENU_TEXT_COMP_LITERAL
|
|
ADD_TEXT_COMPONENT_SUBSTRING_TEXT_LABEL(g_sMenuData.tlTitlePlayerName[iPlayerNameParam])
|
|
iPlayerNameParam++
|
|
ELIF g_sMenuData.eTitleComps[i] = MENU_TEXT_COMP_CONDENSED_LITERAL
|
|
ADD_TEXT_COMPONENT_SUBSTRING_TEXT_LABEL(g_sMenuData.tlTitlePlayerName[iPlayerNameParam])
|
|
iPlayerNameParam++
|
|
ENDIF
|
|
ENDREPEAT
|
|
fWidth = END_TEXT_COMMAND_GET_SCREEN_WIDTH_OF_DISPLAY_TEXT(TRUE)
|
|
|
|
// Return the largest value
|
|
IF g_sMenuData.fTitleWidth > fWidth
|
|
RETURN g_sMenuData.fTitleWidth
|
|
ENDIF
|
|
|
|
RETURN fWidth
|
|
ENDFUNC
|
|
FUNC FLOAT GET_MENU_ITEM_COUNT_WIDTH(STRING sLabel, INT iCurrentItem, INT iTotalItems)
|
|
IF NOT IS_STRING_NULL(sLabel)
|
|
IF GET_HASH_KEY(sLabel) = 0
|
|
RETURN 0.0
|
|
ENDIF
|
|
ELSE
|
|
RETURN 0.0
|
|
ENDIF
|
|
SETUP_MENU_HEADING_TEXT()
|
|
BEGIN_TEXT_COMMAND_GET_SCREEN_WIDTH_OF_DISPLAY_TEXT(sLabel)
|
|
ADD_TEXT_COMPONENT_INTEGER(iCurrentItem)
|
|
ADD_TEXT_COMPONENT_INTEGER(iTotalItems)
|
|
RETURN END_TEXT_COMMAND_GET_SCREEN_WIDTH_OF_DISPLAY_TEXT(TRUE)
|
|
ENDFUNC
|
|
FUNC FLOAT GET_MENU_ITEM_TEXT_WIDTH(STRING sLabel)
|
|
IF NOT IS_STRING_NULL(sLabel)
|
|
IF GET_HASH_KEY(sLabel) = 0
|
|
RETURN 0.0
|
|
ENDIF
|
|
ELSE
|
|
RETURN 0.0
|
|
ENDIF
|
|
SETUP_MENU_ITEM_TEXT(FALSE)
|
|
BEGIN_TEXT_COMMAND_GET_SCREEN_WIDTH_OF_DISPLAY_TEXT(sLabel)
|
|
RETURN END_TEXT_COMMAND_GET_SCREEN_WIDTH_OF_DISPLAY_TEXT(TRUE)
|
|
ENDFUNC
|
|
FUNC FLOAT GET_LAST_MENU_ITEM_TEXT_WIDTH()
|
|
FLOAT fTotalWidth, fWidth, fHeight
|
|
INT iIntCount, iFloatCount, iIconCount, iPlayerNameCount, i
|
|
|
|
REPEAT g_sMenuData.iComponentCount i
|
|
IF g_sMenuData.eTextItemComps[g_sMenuData.iLastTextItem][i] = MENU_TEXT_COMP_TEXT
|
|
// Use the g_sMenuData.iLastTextItem int for array offset
|
|
ELIF g_sMenuData.eTextItemComps[g_sMenuData.iLastTextItem][i] = MENU_TEXT_COMP_VEHICLE_NAME
|
|
// Use the g_sMenuData.iLastTextItem int for array offset
|
|
ELIF g_sMenuData.eTextItemComps[g_sMenuData.iLastTextItem][i] = MENU_TEXT_COMP_INT
|
|
iIntCount++
|
|
ELIF g_sMenuData.eTextItemComps[g_sMenuData.iLastTextItem][i] = MENU_TEXT_COMP_FLOAT
|
|
iFloatCount++
|
|
ELIF g_sMenuData.eTextItemComps[g_sMenuData.iLastTextItem][i] = MENU_TEXT_COMP_ICON
|
|
iIconCount++
|
|
ELIF g_sMenuData.eTextItemComps[g_sMenuData.iLastTextItem][i] = MENU_TEXT_COMP_PLAYER_NAME
|
|
iPlayerNameCount++
|
|
ELIF g_sMenuData.eTextItemComps[g_sMenuData.iLastTextItem][i] = MENU_TEXT_COMP_RADIO_STATION
|
|
iPlayerNameCount++
|
|
ELIF g_sMenuData.eTextItemComps[g_sMenuData.iLastTextItem][i] = MENU_TEXT_COMP_LITERAL
|
|
iPlayerNameCount++
|
|
ELIF g_sMenuData.eTextItemComps[g_sMenuData.iLastTextItem][i] = MENU_TEXT_COMP_CONDENSED_LITERAL
|
|
iPlayerNameCount++
|
|
ENDIF
|
|
ENDREPEAT
|
|
|
|
SETUP_MENU_ITEM_TEXT(FALSE, TRUE, FALSE, FALSE, 0, (iPlayerNameCount > 0))
|
|
IF GET_HASH_KEY(g_sMenuData.tl15Item[g_sMenuData.iLastTextItem]) != 0
|
|
BEGIN_TEXT_COMMAND_GET_SCREEN_WIDTH_OF_DISPLAY_TEXT(g_sMenuData.tl15Item[g_sMenuData.iLastTextItem])
|
|
ENDIF
|
|
INT iCurrentText, iCurrentInt, iCurrentFloat, iCurrentPlayerName
|
|
REPEAT g_sMenuData.iComponentCount i
|
|
IF g_sMenuData.eTextItemComps[g_sMenuData.iLastTextItem][i] = MENU_TEXT_COMP_TEXT
|
|
iCurrentText++
|
|
IF GET_HASH_KEY(g_sMenuData.tl15Item[g_sMenuData.iLastTextItem]) != 0
|
|
ADD_TEXT_COMPONENT_SUBSTRING_TEXT_LABEL(g_sMenuData.tl15Item[g_sMenuData.iLastTextItem+iCurrentText])
|
|
ENDIF
|
|
ELIF g_sMenuData.eTextItemComps[g_sMenuData.iLastTextItem][i] = MENU_TEXT_COMP_VEHICLE_NAME
|
|
iCurrentText++
|
|
IF GET_HASH_KEY(g_sMenuData.tl15Item[g_sMenuData.iLastTextItem]) != 0
|
|
ADD_TEXT_COMPONENT_SUBSTRING_TEXT_LABEL(g_sMenuData.tl15Item[g_sMenuData.iLastTextItem+iCurrentText])
|
|
ENDIF
|
|
ELIF g_sMenuData.eTextItemComps[g_sMenuData.iLastTextItem][i] = MENU_TEXT_COMP_INT
|
|
IF GET_HASH_KEY(g_sMenuData.tl15Item[g_sMenuData.iLastTextItem]) != 0
|
|
ADD_TEXT_COMPONENT_INTEGER(g_sMenuData.iItem[g_sMenuData.iCurrentIntItem-iIntCount+iCurrentInt])
|
|
ENDIF
|
|
iCurrentInt++
|
|
ELIF g_sMenuData.eTextItemComps[g_sMenuData.iLastTextItem][i] = MENU_TEXT_COMP_FLOAT
|
|
IF GET_HASH_KEY(g_sMenuData.tl15Item[g_sMenuData.iLastTextItem]) != 0
|
|
ADD_TEXT_COMPONENT_FLOAT(g_sMenuData.fItem[g_sMenuData.iCurrentFloatItem-iFloatCount+iCurrentFloat], g_sMenuData.iFloatDP[g_sMenuData.iCurrentFloatItem-iFloatCount+iCurrentFloat])
|
|
ENDIF
|
|
iCurrentFloat++
|
|
ELIF g_sMenuData.eTextItemComps[g_sMenuData.iLastTextItem][i] = MENU_TEXT_COMP_PLAYER_NAME
|
|
IF GET_HASH_KEY(g_sMenuData.tl15Item[g_sMenuData.iLastTextItem]) != 0
|
|
ADD_TEXT_COMPONENT_SUBSTRING_PLAYER_NAME(g_TUMenuGlobals_tlPlayerNameItem[g_sMenuData.iCurrentPlayerNameItem-iPlayerNameCount+iCurrentPlayerName])
|
|
ENDIF
|
|
iCurrentPlayerName++
|
|
ELIF g_sMenuData.eTextItemComps[g_sMenuData.iLastTextItem][i] = MENU_TEXT_COMP_RADIO_STATION
|
|
IF GET_HASH_KEY(g_sMenuData.tl15Item[g_sMenuData.iLastTextItem]) != 0
|
|
ADD_TEXT_COMPONENT_SUBSTRING_TEXT_LABEL(g_TUMenuGlobals_tlPlayerNameItem[g_sMenuData.iCurrentPlayerNameItem-iPlayerNameCount+iCurrentPlayerName])
|
|
ENDIF
|
|
iCurrentPlayerName++
|
|
ELIF g_sMenuData.eTextItemComps[g_sMenuData.iLastTextItem][i] = MENU_TEXT_COMP_LITERAL
|
|
IF GET_HASH_KEY(g_sMenuData.tl15Item[g_sMenuData.iLastTextItem]) != 0
|
|
ADD_TEXT_COMPONENT_SUBSTRING_PLAYER_NAME(g_TUMenuGlobals_tlPlayerNameItem[g_sMenuData.iCurrentPlayerNameItem-iPlayerNameCount+iCurrentPlayerName])
|
|
ENDIF
|
|
iCurrentPlayerName++
|
|
ELIF g_sMenuData.eTextItemComps[g_sMenuData.iLastTextItem][i] = MENU_TEXT_COMP_CONDENSED_LITERAL
|
|
IF GET_HASH_KEY(g_sMenuData.tl15Item[g_sMenuData.iLastTextItem]) != 0
|
|
ADD_TEXT_COMPONENT_SUBSTRING_PLAYER_NAME(g_TUMenuGlobals_tlPlayerNameItem[g_sMenuData.iCurrentPlayerNameItem-iPlayerNameCount+iCurrentPlayerName])
|
|
ENDIF
|
|
iCurrentPlayerName++
|
|
ENDIF
|
|
ENDREPEAT
|
|
IF GET_HASH_KEY(g_sMenuData.tl15Item[g_sMenuData.iLastTextItem]) != 0
|
|
fTotalWidth = END_TEXT_COMMAND_GET_SCREEN_WIDTH_OF_DISPLAY_TEXT(TRUE)
|
|
ENDIF
|
|
|
|
REPEAT iIconCount i
|
|
IF g_sMenuData.eIconItem[g_sMenuData.iCurrentIconItem-iIconCount+i] <> MENU_ICON_DUMMY
|
|
GET_MENU_ICON_SCREEN_RESOLUTION(g_sMenuData.eIconItem[g_sMenuData.iCurrentIconItem-iIconCount+i], TRUE, FALSE, fWidth, fHeight)
|
|
fTotalWidth += fWidth
|
|
ENDIF
|
|
ENDREPEAT
|
|
|
|
RETURN fTotalWidth
|
|
ENDFUNC
|
|
|
|
FUNC FLOAT GET_MENU_ITEM_TEXT_WIDTH_WITH_INT(STRING sLabel, INT iNumber)
|
|
IF NOT DOES_TEXT_LABEL_EXIST(sLabel)
|
|
RETURN 0.0
|
|
ENDIF
|
|
SETUP_MENU_ITEM_TEXT(TRUE)
|
|
BEGIN_TEXT_COMMAND_GET_SCREEN_WIDTH_OF_DISPLAY_TEXT(sLabel)
|
|
ADD_TEXT_COMPONENT_INTEGER(iNumber)
|
|
RETURN END_TEXT_COMMAND_GET_SCREEN_WIDTH_OF_DISPLAY_TEXT(TRUE)
|
|
ENDFUNC
|
|
FUNC FLOAT GET_MENU_ITEM_TEXT_WIDTH_WITH_FLOAT(STRING sLabel, FLOAT fNumber, INT iDecimalPlaces)
|
|
IF NOT DOES_TEXT_LABEL_EXIST(sLabel)
|
|
RETURN 0.0
|
|
ENDIF
|
|
SETUP_MENU_ITEM_TEXT(TRUE)
|
|
BEGIN_TEXT_COMMAND_GET_SCREEN_WIDTH_OF_DISPLAY_TEXT(sLabel)
|
|
ADD_TEXT_COMPONENT_FLOAT(fNumber, iDecimalPlaces)
|
|
RETURN END_TEXT_COMMAND_GET_SCREEN_WIDTH_OF_DISPLAY_TEXT(TRUE)
|
|
ENDFUNC
|
|
FUNC FLOAT GET_MENU_ITEM_TEXT_WIDTH_WITH_LITERAL(STRING sLabel, STRING sLiteral, BOOL bCondensedFont = FALSE)
|
|
IF NOT DOES_TEXT_LABEL_EXIST(sLabel)
|
|
RETURN 0.0
|
|
ENDIF
|
|
SETUP_MENU_ITEM_TEXT(TRUE, DEFAULT, DEFAULT, DEFAULT, DEFAULT, DEFAULT, bCondensedFont)
|
|
BEGIN_TEXT_COMMAND_GET_SCREEN_WIDTH_OF_DISPLAY_TEXT(sLabel)
|
|
ADD_TEXT_COMPONENT_SUBSTRING_PLAYER_NAME(sLiteral)
|
|
RETURN END_TEXT_COMMAND_GET_SCREEN_WIDTH_OF_DISPLAY_TEXT(TRUE)
|
|
ENDFUNC
|
|
|
|
FUNC FLOAT GET_MENU_ITEM_TEXT_HEIGHT(STRING sLabel)
|
|
// At some point we may add multiply this value by the number of lines that the string occupies
|
|
// We would need to add x/y screen and wrap coords.
|
|
|
|
IF NOT DOES_TEXT_LABEL_EXIST(sLabel)
|
|
ENDIF
|
|
RETURN GET_RENDERED_CHARACTER_HEIGHT(CUSTOM_MENU_TEXT_SCALE_Y)
|
|
ENDFUNC
|
|
FUNC FLOAT GET_LAST_MENU_ITEM_TEXT_HEIGHT()
|
|
// At some point we may add multiply this value by the number of lines that the string occupies
|
|
// We would need to add x/y screen and wrap coords.
|
|
|
|
INT i, iIconCount
|
|
FLOAT fFinalHeight, fWidth, fHeight
|
|
|
|
REPEAT g_sMenuData.iComponentCount i
|
|
IF g_sMenuData.eTextItemComps[g_sMenuData.iLastTextItem][i] = MENU_TEXT_COMP_ICON
|
|
iIconCount++
|
|
ENDIF
|
|
ENDREPEAT
|
|
REPEAT iIconCount i
|
|
IF g_sMenuData.eIconItem[g_sMenuData.iCurrentIconItem-iIconCount+i] <> MENU_ICON_DUMMY
|
|
IF GET_MENU_ICON_SCREEN_RESOLUTION(g_sMenuData.eIconItem[g_sMenuData.iCurrentIconItem-iIconCount+i], TRUE, FALSE, fWidth, fHeight)
|
|
IF fHeight > fFinalHeight
|
|
fFinalHeight = fHeight
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ENDREPEAT
|
|
|
|
IF fFinalHeight > GET_RENDERED_CHARACTER_HEIGHT(CUSTOM_MENU_TEXT_SCALE_Y)
|
|
RETURN fFinalHeight
|
|
ENDIF
|
|
|
|
RETURN GET_RENDERED_CHARACTER_HEIGHT(CUSTOM_MENU_TEXT_SCALE_Y)
|
|
ENDFUNC
|
|
FUNC FLOAT GET_MENU_ITEM_TEXT_HEIGHT_WITH_INT(STRING sLabel, INT iNumber)
|
|
// At some point we may add multiply this value by the number of lines that the string occupies
|
|
// We would need to add x/y screen and wrap coords.
|
|
|
|
IF NOT DOES_TEXT_LABEL_EXIST(sLabel)
|
|
ENDIF
|
|
IF iNumber = 0
|
|
ENDIF
|
|
RETURN GET_RENDERED_CHARACTER_HEIGHT(CUSTOM_MENU_TEXT_SCALE_Y)
|
|
ENDFUNC
|
|
FUNC FLOAT GET_MENU_ITEM_TEXT_HEIGHT_WITH_FLOAT(STRING sLabel, FLOAT fNumber, INT iDecimalPlaces)
|
|
// At some point we may add multiply this value by the number of lines that the string occupies
|
|
// We would need to add x/y screen and wrap coords.
|
|
|
|
IF NOT DOES_TEXT_LABEL_EXIST(sLabel)
|
|
ENDIF
|
|
IF fNumber = 0
|
|
ENDIF
|
|
IF iDecimalPlaces = 0
|
|
ENDIF
|
|
RETURN GET_RENDERED_CHARACTER_HEIGHT(CUSTOM_MENU_TEXT_SCALE_Y)
|
|
ENDFUNC
|
|
|
|
/// PURPOSE: Resets all the stored menu data back to the default state
|
|
PROC CLEAR_MENU_DATA(BOOL bUseActualRes = FALSE, BOOL bClearSelectable = FALSE)
|
|
DEBUG_PRINTCALLSTACK()
|
|
INT i, j
|
|
REPEAT MAX_STORED_MENU_TEXT_LABELS i
|
|
g_sMenuData.tl15Item[i] = ""
|
|
REPEAT MAX_STORED_TEXT_COMPS j
|
|
g_sMenuData.eTextItemComps[i][j] = MENU_TEXT_COMP_DUMMY
|
|
ENDREPEAT
|
|
ENDREPEAT
|
|
REPEAT MAX_STORED_MENU_PLAYER_NAMES i
|
|
g_TUMenuGlobals_tlPlayerNameItem[i] = ""
|
|
ENDREPEAT
|
|
REPEAT MAX_STORED_MENU_INTS i
|
|
g_sMenuData.iItem[i] = 0
|
|
ENDREPEAT
|
|
REPEAT MAX_STORED_MENU_FLOATS i
|
|
g_sMenuData.fItem[i] = 0.0
|
|
ENDREPEAT
|
|
REPEAT MAX_STORED_MENU_ICONS i
|
|
g_sMenuData.eIconItem[i] = MENU_ICON_DUMMY
|
|
ENDREPEAT
|
|
REPEAT MAX_MENU_ROWS i
|
|
g_sMenuData.iItemBitset[i] = 0
|
|
g_sMenuData.bMenuRowDoesntAddToCount[i] = FALSE
|
|
g_sMenuData.bMenuRowHasSpacer[i] = FALSE
|
|
g_sMenuData.fMenuItemScreenY[i] = 0.0
|
|
g_sMenuData.bMenuRowHasDisplayItems[i] = FALSE
|
|
g_sMenuData.fRowHeight[i] = 0.0
|
|
ENDREPEAT
|
|
REPEAT MAX_MENU_COLUMNS i
|
|
g_sMenuData.eItemLayout[i] = MENU_ITEM_DUMMY
|
|
g_sMenuData.fColumnWidth[i] = 0.0
|
|
g_sMenuData.fColumnXOffset[i] = -1.0
|
|
g_sMenuData.bItemToggleable[i] = FALSE
|
|
g_sMenuData.eJustification[i] = FONT_LEFT
|
|
ENDREPEAT
|
|
REPEAT MAX_STORED_HELP_KEYS i
|
|
g_sMenuData.tl15HelpText[i] = ""
|
|
g_sMenuData.iHelpTextINT[i] = -1
|
|
g_sMenuData.caHelpTextInput[i] = MAX_INPUTS
|
|
g_sMenuData.caHelpTextInputGroup[i] = MAX_INPUTGROUPS
|
|
ENDREPEAT
|
|
REPEAT CUSTOM_MENU_ICON_COUNT i
|
|
g_sMenuData.sIconTXDOverride[i] = ""
|
|
g_sMenuData.sIconTextureOverride[i] = ""
|
|
ENDREPEAT
|
|
IF bClearSelectable
|
|
REPEAT MAX_STORED_MENU_TEXT_LABELS i
|
|
g_sMenuData.bIsSelectable[i] = FALSE
|
|
ENDREPEAT
|
|
ENDIF
|
|
#IF USE_TU_CHANGES
|
|
// HELP KEY OVERFLOW
|
|
g_sMenuData_TU.tl15HelpText = ""
|
|
g_sMenuData_TU.iHelpTextINT = -1
|
|
#ENDIF
|
|
|
|
g_sMenuData.bUseHeaderGraphic = FALSE
|
|
// g_sMenuData.bForceFooter = FALSE
|
|
|
|
g_sMenuData.iCurrentRow = 0
|
|
g_sMenuData.iCurrentColumn = 0
|
|
g_sMenuData.iCurrentTextItem = 0
|
|
g_sMenuData.iCurrentIntItem = 0
|
|
g_sMenuData.iCurrentFloatItem = 0
|
|
g_sMenuData.iCurrentIconItem = 0
|
|
g_sMenuData.iCurrentPlayerNameItem = 0
|
|
g_sMenuData.bDisplayCurrentItemToggles = FALSE
|
|
g_sMenuData.bDefaultOptionAdded = FALSE
|
|
|
|
g_sMenuData.iCurrentItem = 0
|
|
g_sMenuData.iTopItem = 0
|
|
g_sMenuData.iLastDisplayItem = 0
|
|
|
|
g_sMenuData.tl23Desc = ""
|
|
g_sMenuData.iDescTotalParams = 0
|
|
g_sMenuData.iDescIntParams = 0
|
|
g_sMenuData.iDescFloatParams = 0
|
|
g_sMenuData.iDescTextParams = 0
|
|
g_sMenuData.iDescClearTimer = 0
|
|
g_sMenuData.iDescStartTimer = 0
|
|
REPEAT MAX_STORED_TEXT_COMPS i
|
|
g_sMenuData.eDescComps[i] = MENU_TEXT_COMP_DUMMY
|
|
ENDREPEAT
|
|
g_sMenuData.eDescIcon = MENU_ICON_DUMMY
|
|
|
|
g_sMenuData_TU.tl15Discount = ""
|
|
g_sMenuData_TU.iDiscountTotalParams = 0
|
|
g_sMenuData_TU.iDiscountIntParams = 0
|
|
g_sMenuData_TU.iDiscountFloatParams = 0
|
|
g_sMenuData_TU.iDiscountTextParams = 0
|
|
g_sMenuData_TU.iDiscountClearTimer = 0
|
|
g_sMenuData_TU.iDiscountStartTimer = 0
|
|
REPEAT MAX_STORED_TEXT_COMPS i
|
|
g_sMenuData_TU.eDiscountComps[i] = MENU_TEXT_COMP_DUMMY
|
|
ENDREPEAT
|
|
g_sMenuData_TU.eDiscountIcon = MENU_ICON_DUMMY
|
|
|
|
|
|
g_sMenuData.tl15Title = ""
|
|
g_sMenuData.fTitleWidth = 0.0
|
|
g_sMenuData.iTitleTotalParams = 0
|
|
g_sMenuData.iTitleIntParams = 0
|
|
g_sMenuData.iTitleFloatParams = 0
|
|
g_sMenuData.iTitleTextParams = 0
|
|
g_sMenuData.iTitlePlayerNameParams = 0
|
|
REPEAT MAX_STORED_TEXT_COMPS i
|
|
g_sMenuData.eTitleComps[i] = MENU_TEXT_COMP_DUMMY
|
|
ENDREPEAT
|
|
|
|
g_sMenuData.eLastAddedItemType = MENU_ITEM_DUMMY
|
|
g_sMenuData.iComponentCount = 0
|
|
g_sMenuData.iComponentItems = 0
|
|
g_sMenuData.iLastTextItem = 0
|
|
g_sMenuData.iHelpCount = 0
|
|
g_sMenuData.bHelpCreated = FALSE
|
|
|
|
g_sMenuData.iMenuRows = 10
|
|
g_sMenuData.iMenuColumns = 0
|
|
|
|
g_sMenuData.fMenuFinalScreenY = 0.0
|
|
g_sMenuData.fCurrentItemScreenY = 0.0
|
|
|
|
g_sMenuData.bSetupComplete = FALSE
|
|
g_sMenuData.bDisplayRowsDefined = FALSE
|
|
g_sMenuData.fSetupFinalBodyY = 0.0
|
|
g_sMenuData.iSetupTotalRows = 0
|
|
g_sMenuData.iSetupTotalSelectableRows = 0
|
|
g_sMenuData.iSetupTotalDisplayRows = 0
|
|
g_sMenuData.iSetupCurrentSelectableItem = 0
|
|
|
|
g_sMenuData.bOverrideTitleRowCounts = FALSE
|
|
g_sMenuData.iTitleRowOverride1 = 0
|
|
g_sMenuData.iTitleRowOverride2 = 0
|
|
|
|
g_sMenuData.bUseCustomRowColour = FALSE
|
|
|
|
REPEAT MAX_COLOURED_ITEMS i
|
|
g_sMenuData.iCarColourItem[i] = -1
|
|
g_sMenuData.iCarColour[i] = -1
|
|
ENDREPEAT
|
|
g_sMenuData.fHelpKeyClearSpace = 0.0
|
|
g_sMenuData.iHelpKeyIsClickableBits = 0
|
|
g_sMenuData.bStackedKeys = FALSE
|
|
|
|
REPEAT COUNT_OF(g_sMenuData.iRowIsGrayedOutBS) i
|
|
g_sMenuData.iRowIsGrayedOutBS[i] = 0
|
|
ENDREPEAT
|
|
|
|
g_sMenuData.bUseCustomHeaderTextColour = FALSE
|
|
g_sMenuData.bUseCustomHeaderColour = FALSE
|
|
g_sMenuData.bUseCustomBodyColour = FALSE
|
|
g_sMenuData.bUseCustomFooterColour = FALSE
|
|
g_sMenuData.bUseCustomHelpColour = FALSE
|
|
g_sMenuData.bUseCustomSelectionBarColour = FALSE
|
|
g_sMenuData.bUseInvertedScrollColour = FALSE
|
|
|
|
CUSTOM_MENU_X = 0.05
|
|
CUSTOM_MENU_Y = 0.05
|
|
CUSTOM_MENU_W = 0.225
|
|
|
|
// Force the menu width to match the current screen size.
|
|
FLOAT fScreenAspectRatio = GET_ASPECT_RATIO(FALSE)
|
|
IF bUseActualRes
|
|
// Scales the menu width depending on the aspect ratio (fake) and normalises against a 16:9 ratio
|
|
CUSTOM_MENU_W = ( 0.225 * ( CUSTOM_MENU_SIXTEEN_BY_NINE_ASPECT / fScreenAspectRatio ) )
|
|
ELSE
|
|
IF fScreenAspectRatio < 1.77777
|
|
CUSTOM_MENU_W = ( 0.225 * ( CUSTOM_MENU_SIXTEEN_BY_NINE_ASPECT / fScreenAspectRatio ) )
|
|
ELSE
|
|
CUSTOM_MENU_W = 0.225
|
|
ENDIF
|
|
ENDIF
|
|
ENDPROC
|
|
|
|
/// PURPOSE: Define the item layout for a menu row
|
|
PROC SET_MENU_ITEM_LAYOUT(MENU_ITEM_TYPE param1 = MENU_ITEM_DUMMY, MENU_ITEM_TYPE param2 = MENU_ITEM_DUMMY, MENU_ITEM_TYPE param3 = MENU_ITEM_DUMMY, MENU_ITEM_TYPE param4 = MENU_ITEM_DUMMY, MENU_ITEM_TYPE param5 = MENU_ITEM_DUMMY)
|
|
g_sMenuData.eItemLayout[0] = param1
|
|
g_sMenuData.eItemLayout[1] = param2
|
|
g_sMenuData.eItemLayout[2] = param3
|
|
g_sMenuData.eItemLayout[3] = param4
|
|
g_sMenuData.eItemLayout[4] = param5
|
|
|
|
g_sMenuData.iMenuColumns = 0
|
|
IF param1 != MENU_ITEM_DUMMY g_sMenuData.iMenuColumns++ ENDIF
|
|
IF param2 != MENU_ITEM_DUMMY g_sMenuData.iMenuColumns++ ENDIF
|
|
IF param3 != MENU_ITEM_DUMMY g_sMenuData.iMenuColumns++ ENDIF
|
|
IF param4 != MENU_ITEM_DUMMY g_sMenuData.iMenuColumns++ ENDIF
|
|
IF param5 != MENU_ITEM_DUMMY g_sMenuData.iMenuColumns++ ENDIF
|
|
ENDPROC
|
|
|
|
/// PURPOSE: Sets the x offset for the given menu item
|
|
/// NOTE: This offset is from the x pos of the menu, not the previous column
|
|
PROC SET_MENU_ITEM_X_OFFSET(FLOAT param1 = -1.0, FLOAT param2 = -1.0, FLOAT param3 = -1.0, FLOAT param4 = -1.0, FLOAT param5 = -1.0)
|
|
g_sMenuData.fColumnXOffset[0] = param1
|
|
g_sMenuData.fColumnXOffset[1] = param2
|
|
g_sMenuData.fColumnXOffset[2] = param3
|
|
g_sMenuData.fColumnXOffset[3] = param4
|
|
g_sMenuData.fColumnXOffset[4] = param5
|
|
ENDPROC
|
|
|
|
/// PURPOSE: Sets the cell alignment of a given menu item
|
|
PROC SET_MENU_ITEM_JUSTIFICATION(eTextJustification param1 = FONT_LEFT, eTextJustification param2 = FONT_LEFT, eTextJustification param3 = FONT_LEFT, eTextJustification param4 = FONT_LEFT, eTextJustification param5 = FONT_LEFT)
|
|
g_sMenuData.eJustification[0] = param1
|
|
g_sMenuData.eJustification[1] = param2
|
|
g_sMenuData.eJustification[2] = param3
|
|
g_sMenuData.eJustification[3] = param4
|
|
g_sMenuData.eJustification[4] = param5
|
|
ENDPROC
|
|
|
|
/// PURPOSE: Sets the width of a given menu item
|
|
PROC SET_MENU_ITEM_TOGGLEABLE(BOOL param1 = FALSE, BOOL param2 = FALSE, BOOL param3 = FALSE, BOOL param4 = FALSE, BOOL param5 = FALSE)
|
|
g_sMenuData.bItemToggleable[0] = param1
|
|
g_sMenuData.bItemToggleable[1] = param2
|
|
g_sMenuData.bItemToggleable[2] = param3
|
|
g_sMenuData.bItemToggleable[3] = param4
|
|
g_sMenuData.bItemToggleable[4] = param5
|
|
ENDPROC
|
|
|
|
/// PURPOSE: Sets the number of rows in the menu
|
|
/// NOTE: This will get set to 10 when CLEAR_MENU_DATA() is called
|
|
PROC SET_MENU_ROW_ADDS_TO_COUNT(INT paramRow, BOOL paramAddToCount)
|
|
g_sMenuData.bMenuRowDoesntAddToCount[paramRow] = !paramAddToCount
|
|
ENDPROC
|
|
|
|
/// PURPOSE: Sets the number of rows in the menu
|
|
/// NOTE: This will get set to 10 when CLEAR_MENU_DATA() is called
|
|
PROC SET_MAX_MENU_ROWS_TO_DISPLAY(INT paramMaxRowsToDisplay)
|
|
g_sMenuData.iMenuRows = paramMaxRowsToDisplay
|
|
ENDPROC
|
|
|
|
/// PURPOSE: Gets the number of rows in the menu
|
|
FUNC INT GET_MAX_MENU_ROWS_TO_DISPLAY()
|
|
RETURN g_sMenuData.iMenuRows
|
|
ENDFUNC
|
|
|
|
/// PURPOSE: Sets the x pos of the menu, default is 0.05
|
|
PROC SET_MENU_X_POS(FLOAT paramMenuXPos)
|
|
CUSTOM_MENU_X = paramMenuXPos
|
|
ENDPROC
|
|
|
|
/// PURPOSE: Sets the clear space for menu help keys
|
|
PROC SET_MENU_HELP_CLEAR_SPACE(FLOAT fScreenPercent)
|
|
g_sMenuData.fHelpKeyClearSpace = fScreenPercent
|
|
ENDPROC
|
|
|
|
/// PURPOSE: Sets if the help keys should be stacked
|
|
PROC SET_MENU_HELP_KEYS_STACKED(BOOL bStacked)
|
|
g_sMenuData.bStackedKeys = bStacked
|
|
ENDPROC
|
|
|
|
PROC SET_MENU_ITEM_ICON_TEXTURE_OVERRIDE(MENU_ICON_TYPE paramIcon, STRING paramTXDOverride, STRING paramTextureOverride)
|
|
g_sMenuData.sIconTXDOverride[paramIcon] = paramTXDOverride
|
|
g_sMenuData.sIconTextureOverride[paramIcon] = paramTextureOverride
|
|
ENDPROC
|
|
|
|
PROC SET_MENU_HEADER_COLOUR(INT iRed, INT iGreen, INT iBlue, INT iAlpha, BOOL bUseCustomColour)
|
|
g_sMenuData.bUseCustomHeaderColour = bUseCustomColour
|
|
g_sMenuData.iHeaderR = iRed
|
|
g_sMenuData.iHeaderG = iGreen
|
|
g_sMenuData.iHeaderB = iBlue
|
|
g_sMenuData.iHeaderA = iAlpha
|
|
ENDPROC
|
|
|
|
PROC SET_MENU_HEADER_TEXT_COLOUR(INT iRed, INT iGreen, INT iBlue, INT iAlpha, BOOL bUseCustomColour)
|
|
g_sMenuData.bUseCustomHeaderTextColour = bUseCustomColour
|
|
g_sMenuData.iHeaderTextR = iRed
|
|
g_sMenuData.iHeaderTextG = iGreen
|
|
g_sMenuData.iHeaderTextB = iBlue
|
|
g_sMenuData.iHeaderTextA = iAlpha
|
|
ENDPROC
|
|
|
|
PROC SET_MENU_BODY_COLOUR(INT iRed, INT iGreen, INT iBlue, INT iAlpha, BOOL bUseCustomColour)
|
|
g_sMenuData.bUseCustomBodyColour = bUseCustomColour
|
|
g_sMenuData.iBodyR = iRed
|
|
g_sMenuData.iBodyG = iGreen
|
|
g_sMenuData.iBodyB = iBlue
|
|
g_sMenuData.iBodyA = iAlpha
|
|
ENDPROC
|
|
|
|
PROC SET_MENU_FOOTER_COLOUR(INT iRed, INT iGreen, INT iBlue, INT iAlpha, BOOL bUseCustomColour)
|
|
g_sMenuData.bUseCustomFooterColour = bUseCustomColour
|
|
g_sMenuData.iFooterR = iRed
|
|
g_sMenuData.iFooterG = iGreen
|
|
g_sMenuData.iFooterB = iBlue
|
|
g_sMenuData.iFooterA = iAlpha
|
|
ENDPROC
|
|
|
|
PROC SET_MENU_HELP_COLOUR(INT iRed, INT iGreen, INT iBlue, INT iAlpha, BOOL bUseCustomColour)
|
|
g_sMenuData.bUseCustomHelpColour = bUseCustomColour
|
|
g_sMenuData.iHelpR = iRed
|
|
g_sMenuData.iHelpG = iGreen
|
|
g_sMenuData.iHelpB = iBlue
|
|
g_sMenuData.iHelpA = iAlpha
|
|
ENDPROC
|
|
|
|
PROC SET_MENU_SELECTION_BAR_COLOUR(HUD_COLOURS paramColour, BOOL bUseCustomColour)
|
|
g_sMenuData.bUseCustomSelectionBarColour = bUseCustomColour
|
|
g_sMenuData.eSelectionBarColour = paramColour
|
|
ENDPROC
|
|
|
|
PROC SET_MENU_ROW_TEXT_COLOUR(INT paramRow, HUD_COLOURS paramColourDefault, HUD_COLOURS paramColourSelected, BOOL bUseCustomColour)
|
|
g_sMenuData.bUseCustomRowColour = bUseCustomColour
|
|
g_sMenuData.eRowColour[0] = paramColourDefault
|
|
g_sMenuData.eRowColour[1] = paramColourSelected
|
|
g_sMenuData.iCustomRowColour = paramRow
|
|
ENDPROC
|
|
|
|
PROC SET_MENU_USES_INVERTED_SCROLL_ICON(BOOL bUseInvertedScrollColour)
|
|
g_sMenuData.bUseInvertedScrollColour = bUseInvertedScrollColour
|
|
ENDPROC
|
|
|
|
PROC SET_CURSOR_POSITION_FOR_MENU()
|
|
|
|
IF IS_PC_VERSION()
|
|
SET_CURSOR_POSITION(0.325, 0.3)//0.2)
|
|
// SET_CURSOR_POSITION(CUSTOM_MENU_X+(CUSTOM_MENU_W/2.0), CUSTOM_MENU_Y+(CUSTOM_MENU_ITEM_BAR_H*TO_FLOAT(iStartItem)))
|
|
ENDIF
|
|
|
|
ENDPROC
|
|
|
|
|
|
//////////////////////////////////////////////////////////////////////////////
|
|
///
|
|
/// HEADER
|
|
///
|
|
|
|
/// PURPOSE: Set the header graphic
|
|
PROC SET_MENU_USES_HEADER_GRAPHIC(BOOL paramUseGraphic, STRING paramGraphicTXD, STRING paramGraphicTexture)
|
|
g_sMenuData.bUseHeaderGraphic = paramUseGraphic
|
|
SET_MENU_ITEM_ICON_TEXTURE_OVERRIDE(MENU_ICON_HEADER, paramGraphicTXD, paramGraphicTexture)
|
|
ENDPROC
|
|
|
|
|
|
//////////////////////////////////////////////////////////////////////////////
|
|
///
|
|
/// TITLE
|
|
///
|
|
|
|
/// PURPOSE: Set the menu title
|
|
PROC SET_MENU_TITLE(STRING paramLabel)
|
|
g_sMenuData.tl15Title = paramLabel
|
|
g_sMenuData.iTitleTotalParams = 0
|
|
g_sMenuData.iTitleIntParams = 0
|
|
g_sMenuData.iTitleFloatParams = 0
|
|
g_sMenuData.iTitleTextParams = 0
|
|
g_sMenuData.iTitlePlayerNameParams = 0
|
|
|
|
INT i
|
|
REPEAT MAX_STORED_TEXT_COMPS i
|
|
g_sMenuData.eTitleComps[i] = MENU_TEXT_COMP_DUMMY
|
|
ENDREPEAT
|
|
ENDPROC
|
|
/// PURPOSE: Adds an int to the item description
|
|
PROC ADD_MENU_TITLE_INT(INT paramInt)
|
|
IF g_sMenuData.iTitleIntParams >= MAX_STORED_DESC_INTS
|
|
OR g_sMenuData.iTitleTotalParams >= MAX_STORED_TEXT_COMPS
|
|
#IF IS_DEBUG_BUILD
|
|
CASSERTLN(DEBUG_SYSTEM, "ADD_MENU_TITLE_INT: Unable to add new param. If you need more params tell Kenneth R.")
|
|
#ENDIF
|
|
EXIT
|
|
ENDIF
|
|
g_sMenuData.eTitleComps[g_sMenuData.iTitleTotalParams] = MENU_TEXT_COMP_INT
|
|
g_sMenuData.iTitleTotalParams++
|
|
|
|
g_sMenuData.iTitleInt[g_sMenuData.iTitleIntParams] = paramInt
|
|
g_sMenuData.iTitleIntParams++
|
|
ENDPROC
|
|
/// PURPOSE: Adds a float to the item description
|
|
PROC ADD_MENU_TITLE_FLOAT(FLOAT paramFloat, INT paramDecimalPlaces = 1)
|
|
IF g_sMenuData.iTitleFloatParams >= MAX_STORED_DESC_FLOATS
|
|
OR g_sMenuData.iTitleTotalParams >= MAX_STORED_TEXT_COMPS
|
|
#IF IS_DEBUG_BUILD
|
|
CASSERTLN(DEBUG_SYSTEM, "ADD_MENU_TITLE_FLOAT: Unable to add new param. If you need more params tell Kenneth R.")
|
|
#ENDIF
|
|
EXIT
|
|
ENDIF
|
|
g_sMenuData.eTitleComps[g_sMenuData.iTitleTotalParams] = MENU_TEXT_COMP_FLOAT
|
|
g_sMenuData.iTitleTotalParams++
|
|
|
|
g_sMenuData.fTitleFloat[g_sMenuData.iTitleFloatParams] = paramFloat
|
|
g_sMenuData.iTitleFloatDP[g_sMenuData.iTitleFloatParams] = paramDecimalPlaces
|
|
g_sMenuData.iTitleFloatParams++
|
|
ENDPROC
|
|
/// PURPOSE: Adds a float to the item description
|
|
PROC ADD_MENU_TITLE_STRING(STRING paramSubString)
|
|
IF g_sMenuData.iTitleTextParams >= MAX_STORED_DESC_STRINGS
|
|
OR g_sMenuData.iTitleTotalParams >= MAX_STORED_TEXT_COMPS
|
|
#IF IS_DEBUG_BUILD
|
|
CASSERTLN(DEBUG_SYSTEM, "ADD_MENU_TITLE_STRING: Unable to add new param. If you need more params tell Kenneth R.")
|
|
#ENDIF
|
|
EXIT
|
|
ENDIF
|
|
g_sMenuData.eTitleComps[g_sMenuData.iTitleTotalParams] = MENU_TEXT_COMP_TEXT
|
|
g_sMenuData.iTitleTotalParams++
|
|
|
|
g_sMenuData.tl15TitleText[g_sMenuData.iTitleTextParams] = paramSubString
|
|
g_sMenuData.iTitleTextParams++
|
|
ENDPROC
|
|
/// PURPOSE: Adds a player name to the title
|
|
PROC ADD_PLAYER_NAME_TO_MENU_TITLE(TEXT_LABEL_63 tlPlayerNameItem)
|
|
|
|
IF g_sMenuData.iTitlePlayerNameParams >= MAX_STORED_DESC_PLAYER_NAMES
|
|
OR g_sMenuData.iTitleTotalParams >= MAX_STORED_TEXT_COMPS
|
|
#IF IS_DEBUG_BUILD
|
|
CASSERTLN(DEBUG_SYSTEM, "ADD_PLAYER_NAME_TO_MENU_TITLE: Unable to add new param. If you need more params tell Kenneth R.")
|
|
#ENDIF
|
|
EXIT
|
|
ENDIF
|
|
|
|
g_sMenuData.eTitleComps[g_sMenuData.iTitleTotalParams] = MENU_TEXT_COMP_PLAYER_NAME
|
|
g_sMenuData.iTitleTotalParams++
|
|
|
|
g_sMenuData.tlTitlePlayerName[g_sMenuData.iTitlePlayerNameParams] = tlPlayerNameItem
|
|
g_sMenuData.iTitlePlayerNameParams++
|
|
ENDPROC
|
|
/// PURPOSE: Adds a player name to the title
|
|
PROC ADD_LITERAL_TO_MENU_TITLE(STRING paramLiteral)
|
|
|
|
IF g_sMenuData.iTitlePlayerNameParams >= MAX_STORED_DESC_PLAYER_NAMES
|
|
OR g_sMenuData.iTitleTotalParams >= MAX_STORED_TEXT_COMPS
|
|
#IF IS_DEBUG_BUILD
|
|
CASSERTLN(DEBUG_SYSTEM, "ADD_LITERAL_TO_MENU_TITLE: Unable to add new param. If you need more params tell Kenneth R.")
|
|
#ENDIF
|
|
EXIT
|
|
ENDIF
|
|
|
|
g_sMenuData.eTitleComps[g_sMenuData.iTitleTotalParams] = MENU_TEXT_COMP_LITERAL
|
|
g_sMenuData.iTitleTotalParams++
|
|
|
|
g_sMenuData.tlTitlePlayerName[g_sMenuData.iTitlePlayerNameParams] = paramLiteral
|
|
g_sMenuData.iTitlePlayerNameParams++
|
|
ENDPROC
|
|
/// PURPOSE: Adds a radio station name to the title
|
|
PROC ADD_RADIO_STATION_NAME_TO_MENU_TITLE(TEXT_LABEL_31 tlRadioStationItem)
|
|
|
|
IF g_sMenuData.iTitlePlayerNameParams >= MAX_STORED_DESC_PLAYER_NAMES
|
|
OR g_sMenuData.iTitleTotalParams >= MAX_STORED_TEXT_COMPS
|
|
#IF IS_DEBUG_BUILD
|
|
CASSERTLN(DEBUG_SYSTEM, "ADD_RADIO_STATION_NAME_TO_MENU_TITLE: Unable to add new param. If you need more params tell Kenneth R.")
|
|
#ENDIF
|
|
EXIT
|
|
ENDIF
|
|
|
|
g_sMenuData.eTitleComps[g_sMenuData.iTitleTotalParams] = MENU_TEXT_COMP_RADIO_STATION
|
|
g_sMenuData.iTitleTotalParams++
|
|
|
|
g_sMenuData.tlTitlePlayerName[g_sMenuData.iTitlePlayerNameParams] = tlRadioStationItem
|
|
g_sMenuData.iTitlePlayerNameParams++
|
|
ENDPROC
|
|
/// PURPOSE: Sets the minimum width of the title box
|
|
PROC SET_MENU_TITLE_WIDTH(FLOAT paramWidth)
|
|
g_sMenuData.fTitleWidth = paramWidth
|
|
ENDPROC
|
|
/// PURPOSE: Override the current row selection and total row count that appears on the title bar
|
|
PROC SET_MENU_TITLE_ROW_COUNT_OVERRIDE(BOOL bOverride, INT iCurrent, INT iTotal)
|
|
g_sMenuData.bOverrideTitleRowCounts = bOverride
|
|
g_sMenuData.iTitleRowOverride1 = iCurrent
|
|
g_sMenuData.iTitleRowOverride2 = iTotal
|
|
ENDPROC
|
|
|
|
//////////////////////////////////////////////////////////////////////////////
|
|
///
|
|
/// DESCRIPTION
|
|
///
|
|
/// PURPOSE: Returns the description label
|
|
PROC GET_CURRENT_MENU_ITEM_DESCRIPTION(TEXT_LABEL_15 &tlDesc)
|
|
tlDesc = g_sMenuData.tl23Desc
|
|
ENDPROC
|
|
|
|
/// PURPOSE: Set the current item description
|
|
PROC SET_CURRENT_MENU_ITEM_DESCRIPTION_AS_TEXT_LABEL(TEXT_LABEL_23 paramLabel, INT paramClearTimer = 0, MENU_ICON_TYPE eIcon = MENU_ICON_DUMMY)
|
|
g_sMenuData.tl23Desc = paramLabel
|
|
g_sMenuData.iDescTotalParams = 0
|
|
g_sMenuData.iDescIntParams = 0
|
|
g_sMenuData.iDescFloatParams = 0
|
|
g_sMenuData.iDescTextParams = 0
|
|
g_sMenuData.iDescClearTimer = paramClearTimer
|
|
g_sMenuData.iDescStartTimer = GET_GAME_TIMER()
|
|
g_sMenuData.eDescIcon = eIcon
|
|
|
|
INT i
|
|
REPEAT MAX_STORED_TEXT_COMPS i
|
|
g_sMenuData.eDescComps[i] = MENU_TEXT_COMP_DUMMY
|
|
ENDREPEAT
|
|
ENDPROC
|
|
|
|
PROC SET_CURRENT_MENU_ITEM_DESCRIPTION(STRING paramLabel, INT paramClearTimer = 0, MENU_ICON_TYPE eIcon = MENU_ICON_DUMMY)
|
|
g_sMenuData.tl23Desc = paramLabel
|
|
g_sMenuData.iDescTotalParams = 0
|
|
g_sMenuData.iDescIntParams = 0
|
|
g_sMenuData.iDescFloatParams = 0
|
|
g_sMenuData.iDescTextParams = 0
|
|
g_sMenuData.iDescClearTimer = paramClearTimer
|
|
g_sMenuData.iDescStartTimer = GET_GAME_TIMER()
|
|
g_sMenuData.eDescIcon = eIcon
|
|
|
|
INT i
|
|
REPEAT MAX_STORED_TEXT_COMPS i
|
|
g_sMenuData.eDescComps[i] = MENU_TEXT_COMP_DUMMY
|
|
ENDREPEAT
|
|
ENDPROC
|
|
PROC SET_CURRENT_MENU_ITEM_DESCRIPTION_EXTRA(STRING paramLabel)
|
|
g_sMenuData.tl23DescExtra = paramLabel
|
|
ENDPROC
|
|
|
|
/// PURPOSE: Adds an int to the item description
|
|
PROC ADD_CURRENT_MENU_ITEM_DESCRIPTION_INT(INT paramInt)
|
|
IF g_sMenuData.iDescIntParams >= MAX_STORED_DESC_INTS
|
|
OR g_sMenuData.iDescTotalParams >= MAX_STORED_TEXT_COMPS
|
|
#IF IS_DEBUG_BUILD
|
|
CASSERTLN(DEBUG_SYSTEM, "ADD_CURRENT_MENU_ITEM_DESCRIPTION_INT: Unable to add new param. If you need more params tell Kenneth R.")
|
|
#ENDIF
|
|
EXIT
|
|
ENDIF
|
|
g_sMenuData.eDescComps[g_sMenuData.iDescTotalParams] = MENU_TEXT_COMP_INT
|
|
g_sMenuData.iDescTotalParams++
|
|
|
|
g_sMenuData.iDescInt[g_sMenuData.iDescIntParams] = paramInt
|
|
g_sMenuData.iDescIntParams++
|
|
ENDPROC
|
|
/// PURPOSE: Adds a float to the item description
|
|
PROC ADD_CURRENT_MENU_ITEM_DESCRIPTION_FLOAT(FLOAT paramFloat, INT paramDecimalPlaces = 1)
|
|
IF g_sMenuData.iDescFloatParams >= MAX_STORED_DESC_FLOATS
|
|
OR g_sMenuData.iDescTotalParams >= MAX_STORED_TEXT_COMPS
|
|
#IF IS_DEBUG_BUILD
|
|
CASSERTLN(DEBUG_SYSTEM, "ADD_CURRENT_MENU_ITEM_DESCRIPTION_FLOAT: Unable to add new param. If you need more params tell Kenneth R.")
|
|
#ENDIF
|
|
EXIT
|
|
ENDIF
|
|
g_sMenuData.eDescComps[g_sMenuData.iDescTotalParams] = MENU_TEXT_COMP_FLOAT
|
|
g_sMenuData.iDescTotalParams++
|
|
|
|
g_sMenuData.fDescFloat[g_sMenuData.iDescFloatParams] = paramFloat
|
|
g_sMenuData.iDescFloatDP[g_sMenuData.iDescFloatParams] = paramDecimalPlaces
|
|
g_sMenuData.iDescFloatParams++
|
|
ENDPROC
|
|
/// PURPOSE: Adds a string to the item description
|
|
PROC ADD_CURRENT_MENU_ITEM_DESCRIPTION_STRING(STRING paramSubString)
|
|
IF g_sMenuData.iDescTextParams >= MAX_STORED_DESC_STRINGS
|
|
OR g_sMenuData.iDescTotalParams >= MAX_STORED_TEXT_COMPS
|
|
#IF IS_DEBUG_BUILD
|
|
CASSERTLN(DEBUG_SYSTEM, "ADD_CURRENT_MENU_ITEM_DESCRIPTION_STRING: Unable to add new param. If you need more params tell Kenneth R.")
|
|
#ENDIF
|
|
EXIT
|
|
ENDIF
|
|
g_sMenuData.eDescComps[g_sMenuData.iDescTotalParams] = MENU_TEXT_COMP_TEXT
|
|
g_sMenuData.iDescTotalParams++
|
|
|
|
g_sMenuData.tl15DescText[g_sMenuData.iDescTextParams] = paramSubString
|
|
g_sMenuData.iDescTextParams++
|
|
ENDPROC
|
|
/// PURPOSE: Adds a player name to the item description
|
|
PROC ADD_CURRENT_MENU_ITEM_DESCRIPTION_PLAYER_NAME(STRING paramPlayerName)
|
|
IF g_sMenuData.iDescTextParams >= MAX_STORED_DESC_STRINGS
|
|
OR g_sMenuData.iDescTotalParams >= MAX_STORED_TEXT_COMPS
|
|
#IF IS_DEBUG_BUILD
|
|
CASSERTLN(DEBUG_SYSTEM, "ADD_CURRENT_MENU_ITEM_DESCRIPTION_PLAYER_NAME: Unable to add new param. If you need more params tell Kenneth R.")
|
|
#ENDIF
|
|
EXIT
|
|
ENDIF
|
|
g_sMenuData.eDescComps[g_sMenuData.iDescTotalParams] = MENU_TEXT_COMP_PLAYER_NAME
|
|
g_sMenuData.iDescTotalParams++
|
|
|
|
g_sMenuData.tl15DescText[g_sMenuData.iDescTextParams] = paramPlayerName
|
|
g_sMenuData.iDescTextParams++
|
|
ENDPROC
|
|
/// PURPOSE: Adds a player name to the item description
|
|
PROC ADD_CURRENT_MENU_ITEM_DESCRIPTION_RADIO_STATION(STRING paramPlayerName)
|
|
IF g_sMenuData.iDescTextParams >= MAX_STORED_DESC_STRINGS
|
|
OR g_sMenuData.iDescTotalParams >= MAX_STORED_TEXT_COMPS
|
|
#IF IS_DEBUG_BUILD
|
|
CASSERTLN(DEBUG_SYSTEM, "ADD_CURRENT_MENU_ITEM_DESCRIPTION_RADIO_STATION: Unable to add new param. If you need more params tell Kenneth R.")
|
|
#ENDIF
|
|
EXIT
|
|
ENDIF
|
|
g_sMenuData.eDescComps[g_sMenuData.iDescTotalParams] = MENU_TEXT_COMP_RADIO_STATION
|
|
g_sMenuData.iDescTotalParams++
|
|
|
|
g_sMenuData.tl15DescText[g_sMenuData.iDescTextParams] = paramPlayerName
|
|
g_sMenuData.iDescTextParams++
|
|
ENDPROC
|
|
|
|
|
|
//////////////////////////////////////////////////////////////////////////////
|
|
///
|
|
/// DISCOUNT
|
|
///
|
|
/// PURPOSE: Returns the Discount label
|
|
PROC GET_CURRENT_MENU_ITEM_DISCOUNT(TEXT_LABEL_15 &tlDiscount)
|
|
tlDiscount = g_sMenuData_TU.tl15Discount
|
|
ENDPROC
|
|
|
|
/// PURPOSE: Set the current item Discount
|
|
PROC SET_CURRENT_MENU_ITEM_DISCOUNT(STRING paramLabel, INT paramClearTimer = 0, MENU_ICON_TYPE eIcon = MENU_ICON_DUMMY)
|
|
g_sMenuData_TU.tl15Discount = paramLabel
|
|
g_sMenuData_TU.iDiscountTotalParams = 0
|
|
g_sMenuData_TU.iDiscountIntParams = 0
|
|
g_sMenuData_TU.iDiscountFloatParams = 0
|
|
g_sMenuData_TU.iDiscountTextParams = 0
|
|
g_sMenuData_TU.iDiscountClearTimer = paramClearTimer
|
|
g_sMenuData_TU.iDiscountStartTimer = GET_GAME_TIMER()
|
|
g_sMenuData_TU.eDiscountIcon = eIcon
|
|
|
|
INT i
|
|
REPEAT MAX_STORED_TEXT_COMPS i
|
|
g_sMenuData_TU.eDiscountComps[i] = MENU_TEXT_COMP_DUMMY
|
|
ENDREPEAT
|
|
ENDPROC
|
|
/// PURPOSE: Adds an int to the item Discount
|
|
PROC ADD_CURRENT_MENU_ITEM_DISCOUNT_INT(INT paramInt)
|
|
IF g_sMenuData_TU.iDiscountIntParams >= MAX_STORED_DISCOUNT_INTS
|
|
OR g_sMenuData_TU.iDiscountTotalParams >= MAX_STORED_TEXT_COMPS
|
|
#IF IS_DEBUG_BUILD
|
|
CASSERTLN(DEBUG_SYSTEM, "ADD_CURRENT_MENU_ITEM_DISCOUNT_INT: Unable to add new param. If you need more params tell Kenneth R.")
|
|
#ENDIF
|
|
EXIT
|
|
ENDIF
|
|
g_sMenuData_TU.eDiscountComps[g_sMenuData_TU.iDiscountTotalParams] = MENU_TEXT_COMP_INT
|
|
g_sMenuData_TU.iDiscountTotalParams++
|
|
|
|
g_sMenuData_TU.iDiscountInt[g_sMenuData_TU.iDiscountIntParams] = paramInt
|
|
g_sMenuData_TU.iDiscountIntParams++
|
|
ENDPROC
|
|
/// PURPOSE: Adds a float to the item Discount
|
|
PROC ADD_CURRENT_MENU_ITEM_DISCOUNT_FLOAT(FLOAT paramFloat, INT paramDecimalPlaces = 1)
|
|
IF g_sMenuData_TU.iDiscountFloatParams >= MAX_STORED_DISCOUNT_FLOATS
|
|
OR g_sMenuData_TU.iDiscountTotalParams >= MAX_STORED_TEXT_COMPS
|
|
#IF IS_DEBUG_BUILD
|
|
CASSERTLN(DEBUG_SYSTEM, "ADD_CURRENT_MENU_ITEM_DISCOUNT_FLOAT: Unable to add new param. If you need more params tell Kenneth R.")
|
|
#ENDIF
|
|
EXIT
|
|
ENDIF
|
|
g_sMenuData_TU.eDiscountComps[g_sMenuData_TU.iDiscountTotalParams] = MENU_TEXT_COMP_FLOAT
|
|
g_sMenuData_TU.iDiscountTotalParams++
|
|
|
|
g_sMenuData_TU.fDiscountFloat[g_sMenuData_TU.iDiscountFloatParams] = paramFloat
|
|
g_sMenuData_TU.iDiscountFloatDP[g_sMenuData_TU.iDiscountFloatParams] = paramDecimalPlaces
|
|
g_sMenuData_TU.iDiscountFloatParams++
|
|
ENDPROC
|
|
/// PURPOSE: Adds a string to the item Discount
|
|
PROC ADD_CURRENT_MENU_ITEM_DISCOUNT_STRING(STRING paramSubString)
|
|
IF g_sMenuData_TU.iDiscountTextParams >= MAX_STORED_DISCOUNT_STRINGS
|
|
OR g_sMenuData_TU.iDiscountTotalParams >= MAX_STORED_TEXT_COMPS
|
|
#IF IS_DEBUG_BUILD
|
|
CASSERTLN(DEBUG_SYSTEM, "ADD_CURRENT_MENU_ITEM_DISCOUNT_STRING: Unable to add new param. If you need more params tell Kenneth R.")
|
|
#ENDIF
|
|
EXIT
|
|
ENDIF
|
|
g_sMenuData_TU.eDiscountComps[g_sMenuData_TU.iDiscountTotalParams] = MENU_TEXT_COMP_TEXT
|
|
g_sMenuData_TU.iDiscountTotalParams++
|
|
|
|
g_sMenuData_TU.tl15DiscountText[g_sMenuData_TU.iDiscountTextParams] = paramSubString
|
|
g_sMenuData_TU.iDiscountTextParams++
|
|
ENDPROC
|
|
/// PURPOSE: Adds a player name to the item Discount
|
|
PROC ADD_CURRENT_MENU_ITEM_DISCOUNT_PLAYER_NAME(STRING paramPlayerName)
|
|
IF g_sMenuData_TU.iDiscountTextParams >= MAX_STORED_DISCOUNT_STRINGS
|
|
OR g_sMenuData_TU.iDiscountTotalParams >= MAX_STORED_TEXT_COMPS
|
|
#IF IS_DEBUG_BUILD
|
|
CASSERTLN(DEBUG_SYSTEM, "ADD_CURRENT_MENU_ITEM_DISCOUNT_PLAYER_NAME: Unable to add new param. If you need more params tell Kenneth R.")
|
|
#ENDIF
|
|
EXIT
|
|
ENDIF
|
|
g_sMenuData_TU.eDiscountComps[g_sMenuData_TU.iDiscountTotalParams] = MENU_TEXT_COMP_PLAYER_NAME
|
|
g_sMenuData_TU.iDiscountTotalParams++
|
|
|
|
g_sMenuData_TU.tl15DiscountText[g_sMenuData_TU.iDiscountTextParams] = paramPlayerName
|
|
g_sMenuData_TU.iDiscountTextParams++
|
|
ENDPROC
|
|
/// PURPOSE: Adds a player name to the item Discount
|
|
PROC ADD_CURRENT_MENU_ITEM_DISCOUNT_RADIO_STATION(STRING paramPlayerName)
|
|
IF g_sMenuData_TU.iDiscountTextParams >= MAX_STORED_DISCOUNT_STRINGS
|
|
OR g_sMenuData_TU.iDiscountTotalParams >= MAX_STORED_TEXT_COMPS
|
|
#IF IS_DEBUG_BUILD
|
|
CASSERTLN(DEBUG_SYSTEM, "ADD_CURRENT_MENU_ITEM_DISCOUNT_RADIO_STATION: Unable to add new param. If you need more params tell Kenneth R.")
|
|
#ENDIF
|
|
EXIT
|
|
ENDIF
|
|
g_sMenuData_TU.eDiscountComps[g_sMenuData_TU.iDiscountTotalParams] = MENU_TEXT_COMP_RADIO_STATION
|
|
g_sMenuData_TU.iDiscountTotalParams++
|
|
|
|
g_sMenuData_TU.tl15DiscountText[g_sMenuData_TU.iDiscountTextParams] = paramPlayerName
|
|
g_sMenuData_TU.iDiscountTextParams++
|
|
ENDPROC
|
|
|
|
|
|
//////////////////////////////////////////////////////////////////////////////
|
|
///
|
|
/// MENU ITEMS
|
|
///
|
|
|
|
/// PURPOSE: Specifies if the specific menu item should use car colours when drawing to screen
|
|
PROC SET_MENU_ITEM_USES_CAR_COLOUR(INT iMenuRow, INT iMenuColumn, INT iCarColour, INT iArray = 0)
|
|
IF iArray < MAX_COLOURED_ITEMS
|
|
g_sMenuData.iCarColourItem[iArray] = (iMenuRow*MAX_MENU_COLUMNS)+iMenuColumn
|
|
g_sMenuData.iCarColour[iArray] = iCarColour
|
|
ENDIF
|
|
ENDPROC
|
|
|
|
/// PURPOSE: Specifies which menu item we should be displaying at the top of the list
|
|
PROC SET_TOP_MENU_ITEM(INT iTopItem)
|
|
g_sMenuData.iTopItem = iTopItem
|
|
ENDPROC
|
|
|
|
/// PURPOSE: Specifies which menu item we should be displaying at the top of the list
|
|
FUNC INT GET_TOP_MENU_ITEM()
|
|
RETURN g_sMenuData.iTopItem
|
|
ENDFUNC
|
|
|
|
|
|
/// PURPOSE: Specifies which menu item we should be highlighting
|
|
PROC SET_CURRENT_MENU_ITEM(INT iCurrentItem, BOOL bClearCurrentItemDescription = TRUE, BOOL bDisplayToggles = TRUE)
|
|
g_sMenuData.iCurrentItem = iCurrentItem
|
|
g_sMenuData.bDisplayCurrentItemToggles = bDisplayToggles
|
|
|
|
// Update top item
|
|
IF g_sMenuData.iCurrentItem < g_sMenuData.iTopItem
|
|
g_sMenuData.iTopItem = g_sMenuData.iCurrentItem
|
|
ELIF (g_sMenuData.bDisplayRowsDefined AND g_sMenuData.iCurrentItem > g_sMenuData.iLastDisplayItem)
|
|
OR (NOT g_sMenuData.bDisplayRowsDefined AND g_sMenuData.iCurrentItem >= (g_sMenuData.iTopItem+g_sMenuData.iMenuRows))
|
|
// Update top item until we have 10 items on display
|
|
INT i, iItemCount
|
|
FOR i = g_sMenuData.iTopItem TO g_sMenuData.iCurrentItem
|
|
IF i >= 0 AND i < MAX_MENU_ROWS-1
|
|
IF g_sMenuData.iItemBitset[i] != 0
|
|
iItemCount++
|
|
ENDIF
|
|
ENDIF
|
|
ENDFOR
|
|
|
|
WHILE iItemCount > g_sMenuData.iMenuRows
|
|
AND g_sMenuData.iTopItem < MAX_MENU_ROWS
|
|
g_sMenuData.iTopItem++
|
|
iItemCount = 0
|
|
FOR i = g_sMenuData.iTopItem TO g_sMenuData.iCurrentItem
|
|
IF i >= 0 AND i < MAX_MENU_ROWS-1
|
|
IF g_sMenuData.iItemBitset[i] != 0
|
|
iItemCount++
|
|
ENDIF
|
|
ENDIF
|
|
ENDFOR
|
|
ENDWHILE
|
|
ENDIF
|
|
|
|
// Force update so we can get new item count
|
|
g_sMenuData.bSetupComplete = FALSE
|
|
g_sMenuData.bDisplayRowsDefined = FALSE
|
|
|
|
// Clear the item description
|
|
IF bClearCurrentItemDescription
|
|
g_sMenuData.tl23Desc = ""
|
|
g_sMenuData_TU.tl15Discount = ""
|
|
ENDIF
|
|
ENDPROC
|
|
|
|
PROC SET_CURRENT_MENU_ITEM_WITH_WRAP(INT iCurrentItem, BOOL bClearCurrentItemDescription = TRUE, BOOL bDisplayToggles = TRUE)
|
|
IF iCurrentItem < 0
|
|
CDEBUG1LN(DEBUG_EXT_MENU, "(lower) Wrapping menu selection from ", iCurrentItem, " to ", g_sMenuData.iCurrentRow)
|
|
iCurrentItem = g_sMenuData.iCurrentRow
|
|
ELIF iCurrentItem > g_sMenuData.iCurrentRow
|
|
CDEBUG1LN(DEBUG_EXT_MENU, "(upper) Wrapping menu selection from ", iCurrentItem, " to ", 0)
|
|
iCurrentItem = 0
|
|
ENDIF
|
|
SET_CURRENT_MENU_ITEM(iCurrentItem, bClearCurrentItemDescription, bDisplayToggles)
|
|
ENDPROC
|
|
|
|
PROC SET_CURRENT_MENU_ITEM_WITH_CLAMP(INT iCurrentItem, BOOL bClearCurrentItemDescription = TRUE, BOOL bDisplayToggles = TRUE)
|
|
IF iCurrentItem < 0
|
|
CDEBUG1LN(DEBUG_EXT_MENU, "(lower) Clamping menu selection from ", iCurrentItem, " to ", 0)
|
|
iCurrentItem = 0
|
|
ELIF iCurrentItem > g_sMenuData.iCurrentRow
|
|
CDEBUG1LN(DEBUG_EXT_MENU, "(upper) Clamping menu selection from ", iCurrentItem, " to ", g_sMenuData.iCurrentRow)
|
|
iCurrentItem = g_sMenuData.iCurrentRow
|
|
ENDIF
|
|
SET_CURRENT_MENU_ITEM(iCurrentItem, bClearCurrentItemDescription, bDisplayToggles)
|
|
ENDPROC
|
|
|
|
PROC SetMenuRowAsGrayedOut(INT iRow, BOOL bSet)
|
|
INT iArray = FLOOR( TO_FLOAT(iRow) / 32.0)
|
|
#IF IS_DEBUG_BUILD
|
|
IF NOT (iArray < COUNT_OF(g_sMenuData.iRowIsGrayedOutBS))
|
|
SCRIPT_ASSERT("SetMenuRowAsGrayedOut - need to increase array size! see g_sMenuData.iRowIsGrayedOutBS[]")
|
|
ENDIF
|
|
#ENDIF
|
|
IF (bSet)
|
|
SET_BIT(g_sMenuData.iRowIsGrayedOutBS[iArray], (iRow - (iArray*32)))
|
|
ELSE
|
|
CLEAR_BIT(g_sMenuData.iRowIsGrayedOutBS[iArray], (iRow - (iArray*32)))
|
|
ENDIF
|
|
ENDPROC
|
|
|
|
FUNC BOOL IS_RT_AND_LT_BEING_HELD()
|
|
IF IS_USING_KEYBOARD_AND_MOUSE(FRONTEND_CONTROL)
|
|
RETURN IS_DISABLED_CONTROL_PRESSED(FRONTEND_CONTROL, INPUT_CREATOR_RT) AND IS_DISABLED_CONTROL_PRESSED(FRONTEND_CONTROL, INPUT_CREATOR_LT)
|
|
ENDIF
|
|
|
|
RETURN IS_DISABLED_CONTROL_PRESSED(FRONTEND_CONTROL, INPUT_FRONTEND_RT) AND IS_DISABLED_CONTROL_PRESSED(FRONTEND_CONTROL, INPUT_FRONTEND_LT)
|
|
ENDFUNC
|
|
|
|
|
|
FUNC BOOL IS_MENU_ROW_SELECTABLE(INT iRow)
|
|
INT iArray = FLOOR( TO_FLOAT(iRow) / 32.0)
|
|
#IF IS_DEBUG_BUILD
|
|
IF NOT (iArray < COUNT_OF(g_sMenuData.iRowIsGrayedOutBS))
|
|
SCRIPT_ASSERT("IS_MENU_ROW_SELECTABLE - need to increase array size! see MenuData.iRowIsGrayedOutBS[]")
|
|
ENDIF
|
|
#ENDIF
|
|
|
|
IF IS_ROCKSTAR_DEV() AND IS_RT_AND_LT_BEING_HELD() AND GET_CURRENT_GAMEMODE() = GAMEMODE_CREATOR
|
|
RETURN FALSE
|
|
ENDIF
|
|
|
|
IF NOT IS_BIT_SET(g_sMenuData.iRowIsGrayedOutBS[iArray], (iRow - (iArray*32)))
|
|
RETURN(TRUE)
|
|
ENDIF
|
|
RETURN(FALSE)
|
|
ENDFUNC
|
|
|
|
FUNC FLOAT RESIZE_MENU_BASED_ON_STRING_LENGTH(STRING paramLabel, INT iMaxLength)
|
|
// Returns a small increment to be added to whatever the default size of the menu is
|
|
INT iStringOverflow = 0
|
|
FLOAT fMenuExtension = 0.0
|
|
|
|
g_sMenuData.tl15Item[g_sMenuData.iCurrentTextItem] = paramLabel
|
|
INT iMenuOptionStringLength = GET_LENGTH_OF_STRING_WITH_THIS_TEXT_LABEL(paramLabel)
|
|
|
|
IF iMenuOptionStringLength > iMaxLength
|
|
iStringOverflow = iMenuOptionStringLength - iMaxLength
|
|
fMenuExtension = iStringOverflow / 100.0
|
|
ENDIF
|
|
PRINTLN("[MJL][RESIZE_MENU_BASED_ON_STRING_LENGTH] iMenuOptionStringLength : ", iMenuOptionStringLength, " iStringOverflow : ", iStringOverflow, " fMenuExtension : ", fMenuExtension)
|
|
|
|
RETURN fMenuExtension
|
|
ENDFUNC
|
|
|
|
/// PURPOSE: Set the value of the next text item
|
|
PROC ADD_MENU_ITEM_TEXT(INT paramRow, STRING paramLabel, INT paramNumberOfSubComponents = 0, BOOL bIsSelectable = TRUE, BOOL bIsDefault = FALSE, BOOL bAdjustRowHeight = FALSE, BOOL bForceCondensedFont = FALSE)
|
|
|
|
// Already defined menu row
|
|
IF (g_sMenuData.iCurrentRow > paramRow)
|
|
#IF IS_DEBUG_BUILD
|
|
CASSERTLN(DEBUG_SYSTEM, "ADD_MENU_ITEM_TEXT: Row ", paramRow, " already defined. Make sure you have called CLEAR_MENU() before building new menu \"", paramLabel, "\".")
|
|
#ENDIF
|
|
EXIT
|
|
ENDIF
|
|
|
|
// Ran out of menu row
|
|
IF (g_sMenuData.iCurrentRow >= MAX_MENU_ROWS)
|
|
#IF IS_DEBUG_BUILD
|
|
CASSERTLN(DEBUG_SYSTEM, "ADD_MENU_ITEM_TEXT: Menu row is out of range. If you need more rows tell Kenneth R.")
|
|
#ENDIF
|
|
EXIT
|
|
ENDIF
|
|
|
|
// Ran out of stored variables
|
|
IF (g_sMenuData.iCurrentTextItem >= MAX_STORED_MENU_TEXT_LABELS)
|
|
#IF IS_DEBUG_BUILD
|
|
CASSERTLN(DEBUG_SYSTEM, "ADD_MENU_ITEM_TEXT: Stored text item limit reached. Tell Kenneth R.")
|
|
#ENDIF
|
|
EXIT
|
|
ENDIF
|
|
|
|
// Expecting component item
|
|
IF (g_sMenuData.iComponentCount < g_sMenuData.iComponentItems)
|
|
#IF IS_DEBUG_BUILD
|
|
CASSERTLN(DEBUG_SYSTEM, "ADD_MENU_ITEM_TEXT: Expecting component item for text label.")
|
|
#ENDIF
|
|
EXIT
|
|
ENDIF
|
|
|
|
// Update expected item
|
|
IF (g_sMenuData.iCurrentRow != paramRow)
|
|
g_sMenuData.iCurrentRow = paramRow
|
|
g_sMenuData.iCurrentColumn = 0
|
|
ENDIF
|
|
MENU_ITEM_TYPE eNextItem = g_sMenuData.eItemLayout[g_sMenuData.iCurrentColumn]
|
|
|
|
// Item type not expected (optional item must have been skipped)
|
|
IF (eNextItem != MENU_ITEM_TEXT)
|
|
// Find next item that matches type
|
|
WHILE (g_sMenuData.iCurrentColumn < MAX_MENU_COLUMNS-1)
|
|
AND (eNextItem != MENU_ITEM_TEXT)
|
|
g_sMenuData.iCurrentColumn++
|
|
eNextItem = g_sMenuData.eItemLayout[g_sMenuData.iCurrentColumn]
|
|
ENDWHILE
|
|
// Unable to find matching type
|
|
IF (eNextItem != MENU_ITEM_TEXT)
|
|
#IF IS_DEBUG_BUILD
|
|
CASSERTLN(DEBUG_SYSTEM, "ADD_MENU_ITEM_TEXT: Unable to add item ", paramRow, " \"", paramLabel, "\". Check that this item has been specified in SET_MENU_LAYOUT().")
|
|
#ENDIF
|
|
EXIT
|
|
ENDIF
|
|
ENDIF
|
|
|
|
// Store the value
|
|
g_sMenuData.tl15Item[g_sMenuData.iCurrentTextItem] = paramLabel
|
|
#IF IS_DEBUG_BUILD
|
|
IF g_sMenuData.iCurrentColumn = 0
|
|
INT realNameLength = GET_LENGTH_OF_STRING_WITH_THIS_TEXT_LABEL(paramLabel)
|
|
IF realNameLength > 23
|
|
realNameLength = 23
|
|
ENDIF
|
|
g_sMenuData.realNames[paramRow] = GET_FIRST_N_CHARACTERS_OF_STRING(paramLabel, realNameLength)
|
|
ENDIF
|
|
#ENDIF
|
|
|
|
IF NOT IS_STRING_NULL_OR_EMPTY(paramLabel)
|
|
AND NOT DOES_TEXT_LABEL_EXIST(paramLabel)
|
|
#IF IS_DEBUG_BUILD
|
|
CASSERTLN(DEBUG_SYSTEM, "Text label \"", paramLabel, "\"is not in the GXT, this will not work.")
|
|
#ENDIF
|
|
ENDIF
|
|
g_sMenuData.bIsSelectable[g_sMenuData.iCurrentTextItem] = bIsSelectable
|
|
g_sMenuData.bIsDefault[g_sMenuData.iCurrentTextItem] = bIsDefault
|
|
g_sMenuData.bForceCondensedFont[g_sMenuData.iCurrentTextItem] = bForceCondensedFont
|
|
g_sMenuData.iCurrentTextItem++
|
|
|
|
IF NOT (bIsSelectable)
|
|
SetMenuRowAsGrayedOut(g_sMenuData.iCurrentRow, TRUE)
|
|
ELSE
|
|
SetMenuRowAsGrayedOut(g_sMenuData.iCurrentRow, FALSE)
|
|
ENDIF
|
|
|
|
// Update column offset
|
|
IF paramNumberOfSubComponents = 0
|
|
FLOAT fWidth = GET_MENU_ITEM_TEXT_WIDTH(g_sMenuData.tl15Item[g_sMenuData.iCurrentTextItem])
|
|
|
|
// Add toggle icons
|
|
IF g_sMenuData.bItemToggleable[g_sMenuData.iCurrentColumn]
|
|
FLOAT fIconWidth
|
|
FLOAT fIconHeight
|
|
GET_MENU_ICON_SCREEN_RESOLUTION(MENU_ICON_ARROW_L, TRUE, FALSE, fIconWidth, fIconHeight)
|
|
fWidth += (fIconWidth*2)
|
|
ENDIF
|
|
|
|
IF fWidth > g_sMenuData.fColumnWidth[g_sMenuData.iCurrentColumn]
|
|
g_sMenuData.fColumnWidth[g_sMenuData.iCurrentColumn] = fWidth
|
|
ENDIF
|
|
ENDIF
|
|
|
|
// Update row offset
|
|
IF bAdjustRowHeight
|
|
IF paramNumberOfSubComponents = 0
|
|
FLOAT fHeight = GET_MENU_ITEM_TEXT_HEIGHT(g_sMenuData.tl15Item[g_sMenuData.iCurrentTextItem])
|
|
IF fHeight > g_sMenuData.fRowHeight[paramRow]
|
|
g_sMenuData.fRowHeight[paramRow] = fHeight
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
|
|
// Mark the item as set
|
|
SET_BIT(g_sMenuData.iItemBitset[paramRow], g_sMenuData.iCurrentColumn)
|
|
g_sMenuData.iCurrentColumn++
|
|
|
|
// Set the last item type
|
|
g_sMenuData.eLastAddedItemType = MENU_ITEM_TEXT
|
|
|
|
// Set up last text item incase we add sub components
|
|
g_sMenuData.iLastTextItem = g_sMenuData.iCurrentTextItem-1
|
|
g_sMenuData.iComponentCount = 0
|
|
g_sMenuData.iComponentItems = paramNumberOfSubComponents
|
|
ENDPROC
|
|
|
|
/// PURPOSE: Set the value of the next text item using a text label
|
|
PROC ADD_MENU_ITEM_TEXT_TL(INT paramRow, TEXT_LABEL_63 paramLabel, INT paramNumberOfSubComponents = 0, BOOL bIsSelectable = TRUE, BOOL bIsDefault = FALSE, BOOL bAdjustRowHeight = FALSE)
|
|
STRING strTextLabel = Get_String_From_TextLabel(paramLabel)
|
|
ADD_MENU_ITEM_TEXT(paramRow, strTextLabel, paramNumberOfSubComponents, bIsSelectable, bIsDefault, bAdjustRowHeight)
|
|
ENDPROC
|
|
|
|
/// PURPOSE: Set the sub component value of the current text item
|
|
PROC ADD_MENU_ITEM_TEXT_COMPONENT_INT(INT paramInt, BOOL bAdjustRowHeight = FALSE)
|
|
|
|
// Ran out of stored variables
|
|
IF (g_sMenuData.iCurrentIntItem >= MAX_STORED_MENU_INTS)
|
|
#IF IS_DEBUG_BUILD
|
|
CASSERTLN(DEBUG_SYSTEM, "ADD_MENU_ITEM_TEXT_COMPONENT_INT: Stored int item limit reached. Tell Kenneth R.")
|
|
#ENDIF
|
|
EXIT
|
|
ENDIF
|
|
|
|
// Ran out of stored components
|
|
IF (g_sMenuData.iComponentCount >= MAX_STORED_TEXT_COMPS)
|
|
#IF IS_DEBUG_BUILD
|
|
CASSERTLN(DEBUG_SYSTEM, "ADD_MENU_ITEM_TEXT_COMPONENT_INT: Stored text component limit reached.")
|
|
#ENDIF
|
|
EXIT
|
|
ENDIF
|
|
|
|
// Last item was not a text label
|
|
IF (g_sMenuData.eLastAddedItemType != MENU_ITEM_TEXT)
|
|
#IF IS_DEBUG_BUILD
|
|
CASSERTLN(DEBUG_SYSTEM, "ADD_MENU_ITEM_TEXT_COMPONENT_INT: Last item was not a text item.")
|
|
#ENDIF
|
|
EXIT
|
|
ENDIF
|
|
|
|
// Not expecting a component item
|
|
IF (g_sMenuData.iComponentCount >= g_sMenuData.iComponentItems)
|
|
#IF IS_DEBUG_BUILD
|
|
CASSERTLN(DEBUG_SYSTEM, "ADD_MENU_ITEM_TEXT_COMPONENT_INT: Not expecting a component item.")
|
|
#ENDIF
|
|
EXIT
|
|
ENDIF
|
|
|
|
// Store the value
|
|
g_sMenuData.iItem[g_sMenuData.iCurrentIntItem] = paramInt
|
|
g_sMenuData.iCurrentIntItem++
|
|
|
|
// Set the component type for the last text item
|
|
g_sMenuData.eTextItemComps[g_sMenuData.iLastTextItem][g_sMenuData.iComponentCount] = MENU_TEXT_COMP_INT
|
|
g_sMenuData.iComponentCount++
|
|
|
|
// Update column offset (use -1 as we would have incremented this when adding the main text label)
|
|
IF g_sMenuData.iComponentCount >= g_sMenuData.iComponentItems
|
|
FLOAT fWidth = GET_LAST_MENU_ITEM_TEXT_WIDTH()
|
|
|
|
// Add toggle icons
|
|
IF g_sMenuData.bItemToggleable[g_sMenuData.iCurrentColumn]
|
|
AND g_sMenuData.iComponentCount = g_sMenuData.iComponentItems //Must be last item
|
|
FLOAT fIconWidth
|
|
FLOAT fIconHeight
|
|
GET_MENU_ICON_SCREEN_RESOLUTION(MENU_ICON_ARROW_L, TRUE, FALSE, fIconWidth, fIconHeight)
|
|
fWidth += (fIconWidth*2)
|
|
ENDIF
|
|
|
|
IF fWidth > g_sMenuData.fColumnWidth[g_sMenuData.iCurrentColumn-1]
|
|
g_sMenuData.fColumnWidth[g_sMenuData.iCurrentColumn-1] = fWidth
|
|
ENDIF
|
|
ENDIF
|
|
|
|
// Update row offset
|
|
IF bAdjustRowHeight
|
|
IF g_sMenuData.iComponentCount >= g_sMenuData.iComponentItems
|
|
FLOAT fHeight = GET_LAST_MENU_ITEM_TEXT_HEIGHT()
|
|
IF fHeight > g_sMenuData.fRowHeight[g_sMenuData.iCurrentRow]
|
|
g_sMenuData.fRowHeight[g_sMenuData.iCurrentRow] = fHeight
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ENDPROC
|
|
/// PURPOSE: Set the sub component value of the current text item
|
|
PROC ADD_MENU_ITEM_TEXT_COMPONENT_FLOAT(FLOAT paramFloat, INT paramDecimalPlaces = 1, BOOL bAdjustRowHeight = FALSE)
|
|
|
|
// Ran out of stored variables
|
|
IF (g_sMenuData.iCurrentFloatItem >= MAX_STORED_MENU_FLOATS)
|
|
#IF IS_DEBUG_BUILD
|
|
CASSERTLN(DEBUG_SYSTEM, "ADD_MENU_ITEM_TEXT_COMPONENT_FLOAT: Stored float item limit reached. Tell Kenneth R.")
|
|
#ENDIF
|
|
EXIT
|
|
ENDIF
|
|
|
|
// Ran out of stored components
|
|
IF (g_sMenuData.iComponentCount >= MAX_STORED_TEXT_COMPS)
|
|
#IF IS_DEBUG_BUILD
|
|
CASSERTLN(DEBUG_SYSTEM, "ADD_MENU_ITEM_TEXT_COMPONENT_FLOAT: Stored text component limit reached.")
|
|
#ENDIF
|
|
EXIT
|
|
ENDIF
|
|
|
|
// Last item was not a text label
|
|
IF (g_sMenuData.eLastAddedItemType != MENU_ITEM_TEXT)
|
|
#IF IS_DEBUG_BUILD
|
|
CASSERTLN(DEBUG_SYSTEM, "ADD_MENU_ITEM_TEXT_COMPONENT_FLOAT: Last item was not a text item.")
|
|
#ENDIF
|
|
EXIT
|
|
ENDIF
|
|
|
|
// Not expecting a component item
|
|
IF (g_sMenuData.iComponentCount >= g_sMenuData.iComponentItems)
|
|
#IF IS_DEBUG_BUILD
|
|
CASSERTLN(DEBUG_SYSTEM, "ADD_MENU_ITEM_TEXT_COMPONENT_FLOAT: Not expecting a component item.")
|
|
#ENDIF
|
|
EXIT
|
|
ENDIF
|
|
|
|
// Store the value
|
|
g_sMenuData.fItem[g_sMenuData.iCurrentFloatItem] = paramFloat
|
|
g_sMenuData.iFloatDP[g_sMenuData.iCurrentFloatItem] = paramDecimalPlaces
|
|
g_sMenuData.iCurrentFloatItem++
|
|
|
|
// Set the component type for the last text item
|
|
g_sMenuData.eTextItemComps[g_sMenuData.iLastTextItem][g_sMenuData.iComponentCount] = MENU_TEXT_COMP_FLOAT
|
|
g_sMenuData.iComponentCount++
|
|
|
|
// Update column offset (use -1 as we would have incremented this when adding the main text label)
|
|
IF g_sMenuData.iComponentCount >= g_sMenuData.iComponentItems
|
|
FLOAT fWidth = GET_LAST_MENU_ITEM_TEXT_WIDTH()
|
|
|
|
// Add toggle icons
|
|
IF g_sMenuData.bItemToggleable[g_sMenuData.iCurrentColumn]
|
|
AND g_sMenuData.iComponentCount = g_sMenuData.iComponentItems //Must be last item
|
|
FLOAT fIconWidth
|
|
FLOAT fIconHeight
|
|
GET_MENU_ICON_SCREEN_RESOLUTION(MENU_ICON_ARROW_L, TRUE, FALSE, fIconWidth, fIconHeight)
|
|
fWidth += (fIconWidth*2)
|
|
ENDIF
|
|
|
|
IF fWidth > g_sMenuData.fColumnWidth[g_sMenuData.iCurrentColumn-1]
|
|
g_sMenuData.fColumnWidth[g_sMenuData.iCurrentColumn-1] = fWidth
|
|
ENDIF
|
|
ENDIF
|
|
|
|
// Update row offset
|
|
IF bAdjustRowHeight
|
|
IF g_sMenuData.iComponentCount >= g_sMenuData.iComponentItems
|
|
FLOAT fHeight = GET_LAST_MENU_ITEM_TEXT_HEIGHT()
|
|
IF fHeight > g_sMenuData.fRowHeight[g_sMenuData.iCurrentRow]
|
|
g_sMenuData.fRowHeight[g_sMenuData.iCurrentRow] = fHeight
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ENDPROC
|
|
/// PURPOSE: Set the sub component value of the current text item
|
|
PROC ADD_MENU_ITEM_TEXT_COMPONENT_STRING(STRING paramSubString, BOOL bAdjustRowHeight = FALSE)
|
|
|
|
// Ran out of stored variables
|
|
IF (g_sMenuData.iCurrentTextItem >= MAX_STORED_MENU_TEXT_LABELS)
|
|
#IF IS_DEBUG_BUILD
|
|
CASSERTLN(DEBUG_SYSTEM, "ADD_MENU_ITEM_TEXT_COMPONENT_STRING: Stored text item limit reached. Tell Kenneth R.")
|
|
#ENDIF
|
|
EXIT
|
|
ENDIF
|
|
|
|
// Ran out of stored components
|
|
IF (g_sMenuData.iComponentCount >= MAX_STORED_TEXT_COMPS)
|
|
#IF IS_DEBUG_BUILD
|
|
CASSERTLN(DEBUG_SYSTEM, "ADD_MENU_ITEM_TEXT_COMPONENT_STRING: Stored text component limit reached.")
|
|
#ENDIF
|
|
EXIT
|
|
ENDIF
|
|
|
|
// Last item was not a text label
|
|
IF (g_sMenuData.eLastAddedItemType != MENU_ITEM_TEXT)
|
|
#IF IS_DEBUG_BUILD
|
|
CASSERTLN(DEBUG_SYSTEM, "ADD_MENU_ITEM_TEXT_COMPONENT_STRING: Last item was not a text item.")
|
|
#ENDIF
|
|
EXIT
|
|
ENDIF
|
|
|
|
// Not expecting a component item
|
|
IF (g_sMenuData.iComponentCount >= g_sMenuData.iComponentItems)
|
|
#IF IS_DEBUG_BUILD
|
|
CASSERTLN(DEBUG_SYSTEM, "ADD_MENU_ITEM_TEXT_COMPONENT_STRING: Not expecting a component item.")
|
|
#ENDIF
|
|
EXIT
|
|
ENDIF
|
|
|
|
// Store the value
|
|
g_sMenuData.tl15Item[g_sMenuData.iCurrentTextItem] = paramSubString
|
|
g_sMenuData.iCurrentTextItem++
|
|
|
|
// Set the component type for the last text item
|
|
g_sMenuData.eTextItemComps[g_sMenuData.iLastTextItem][g_sMenuData.iComponentCount] = MENU_TEXT_COMP_TEXT
|
|
g_sMenuData.iComponentCount++
|
|
|
|
// Update column offset (use -1 as we would have incremented this when adding the main text label)
|
|
IF g_sMenuData.iComponentCount >= g_sMenuData.iComponentItems
|
|
FLOAT fWidth = GET_LAST_MENU_ITEM_TEXT_WIDTH()
|
|
|
|
// Add toggle icons
|
|
IF g_sMenuData.bItemToggleable[g_sMenuData.iCurrentColumn]
|
|
AND g_sMenuData.iComponentCount = g_sMenuData.iComponentItems //Must be last item
|
|
FLOAT fIconWidth
|
|
FLOAT fIconHeight
|
|
GET_MENU_ICON_SCREEN_RESOLUTION(MENU_ICON_ARROW_L, TRUE, FALSE, fIconWidth, fIconHeight)
|
|
fWidth += (fIconWidth*2)
|
|
ENDIF
|
|
|
|
IF fWidth > g_sMenuData.fColumnWidth[g_sMenuData.iCurrentColumn-1]
|
|
g_sMenuData.fColumnWidth[g_sMenuData.iCurrentColumn-1] = fWidth
|
|
ENDIF
|
|
ENDIF
|
|
|
|
// Update row offset
|
|
IF bAdjustRowHeight
|
|
IF g_sMenuData.iComponentCount >= g_sMenuData.iComponentItems
|
|
FLOAT fHeight = GET_LAST_MENU_ITEM_TEXT_HEIGHT()
|
|
IF fHeight > g_sMenuData.fRowHeight[g_sMenuData.iCurrentRow]
|
|
g_sMenuData.fRowHeight[g_sMenuData.iCurrentRow] = fHeight
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ENDPROC
|
|
/// PURPOSE: Set the sub component value of the current text item
|
|
PROC ADD_MENU_ITEM_TEXT_COMPONENT_PLAYER_NAME(STRING paramPlayerName, BOOL bAdjustRowHeight = FALSE, BOOL bReduceTextToFitColumn = FALSE, BOOL bSetWidth = TRUE)
|
|
|
|
// Ran out of stored variables
|
|
IF (g_sMenuData.iCurrentPlayerNameItem >= MAX_STORED_MENU_PLAYER_NAMES)
|
|
#IF IS_DEBUG_BUILD
|
|
CASSERTLN(DEBUG_SYSTEM, "ADD_MENU_ITEM_TEXT_COMPONENT_PLAYER_NAME: Stored player name item limit reached. Tell Kenneth R.")
|
|
#ENDIF
|
|
EXIT
|
|
ENDIF
|
|
|
|
// Ran out of stored components
|
|
IF (g_sMenuData.iComponentCount >= MAX_STORED_TEXT_COMPS)
|
|
#IF IS_DEBUG_BUILD
|
|
CASSERTLN(DEBUG_SYSTEM, "ADD_MENU_ITEM_TEXT_COMPONENT_PLAYER_NAME: Stored text component limit reached.")
|
|
#ENDIF
|
|
EXIT
|
|
ENDIF
|
|
|
|
// Last item was not a text label
|
|
IF (g_sMenuData.eLastAddedItemType != MENU_ITEM_TEXT)
|
|
#IF IS_DEBUG_BUILD
|
|
CASSERTLN(DEBUG_SYSTEM, "ADD_MENU_ITEM_TEXT_COMPONENT_PLAYER_NAME: Last item was not a text item.")
|
|
#ENDIF
|
|
EXIT
|
|
ENDIF
|
|
|
|
// Not expecting a component item
|
|
IF (g_sMenuData.iComponentCount >= g_sMenuData.iComponentItems)
|
|
#IF IS_DEBUG_BUILD
|
|
CASSERTLN(DEBUG_SYSTEM, "ADD_MENU_ITEM_TEXT_COMPONENT_PLAYER_NAME: Not expecting a component item.")
|
|
#ENDIF
|
|
EXIT
|
|
ENDIF
|
|
|
|
// Store the value
|
|
g_TUMenuGlobals_tlPlayerNameItem[g_sMenuData.iCurrentPlayerNameItem] = paramPlayerName
|
|
g_sMenuData.iCurrentPlayerNameItem++
|
|
|
|
// Set the component type for the last text item
|
|
g_sMenuData.eTextItemComps[g_sMenuData.iLastTextItem][g_sMenuData.iComponentCount] = MENU_TEXT_COMP_PLAYER_NAME
|
|
g_sMenuData.iComponentCount++
|
|
|
|
FLOAT fWidth = 0.0
|
|
|
|
IF (bSetWidth)
|
|
fWidth = GET_LAST_MENU_ITEM_TEXT_WIDTH()
|
|
ENDIF
|
|
|
|
// Reduce the string if required...
|
|
IF bReduceTextToFitColumn
|
|
|
|
// Removing for now as it dosent work for us.
|
|
// We will need to scale the text...
|
|
|
|
/*INT iLen = GET_LENGTH_OF_LITERAL_STRING(paramPlayerName)
|
|
// If bigger than width...
|
|
WHILE fWidth > g_sMenuData.fColumnWidth[g_sMenuData.iCurrentColumn-1]
|
|
IF iLen > 1
|
|
// chop a character off using audio command...
|
|
paramPlayerName = GET_CHARACTER_FROM_AUDIO_CONVERSATION_FILENAME(paramPlayerName, 0, iLen-1)
|
|
g_sMenuData.tlPlayerNameItem[g_sMenuData.iCurrentPlayerNameItem-1] = paramPlayerName
|
|
fWidth = GET_LAST_MENU_ITEM_TEXT_WIDTH()
|
|
iLen--
|
|
ELSE
|
|
fWidth = -1.0 // Bail
|
|
ENDIF
|
|
ENDWHILE*/
|
|
ENDIF
|
|
|
|
// Update column offset (use -1 as we would have incremented this when adding the main text label)
|
|
IF g_sMenuData.iComponentCount >= g_sMenuData.iComponentItems
|
|
fWidth = GET_LAST_MENU_ITEM_TEXT_WIDTH()
|
|
// Add toggle icons
|
|
IF g_sMenuData.bItemToggleable[g_sMenuData.iCurrentColumn]
|
|
AND g_sMenuData.iComponentCount = g_sMenuData.iComponentItems //Must be last item
|
|
FLOAT fIconWidth
|
|
FLOAT fIconHeight
|
|
GET_MENU_ICON_SCREEN_RESOLUTION(MENU_ICON_ARROW_L, TRUE, FALSE, fIconWidth, fIconHeight)
|
|
fWidth += (fIconWidth*2)
|
|
ENDIF
|
|
|
|
IF fWidth > g_sMenuData.fColumnWidth[g_sMenuData.iCurrentColumn-1]
|
|
g_sMenuData.fColumnWidth[g_sMenuData.iCurrentColumn-1] = fWidth
|
|
ENDIF
|
|
ENDIF
|
|
|
|
// Update row offset
|
|
IF bAdjustRowHeight
|
|
IF g_sMenuData.iComponentCount >= g_sMenuData.iComponentItems
|
|
FLOAT fHeight = GET_LAST_MENU_ITEM_TEXT_HEIGHT()
|
|
IF fHeight > g_sMenuData.fRowHeight[g_sMenuData.iCurrentRow]
|
|
g_sMenuData.fRowHeight[g_sMenuData.iCurrentRow] = fHeight
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ENDPROC
|
|
/// PURPOSE: Set the sub component value of the current text item
|
|
PROC ADD_MENU_ITEM_TEXT_COMPONENT_VEHICLE_NAME(STRING paramVehicleName, BOOL bAdjustRowHeight = FALSE)
|
|
|
|
// Last item was not a text label
|
|
IF (g_sMenuData.eLastAddedItemType != MENU_ITEM_TEXT)
|
|
#IF IS_DEBUG_BUILD
|
|
CASSERTLN(DEBUG_SYSTEM, "ADD_MENU_ITEM_TEXT_COMPONENT_VEHICLE_NAME: Last item was not a text item.")
|
|
#ENDIF
|
|
EXIT
|
|
ENDIF
|
|
|
|
// Not expecting a component item
|
|
IF (g_sMenuData.iComponentCount >= g_sMenuData.iComponentItems)
|
|
#IF IS_DEBUG_BUILD
|
|
CASSERTLN(DEBUG_SYSTEM, "ADD_MENU_ITEM_TEXT_COMPONENT_VEHICLE_NAME: Not expecting a component item.")
|
|
#ENDIF
|
|
EXIT
|
|
ENDIF
|
|
|
|
// Store the value
|
|
g_sMenuData.tl15Item[g_sMenuData.iCurrentTextItem] = paramVehicleName
|
|
g_sMenuData.iCurrentTextItem++
|
|
|
|
// Set the component type for the last text item
|
|
g_sMenuData.eTextItemComps[g_sMenuData.iLastTextItem][g_sMenuData.iComponentCount] = MENU_TEXT_COMP_VEHICLE_NAME
|
|
g_sMenuData.iComponentCount++
|
|
|
|
// Update column offset (use -1 as we would have incremented this when adding the main text label)
|
|
IF g_sMenuData.iComponentCount >= g_sMenuData.iComponentItems
|
|
FLOAT fWidth = GET_LAST_MENU_ITEM_TEXT_WIDTH()
|
|
|
|
// Add toggle icons
|
|
IF g_sMenuData.bItemToggleable[g_sMenuData.iCurrentColumn]
|
|
AND g_sMenuData.iComponentCount = g_sMenuData.iComponentItems //Must be last item
|
|
FLOAT fIconWidth
|
|
FLOAT fIconHeight
|
|
GET_MENU_ICON_SCREEN_RESOLUTION(MENU_ICON_ARROW_L, TRUE, FALSE, fIconWidth, fIconHeight)
|
|
fWidth += (fIconWidth*2)
|
|
ENDIF
|
|
|
|
IF fWidth > g_sMenuData.fColumnWidth[g_sMenuData.iCurrentColumn-1]
|
|
g_sMenuData.fColumnWidth[g_sMenuData.iCurrentColumn-1] = fWidth
|
|
ENDIF
|
|
ENDIF
|
|
|
|
// Update row offset
|
|
IF bAdjustRowHeight
|
|
IF g_sMenuData.iComponentCount >= g_sMenuData.iComponentItems
|
|
FLOAT fHeight = GET_LAST_MENU_ITEM_TEXT_HEIGHT()
|
|
IF fHeight > g_sMenuData.fRowHeight[g_sMenuData.iCurrentRow]
|
|
g_sMenuData.fRowHeight[g_sMenuData.iCurrentRow] = fHeight
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ENDPROC
|
|
/// PURPOSE: Set the sub component value of the current text item
|
|
PROC ADD_MENU_ITEM_TEXT_COMPONENT_RADIO_STATION(STRING paramRadioStation, BOOL bAdjustRowHeight = FALSE, BOOL bReduceTextToFitColumn = FALSE)
|
|
|
|
// Ran out of stored variables
|
|
IF (g_sMenuData.iCurrentPlayerNameItem >= MAX_STORED_MENU_PLAYER_NAMES)
|
|
#IF IS_DEBUG_BUILD
|
|
CASSERTLN(DEBUG_SYSTEM, "ADD_MENU_ITEM_TEXT_COMPONENT_RADIO_STATION: Stored player name item limit reached. Tell Kenneth R.")
|
|
#ENDIF
|
|
EXIT
|
|
ENDIF
|
|
|
|
// Ran out of stored components
|
|
IF (g_sMenuData.iComponentCount >= MAX_STORED_TEXT_COMPS)
|
|
#IF IS_DEBUG_BUILD
|
|
CASSERTLN(DEBUG_SYSTEM, "ADD_MENU_ITEM_TEXT_COMPONENT_RADIO_STATION: Stored text component limit reached.")
|
|
#ENDIF
|
|
EXIT
|
|
ENDIF
|
|
|
|
// Last item was not a text label
|
|
IF (g_sMenuData.eLastAddedItemType != MENU_ITEM_TEXT)
|
|
#IF IS_DEBUG_BUILD
|
|
CASSERTLN(DEBUG_SYSTEM, "ADD_MENU_ITEM_TEXT_COMPONENT_RADIO_STATION: Last item was not a text item.")
|
|
#ENDIF
|
|
EXIT
|
|
ENDIF
|
|
|
|
// Not expecting a component item
|
|
IF (g_sMenuData.iComponentCount >= g_sMenuData.iComponentItems)
|
|
#IF IS_DEBUG_BUILD
|
|
CASSERTLN(DEBUG_SYSTEM, "ADD_MENU_ITEM_TEXT_COMPONENT_RADIO_STATION: Not expecting a component item.")
|
|
#ENDIF
|
|
EXIT
|
|
ENDIF
|
|
|
|
// Store the value
|
|
g_TUMenuGlobals_tlPlayerNameItem[g_sMenuData.iCurrentPlayerNameItem] = paramRadioStation
|
|
g_sMenuData.iCurrentPlayerNameItem++
|
|
|
|
// Set the component type for the last text item
|
|
g_sMenuData.eTextItemComps[g_sMenuData.iLastTextItem][g_sMenuData.iComponentCount] = MENU_TEXT_COMP_RADIO_STATION
|
|
g_sMenuData.iComponentCount++
|
|
|
|
FLOAT fWidth = GET_LAST_MENU_ITEM_TEXT_WIDTH()
|
|
|
|
// Reduce the string if required...
|
|
IF bReduceTextToFitColumn
|
|
|
|
// Removing for now as it dosent work for us.
|
|
// We will need to scale the text...
|
|
|
|
/*INT iLen = GET_LENGTH_OF_LITERAL_STRING(paramPlayerName)
|
|
// If bigger than width...
|
|
WHILE fWidth > g_sMenuData.fColumnWidth[g_sMenuData.iCurrentColumn-1]
|
|
IF iLen > 1
|
|
// chop a character off using audio command...
|
|
paramPlayerName = GET_CHARACTER_FROM_AUDIO_CONVERSATION_FILENAME(paramPlayerName, 0, iLen-1)
|
|
g_sMenuData.tlPlayerNameItem[g_sMenuData.iCurrentPlayerNameItem-1] = paramPlayerName
|
|
fWidth = GET_LAST_MENU_ITEM_TEXT_WIDTH()
|
|
iLen--
|
|
ELSE
|
|
fWidth = -1.0 // Bail
|
|
ENDIF
|
|
ENDWHILE*/
|
|
ENDIF
|
|
|
|
// Update column offset (use -1 as we would have incremented this when adding the main text label)
|
|
IF g_sMenuData.iComponentCount >= g_sMenuData.iComponentItems
|
|
fWidth = GET_LAST_MENU_ITEM_TEXT_WIDTH()
|
|
// Add toggle icons
|
|
IF g_sMenuData.bItemToggleable[g_sMenuData.iCurrentColumn]
|
|
AND g_sMenuData.iComponentCount = g_sMenuData.iComponentItems //Must be last item
|
|
FLOAT fIconWidth
|
|
FLOAT fIconHeight
|
|
GET_MENU_ICON_SCREEN_RESOLUTION(MENU_ICON_ARROW_L, TRUE, FALSE, fIconWidth, fIconHeight)
|
|
fWidth += (fIconWidth*2)
|
|
ENDIF
|
|
|
|
IF fWidth > g_sMenuData.fColumnWidth[g_sMenuData.iCurrentColumn-1]
|
|
g_sMenuData.fColumnWidth[g_sMenuData.iCurrentColumn-1] = fWidth
|
|
ENDIF
|
|
ENDIF
|
|
|
|
// Update row offset
|
|
IF bAdjustRowHeight
|
|
IF g_sMenuData.iComponentCount >= g_sMenuData.iComponentItems
|
|
FLOAT fHeight = GET_LAST_MENU_ITEM_TEXT_HEIGHT()
|
|
IF fHeight > g_sMenuData.fRowHeight[g_sMenuData.iCurrentRow]
|
|
g_sMenuData.fRowHeight[g_sMenuData.iCurrentRow] = fHeight
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ENDPROC
|
|
/// PURPOSE: Set the sub component value of the current text item
|
|
PROC ADD_MENU_ITEM_TEXT_COMPONENT_LITERAL(STRING paramLiteral, BOOL bAdjustRowHeight = FALSE, BOOL bReduceTextToFitColumn = FALSE, BOOL bCondensedFont = FALSE)
|
|
|
|
// Ran out of stored variables
|
|
IF (g_sMenuData.iCurrentPlayerNameItem >= MAX_STORED_MENU_PLAYER_NAMES)
|
|
#IF IS_DEBUG_BUILD
|
|
CASSERTLN(DEBUG_SYSTEM, "ADD_MENU_ITEM_TEXT_COMPONENT_LITERAL: Stored literal item limit reached. Tell Kenneth R.")
|
|
#ENDIF
|
|
EXIT
|
|
ENDIF
|
|
|
|
// Ran out of stored components
|
|
IF (g_sMenuData.iComponentCount >= MAX_STORED_TEXT_COMPS)
|
|
#IF IS_DEBUG_BUILD
|
|
CASSERTLN(DEBUG_SYSTEM, "ADD_MENU_ITEM_TEXT_COMPONENT_LITERAL: Stored text component limit reached.")
|
|
#ENDIF
|
|
EXIT
|
|
ENDIF
|
|
|
|
// Last item was not a text label
|
|
IF (g_sMenuData.eLastAddedItemType != MENU_ITEM_TEXT)
|
|
#IF IS_DEBUG_BUILD
|
|
CASSERTLN(DEBUG_SYSTEM, "ADD_MENU_ITEM_TEXT_COMPONENT_LITERAL: Last item was not a text item.")
|
|
#ENDIF
|
|
EXIT
|
|
ENDIF
|
|
|
|
// Not expecting a component item
|
|
IF (g_sMenuData.iComponentCount >= g_sMenuData.iComponentItems)
|
|
#IF IS_DEBUG_BUILD
|
|
CASSERTLN(DEBUG_SYSTEM, "ADD_MENU_ITEM_TEXT_COMPONENT_LITERAL: Not expecting a component item.")
|
|
#ENDIF
|
|
EXIT
|
|
ENDIF
|
|
|
|
// Store the value
|
|
g_TUMenuGlobals_tlPlayerNameItem[g_sMenuData.iCurrentPlayerNameItem] = paramLiteral
|
|
g_sMenuData.iCurrentPlayerNameItem++
|
|
|
|
// Set the component type for the last text item
|
|
IF bCondensedFont
|
|
g_sMenuData.eTextItemComps[g_sMenuData.iLastTextItem][g_sMenuData.iComponentCount] = MENU_TEXT_COMP_CONDENSED_LITERAL
|
|
ELSE
|
|
g_sMenuData.eTextItemComps[g_sMenuData.iLastTextItem][g_sMenuData.iComponentCount] = MENU_TEXT_COMP_LITERAL
|
|
ENDIF
|
|
g_sMenuData.iComponentCount++
|
|
|
|
FLOAT fWidth = GET_LAST_MENU_ITEM_TEXT_WIDTH()
|
|
|
|
// Reduce the string if required...
|
|
IF bReduceTextToFitColumn
|
|
|
|
// Removing for now as it dosent work for us.
|
|
// We will need to scale the text...
|
|
|
|
/*INT iLen = GET_LENGTH_OF_LITERAL_STRING(paramLiteral)
|
|
// If bigger than width...
|
|
WHILE fWidth > g_sMenuData.fColumnWidth[g_sMenuData.iCurrentColumn-1]
|
|
IF iLen > 1
|
|
// chop a character off using audio command...
|
|
paramLiteral = GET_CHARACTER_FROM_AUDIO_CONVERSATION_FILENAME(paramLiteral, 0, iLen-1)
|
|
g_sMenuData.tlPlayerNameItem[g_sMenuData.iCurrentPlayerNameItem-1] = paramLiteral
|
|
fWidth = GET_LAST_MENU_ITEM_TEXT_WIDTH()
|
|
iLen--
|
|
ELSE
|
|
fWidth = -1.0 // Bail
|
|
ENDIF
|
|
ENDWHILE*/
|
|
ENDIF
|
|
|
|
// Update column offset (use -1 as we would have incremented this when adding the main text label)
|
|
IF g_sMenuData.iComponentCount >= g_sMenuData.iComponentItems
|
|
fWidth = GET_LAST_MENU_ITEM_TEXT_WIDTH()
|
|
// Add toggle icons
|
|
IF g_sMenuData.bItemToggleable[g_sMenuData.iCurrentColumn]
|
|
AND g_sMenuData.iComponentCount = g_sMenuData.iComponentItems //Must be last item
|
|
FLOAT fIconWidth
|
|
FLOAT fIconHeight
|
|
GET_MENU_ICON_SCREEN_RESOLUTION(MENU_ICON_ARROW_L, TRUE, FALSE, fIconWidth, fIconHeight)
|
|
fWidth += (fIconWidth*2)
|
|
ENDIF
|
|
|
|
IF fWidth > g_sMenuData.fColumnWidth[g_sMenuData.iCurrentColumn-1]
|
|
g_sMenuData.fColumnWidth[g_sMenuData.iCurrentColumn-1] = fWidth
|
|
ENDIF
|
|
ENDIF
|
|
|
|
// Update row offset
|
|
IF bAdjustRowHeight
|
|
IF g_sMenuData.iComponentCount >= g_sMenuData.iComponentItems
|
|
FLOAT fHeight = GET_LAST_MENU_ITEM_TEXT_HEIGHT()
|
|
IF fHeight > g_sMenuData.fRowHeight[g_sMenuData.iCurrentRow]
|
|
g_sMenuData.fRowHeight[g_sMenuData.iCurrentRow] = fHeight
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ENDPROC
|
|
|
|
/// PURPOSE: Set the sub component value of the current text item
|
|
PROC ADD_MENU_ITEM_TEXT_COMPONENT_ICON(MENU_ICON_TYPE paramIcon, BOOL bAdjustRowHeight = FALSE)
|
|
|
|
// Ran out of stored variables
|
|
IF (g_sMenuData.iCurrentIconItem >= MAX_STORED_MENU_ICONS)
|
|
#IF IS_DEBUG_BUILD
|
|
PRINTLN("ADD_MENU_ITEM_TEXT_COMPONENT_ICON: Stored icon item limit reached. iCurrentIconItem:", g_sMenuData.iCurrentIconItem, " >= MAX_STORED_MENU_ICONS:", MAX_STORED_MENU_ICONS)
|
|
CASSERTLN(DEBUG_SYSTEM, "ADD_MENU_ITEM_TEXT_COMPONENT_ICON: Stored icon item limit reached. Tell Kenneth R.")
|
|
#ENDIF
|
|
EXIT
|
|
ENDIF
|
|
|
|
// Ran out of stored components
|
|
IF (g_sMenuData.iComponentCount >= MAX_STORED_TEXT_COMPS)
|
|
#IF IS_DEBUG_BUILD
|
|
PRINTLN("ADD_MENU_ITEM_TEXT_COMPONENT_ICON: Stored text component limit reached. iComponentCount:", g_sMenuData.iComponentCount, " >= MAX_STORED_TEXT_COMPS:", MAX_STORED_TEXT_COMPS)
|
|
CASSERTLN(DEBUG_SYSTEM, "ADD_MENU_ITEM_TEXT_COMPONENT_ICON: Stored text component limit reached.")
|
|
#ENDIF
|
|
EXIT
|
|
ENDIF
|
|
|
|
// Last item was not a text label
|
|
IF (g_sMenuData.eLastAddedItemType != MENU_ITEM_TEXT)
|
|
#IF IS_DEBUG_BUILD
|
|
PRINTLN("ADD_MENU_ITEM_TEXT_COMPONENT_ICON: Last item was not a text item. eLastAddedItemType:", g_sMenuData.eLastAddedItemType, " != MENU_ITEM_TEXT:", MENU_ITEM_TEXT)
|
|
CASSERTLN(DEBUG_SYSTEM, "ADD_MENU_ITEM_TEXT_COMPONENT_ICON: Last item was not a text item.")
|
|
#ENDIF
|
|
EXIT
|
|
ENDIF
|
|
|
|
// Not expecting a component item
|
|
IF (g_sMenuData.iComponentCount >= g_sMenuData.iComponentItems)
|
|
#IF IS_DEBUG_BUILD
|
|
PRINTLN("ADD_MENU_ITEM_TEXT_COMPONENT_ICON: Not expecting a component item. iComponentCount:", g_sMenuData.iComponentCount, " >= iComponentItems:", g_sMenuData.iComponentItems)
|
|
CASSERTLN(DEBUG_SYSTEM, "ADD_MENU_ITEM_TEXT_COMPONENT_ICON: Not expecting a component item.")
|
|
#ENDIF
|
|
EXIT
|
|
ENDIF
|
|
|
|
// Store the value
|
|
g_sMenuData.eIconItem[g_sMenuData.iCurrentIconItem] = paramIcon
|
|
g_sMenuData.iCurrentIconItem++
|
|
|
|
// Set the component type for the last text item
|
|
g_sMenuData.eTextItemComps[g_sMenuData.iLastTextItem][g_sMenuData.iComponentCount] = MENU_TEXT_COMP_ICON
|
|
g_sMenuData.iComponentCount++
|
|
|
|
// Update column offset (use -1 as we would have incremented this when adding the main text label)
|
|
IF g_sMenuData.iComponentCount >= g_sMenuData.iComponentItems
|
|
FLOAT fWidth = GET_LAST_MENU_ITEM_TEXT_WIDTH()
|
|
|
|
// Add toggle icons
|
|
IF g_sMenuData.bItemToggleable[g_sMenuData.iCurrentColumn]
|
|
AND g_sMenuData.iComponentCount = g_sMenuData.iComponentItems //Must be last item
|
|
FLOAT fIconWidth
|
|
FLOAT fIconHeight
|
|
GET_MENU_ICON_SCREEN_RESOLUTION(MENU_ICON_ARROW_L, TRUE, FALSE, fIconWidth, fIconHeight)
|
|
fWidth += (fIconWidth*2)
|
|
ENDIF
|
|
|
|
IF fWidth > g_sMenuData.fColumnWidth[g_sMenuData.iCurrentColumn-1]
|
|
g_sMenuData.fColumnWidth[g_sMenuData.iCurrentColumn-1] = fWidth
|
|
ENDIF
|
|
ENDIF
|
|
|
|
// Update row offset
|
|
IF bAdjustRowHeight
|
|
IF g_sMenuData.iComponentCount >= g_sMenuData.iComponentItems
|
|
FLOAT fHeight = GET_LAST_MENU_ITEM_TEXT_HEIGHT()
|
|
IF fHeight > g_sMenuData.fRowHeight[g_sMenuData.iCurrentRow]
|
|
g_sMenuData.fRowHeight[g_sMenuData.iCurrentRow] = fHeight
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ENDPROC
|
|
|
|
/// PURPOSE: Set the value of the next int item
|
|
PROC ADD_MENU_ITEM_INT(INT paramRow, INT paramInt, BOOL bAdjustRowHeight = FALSE)
|
|
|
|
// Already defined menu row
|
|
IF (g_sMenuData.iCurrentRow > paramRow)
|
|
#IF IS_DEBUG_BUILD
|
|
CASSERTLN(DEBUG_SYSTEM, "ADD_MENU_ITEM_INT: Row ", paramRow, " already defined. Make sure you have called CLEAR_MENU() before building new menu \"", paramInt, "\".")
|
|
#ENDIF
|
|
EXIT
|
|
ENDIF
|
|
|
|
// Ran out of menu row
|
|
IF (g_sMenuData.iCurrentRow >= MAX_MENU_ROWS)
|
|
#IF IS_DEBUG_BUILD
|
|
CASSERTLN(DEBUG_SYSTEM, "ADD_MENU_ITEM_INT: Menu row is out of range. If you need more rows tell Kenneth R.")
|
|
#ENDIF
|
|
EXIT
|
|
ENDIF
|
|
|
|
// Ran out of stored variables
|
|
IF (g_sMenuData.iCurrentIntItem >= MAX_STORED_MENU_INTS)
|
|
#IF IS_DEBUG_BUILD
|
|
CASSERTLN(DEBUG_SYSTEM, "ADD_MENU_ITEM_INT: Stored int item limit reached. Tell Kenneth R.")
|
|
#ENDIF
|
|
EXIT
|
|
ENDIF
|
|
|
|
// Expecting component item
|
|
IF (g_sMenuData.iComponentCount < g_sMenuData.iComponentItems)
|
|
#IF IS_DEBUG_BUILD
|
|
CASSERTLN(DEBUG_SYSTEM, "ADD_MENU_ITEM_INT: Expecting component item for text label.")
|
|
#ENDIF
|
|
EXIT
|
|
ENDIF
|
|
|
|
// Update expected item
|
|
IF (g_sMenuData.iCurrentRow != paramRow)
|
|
g_sMenuData.iCurrentRow = paramRow
|
|
g_sMenuData.iCurrentColumn = 0
|
|
ENDIF
|
|
MENU_ITEM_TYPE eNextItem = g_sMenuData.eItemLayout[g_sMenuData.iCurrentColumn]
|
|
|
|
// Item type not expected (optional item must have been skipped)
|
|
IF (eNextItem != MENU_ITEM_INT)
|
|
// Find next item that matches type
|
|
WHILE (g_sMenuData.iCurrentColumn < MAX_MENU_COLUMNS-1)
|
|
AND (eNextItem != MENU_ITEM_INT)
|
|
g_sMenuData.iCurrentColumn++
|
|
eNextItem = g_sMenuData.eItemLayout[g_sMenuData.iCurrentColumn]
|
|
ENDWHILE
|
|
// Unable to find matching type
|
|
IF (eNextItem != MENU_ITEM_INT)
|
|
#IF IS_DEBUG_BUILD
|
|
CASSERTLN(DEBUG_SYSTEM, "ADD_MENU_ITEM_INT: Unable to add item. Check that this item has been specified in SET_MENU_LAYOUT().")
|
|
#ENDIF
|
|
EXIT
|
|
ENDIF
|
|
ENDIF
|
|
|
|
// Store the value
|
|
g_sMenuData.iItem[g_sMenuData.iCurrentIntItem] = paramInt
|
|
g_sMenuData.iCurrentIntItem++
|
|
|
|
// Update column offset
|
|
FLOAT fWidth = GET_MENU_ITEM_TEXT_WIDTH_WITH_INT("NUMBER", paramInt)
|
|
|
|
// Add toggle icons
|
|
IF g_sMenuData.bItemToggleable[g_sMenuData.iCurrentColumn]
|
|
FLOAT fIconWidth
|
|
FLOAT fIconHeight
|
|
GET_MENU_ICON_SCREEN_RESOLUTION(MENU_ICON_ARROW_L, TRUE, FALSE, fIconWidth, fIconHeight)
|
|
fWidth += (fIconWidth*2)
|
|
ENDIF
|
|
|
|
IF fWidth > g_sMenuData.fColumnWidth[g_sMenuData.iCurrentColumn]
|
|
g_sMenuData.fColumnWidth[g_sMenuData.iCurrentColumn] = fWidth
|
|
ENDIF
|
|
|
|
// Update row offset
|
|
IF bAdjustRowHeight
|
|
FLOAT fHeight = GET_MENU_ITEM_TEXT_HEIGHT_WITH_INT("NUMBER", paramInt)
|
|
IF fHeight > g_sMenuData.fRowHeight[paramRow]
|
|
g_sMenuData.fRowHeight[paramRow] = fHeight
|
|
ENDIF
|
|
ENDIF
|
|
|
|
// Mark the item as set
|
|
SET_BIT(g_sMenuData.iItemBitset[paramRow], g_sMenuData.iCurrentColumn)
|
|
g_sMenuData.iCurrentColumn++
|
|
|
|
// Set the last item type
|
|
g_sMenuData.eLastAddedItemType = MENU_ITEM_INT
|
|
ENDPROC
|
|
|
|
/// PURPOSE: Set the value of the next float item
|
|
PROC ADD_MENU_ITEM_FLOAT(INT paramRow, FLOAT paramFloat, INT paramDecimalPlaces = 1, BOOL bAdjustRowHeight = FALSE)
|
|
|
|
// Already defined menu row
|
|
IF (g_sMenuData.iCurrentRow > paramRow)
|
|
#IF IS_DEBUG_BUILD
|
|
CASSERTLN(DEBUG_SYSTEM, "ADD_MENU_ITEM_FLOAT: Row ", paramRow, " already defined. Make sure you have called CLEAR_MENU() before building new menu \"", GET_STRING_FROM_FLOAT(paramFloat), "\".")
|
|
#ENDIF
|
|
EXIT
|
|
ENDIF
|
|
|
|
// Ran out of menu rows
|
|
IF (g_sMenuData.iCurrentRow >= MAX_MENU_ROWS)
|
|
#IF IS_DEBUG_BUILD
|
|
CASSERTLN(DEBUG_SYSTEM, "ADD_MENU_ITEM_FLOAT: Menu row is out of range. If you need more rows tell Kenneth R.")
|
|
#ENDIF
|
|
EXIT
|
|
ENDIF
|
|
|
|
// Ran out of stored variables
|
|
IF (g_sMenuData.iCurrentFloatItem >= MAX_STORED_MENU_FLOATS)
|
|
#IF IS_DEBUG_BUILD
|
|
CASSERTLN(DEBUG_SYSTEM, "ADD_MENU_ITEM_FLOAT: Stored float item limit reached. Tell Kenneth R.")
|
|
#ENDIF
|
|
EXIT
|
|
ENDIF
|
|
|
|
// Expecting component item
|
|
IF (g_sMenuData.iComponentCount < g_sMenuData.iComponentItems)
|
|
#IF IS_DEBUG_BUILD
|
|
CASSERTLN(DEBUG_SYSTEM, "ADD_MENU_ITEM_FLOAT: Expecting component item for text label.")
|
|
#ENDIF
|
|
EXIT
|
|
ENDIF
|
|
|
|
// Update expected item
|
|
IF (g_sMenuData.iCurrentRow != paramRow)
|
|
g_sMenuData.iCurrentRow = paramRow
|
|
g_sMenuData.iCurrentColumn = 0
|
|
ENDIF
|
|
MENU_ITEM_TYPE eNextItem = g_sMenuData.eItemLayout[g_sMenuData.iCurrentColumn]
|
|
|
|
// Item type not expected (optional item must have been skipped)
|
|
IF (eNextItem != MENU_ITEM_FLOAT)
|
|
// Find next item that matches type
|
|
WHILE (g_sMenuData.iCurrentColumn < MAX_MENU_COLUMNS-1)
|
|
AND (eNextItem != MENU_ITEM_FLOAT)
|
|
g_sMenuData.iCurrentColumn++
|
|
eNextItem = g_sMenuData.eItemLayout[g_sMenuData.iCurrentColumn]
|
|
ENDWHILE
|
|
// Unable to find matching type
|
|
IF (eNextItem != MENU_ITEM_FLOAT)
|
|
#IF IS_DEBUG_BUILD
|
|
CASSERTLN(DEBUG_SYSTEM, "ADD_MENU_ITEM_FLOAT: Unable to add item. Check that this item has been specified in SET_MENU_LAYOUT().")
|
|
#ENDIF
|
|
EXIT
|
|
ENDIF
|
|
ENDIF
|
|
|
|
// Store the value
|
|
g_sMenuData.fItem[g_sMenuData.iCurrentFloatItem] = paramFloat
|
|
g_sMenuData.iFloatDP[g_sMenuData.iCurrentFloatItem] = paramDecimalPlaces
|
|
g_sMenuData.iCurrentFloatItem++
|
|
|
|
// Update column offset
|
|
FLOAT fWidth = GET_MENU_ITEM_TEXT_WIDTH_WITH_FLOAT("NUMBER", paramFloat, paramDecimalPlaces)
|
|
|
|
// Add toggle icons
|
|
IF g_sMenuData.bItemToggleable[g_sMenuData.iCurrentColumn]
|
|
FLOAT fIconWidth
|
|
FLOAT fIconHeight
|
|
GET_MENU_ICON_SCREEN_RESOLUTION(MENU_ICON_ARROW_L, TRUE, FALSE, fIconWidth, fIconHeight)
|
|
fWidth += (fIconWidth*2)
|
|
ENDIF
|
|
|
|
IF fWidth > g_sMenuData.fColumnWidth[g_sMenuData.iCurrentColumn]
|
|
g_sMenuData.fColumnWidth[g_sMenuData.iCurrentColumn] = fWidth
|
|
ENDIF
|
|
|
|
// Update row offset
|
|
IF bAdjustRowHeight
|
|
FLOAT fHeight = GET_MENU_ITEM_TEXT_HEIGHT_WITH_FLOAT("NUMBER", paramFloat, paramDecimalPlaces)
|
|
IF fHeight > g_sMenuData.fRowHeight[paramRow]
|
|
g_sMenuData.fRowHeight[paramRow] = fHeight
|
|
ENDIF
|
|
ENDIF
|
|
|
|
// Mark the item as set
|
|
SET_BIT(g_sMenuData.iItemBitset[paramRow], g_sMenuData.iCurrentColumn)
|
|
g_sMenuData.iCurrentColumn++
|
|
|
|
// Set the last item type
|
|
g_sMenuData.eLastAddedItemType = MENU_ITEM_FLOAT
|
|
ENDPROC
|
|
|
|
/// PURPOSE: Add a space between the current and next menu items
|
|
PROC ADD_MENU_SPACER()
|
|
// Ran out of menu rows
|
|
IF (g_sMenuData.iCurrentRow >= MAX_MENU_ROWS-1)
|
|
#IF IS_DEBUG_BUILD
|
|
CASSERTLN(DEBUG_SYSTEM, "ADD_MENU_SPACER: Menu row is out of range. If you need more rows tell Kenneth R.")
|
|
#ENDIF
|
|
EXIT
|
|
ENDIF
|
|
|
|
g_sMenuData.bMenuRowHasSpacer[g_sMenuData.iCurrentRow+1] = TRUE
|
|
ENDPROC
|
|
|
|
/// PURPOSE: Set the value of the next icon item
|
|
PROC ADD_MENU_ITEM_ICON(INT paramRow, MENU_ICON_TYPE paramIcon, BOOL bAdjustRowHeight = FALSE)
|
|
|
|
// Already defined menu row
|
|
IF (g_sMenuData.iCurrentRow > paramRow)
|
|
#IF IS_DEBUG_BUILD
|
|
CASSERTLN(DEBUG_SYSTEM, "ADD_MENU_ITEM_ICON: Row ", paramRow, " already defined. Make sure you have called CLEAR_MENU() before building new menu \"", ENUM_TO_INT(paramIcon), "\".")
|
|
#ENDIF
|
|
EXIT
|
|
ENDIF
|
|
|
|
// Ran out of menu rows
|
|
IF (g_sMenuData.iCurrentRow >= MAX_MENU_ROWS)
|
|
#IF IS_DEBUG_BUILD
|
|
CASSERTLN(DEBUG_SYSTEM, "ADD_MENU_ITEM_ICON: Menu row is out of range. If you need more rows tell Kenneth R.")
|
|
#ENDIF
|
|
EXIT
|
|
ENDIF
|
|
|
|
// Ran out of stored variables
|
|
IF (g_sMenuData.iCurrentIconItem >= MAX_STORED_MENU_ICONS)
|
|
#IF IS_DEBUG_BUILD
|
|
CASSERTLN(DEBUG_SYSTEM, "ADD_MENU_ITEM_ICON: Stored icon item limit reached. Tell Kenneth R.")
|
|
#ENDIF
|
|
EXIT
|
|
ENDIF
|
|
|
|
// Expecting component item
|
|
IF (g_sMenuData.iComponentCount < g_sMenuData.iComponentItems)
|
|
#IF IS_DEBUG_BUILD
|
|
CASSERTLN(DEBUG_SYSTEM, "ADD_MENU_ITEM_ICON: Expecting component item for text label.")
|
|
#ENDIF
|
|
EXIT
|
|
ENDIF
|
|
|
|
// Update expected item
|
|
IF (g_sMenuData.iCurrentRow != paramRow)
|
|
g_sMenuData.iCurrentRow = paramRow
|
|
g_sMenuData.iCurrentColumn = 0
|
|
ENDIF
|
|
MENU_ITEM_TYPE eNextItem = g_sMenuData.eItemLayout[g_sMenuData.iCurrentColumn]
|
|
|
|
// Item type not expected (optional item must have been skipped)
|
|
IF (eNextItem != MENU_ITEM_ICON)
|
|
// Find next item that matches type
|
|
WHILE (g_sMenuData.iCurrentColumn < MAX_MENU_COLUMNS-1)
|
|
AND (eNextItem != MENU_ITEM_ICON)
|
|
g_sMenuData.iCurrentColumn++
|
|
eNextItem = g_sMenuData.eItemLayout[g_sMenuData.iCurrentColumn]
|
|
ENDWHILE
|
|
// Unable to find matching type
|
|
IF (eNextItem != MENU_ITEM_ICON)
|
|
#IF IS_DEBUG_BUILD
|
|
CASSERTLN(DEBUG_SYSTEM, "ADD_MENU_ITEM_ICON: Unable to add item. Check that this item has been specified in SET_MENU_LAYOUT().")
|
|
#ENDIF
|
|
EXIT
|
|
ENDIF
|
|
ENDIF
|
|
|
|
// Store the value
|
|
g_sMenuData.eIconItem[g_sMenuData.iCurrentIconItem] = paramIcon
|
|
g_sMenuData.iCurrentIconItem++
|
|
|
|
// Update column offset
|
|
IF paramIcon <> MENU_ICON_DUMMY
|
|
FLOAT fWidth, fHeight
|
|
GET_MENU_ICON_SCREEN_RESOLUTION(paramIcon, TRUE, FALSE, fWidth, fHeight)
|
|
|
|
// Add toggle icons
|
|
IF g_sMenuData.bItemToggleable[g_sMenuData.iCurrentColumn]
|
|
FLOAT fIconWidth
|
|
FLOAT fIconHeight
|
|
GET_MENU_ICON_SCREEN_RESOLUTION(MENU_ICON_ARROW_L, TRUE, FALSE, fIconWidth, fIconHeight)
|
|
fWidth += (fIconWidth*2)
|
|
ENDIF
|
|
|
|
IF fWidth > g_sMenuData.fColumnWidth[g_sMenuData.iCurrentColumn]
|
|
g_sMenuData.fColumnWidth[g_sMenuData.iCurrentColumn] = fWidth
|
|
ENDIF
|
|
|
|
// If the icon is a shop logo, adjust the row height
|
|
IF bAdjustRowHeight
|
|
IF fHeight > g_sMenuData.fRowHeight[paramRow]
|
|
g_sMenuData.fRowHeight[paramRow] = fHeight
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
|
|
// Mark the item as set
|
|
SET_BIT(g_sMenuData.iItemBitset[paramRow], g_sMenuData.iCurrentColumn)
|
|
g_sMenuData.iCurrentColumn++
|
|
|
|
// Set the last item type
|
|
g_sMenuData.eLastAddedItemType = MENU_ITEM_ICON
|
|
ENDPROC
|
|
|
|
PROC ADD_MENU_ITEM_ICON_TICK_BOX(INT iParamRow, BOOL bIconState)
|
|
MENU_ICON_TYPE menuIcon
|
|
IF NOT bIconState
|
|
menuIcon = MENU_ICON_BOX_EMPTY
|
|
ELSE
|
|
menuIcon = MENU_ICON_BOX_TICK
|
|
ENDIF
|
|
ADD_MENU_ITEM_ICON(iParamRow, menuIcon)
|
|
ENDPROC
|
|
|
|
|
|
/// PURPOSE: Adds a help key to the menu
|
|
PROC ADD_MENU_HELP_KEY(STRING paramKey, STRING paramLabel, INT paramINT = -1)
|
|
// Ran out of stored variables
|
|
IF (g_sMenuData.iHelpCount >= MAX_STORED_HELP_KEYS)
|
|
|
|
#IF USE_TU_CHANGES
|
|
// HELP KEY OVERFLOW
|
|
g_sMenuData_TU.eHelpKey = paramKey
|
|
g_sMenuData_TU.tl15HelpText = paramLabel
|
|
g_sMenuData_TU.iHelpTextINT = paramINT
|
|
PRINTLN("ADD_MENU_HELP_KEY: Stored help limit reached. using overflow.")
|
|
EXIT
|
|
#ENDIF
|
|
|
|
#IF IS_DEBUG_BUILD
|
|
CASSERTLN(DEBUG_SYSTEM, "ADD_MENU_HELP_KEY: Stored help limit reached. Tell Kenneth R.")
|
|
#ENDIF
|
|
EXIT
|
|
ENDIF
|
|
|
|
// Set non-clickable
|
|
CLEAR_BIT(g_sMenuData.iHelpKeyIsClickableBits, g_sMenuData.iHelpCount)
|
|
|
|
// Store the values
|
|
g_sMenuData.eHelpKey[g_sMenuData.iHelpCount] = paramKey
|
|
g_sMenuData.tl15HelpText[g_sMenuData.iHelpCount] = paramLabel
|
|
g_sMenuData.iHelpTextINT[g_sMenuData.iHelpCount] = paramINT
|
|
g_sMenuData.caHelpTextInput[g_sMenuData.iHelpCount] = MAX_INPUTS // Does not store either the input or inputgroup that the control is representing
|
|
g_sMenuData.caHelpTextInputGroup[g_sMenuData.iHelpCount] = MAX_INPUTGROUPS // This means it will not update the string if the control method changes
|
|
g_sMenuData.iHelpCount++
|
|
|
|
ENDPROC
|
|
|
|
/// PURPOSE: Adds a help key to the menu
|
|
PROC ADD_MENU_HELP_KEY_INPUT(CONTROL_ACTION paramInput, STRING paramLabel, INT paramINT = -1)
|
|
|
|
STRING paramKey = GET_CONTROL_INSTRUCTIONAL_BUTTONS_STRING(FRONTEND_CONTROL, paramInput)
|
|
|
|
// Ran out of stored variables
|
|
IF (g_sMenuData.iHelpCount >= MAX_STORED_HELP_KEYS)
|
|
|
|
#IF USE_TU_CHANGES
|
|
// HELP KEY OVERFLOW
|
|
g_sMenuData_TU.eHelpKey = paramKey
|
|
g_sMenuData_TU.tl15HelpText = paramLabel
|
|
g_sMenuData_TU.iHelpTextINT = paramINT
|
|
PRINTLN("ADD_MENU_HELP_KEY_INPUT: Stored help limit reached. using overflow.")
|
|
EXIT
|
|
#ENDIF
|
|
|
|
#IF IS_DEBUG_BUILD
|
|
CASSERTLN(DEBUG_SYSTEM, "ADD_MENU_HELP_KEY_INPUT: Stored help limit reached. Tell Kenneth R.")
|
|
#ENDIF
|
|
EXIT
|
|
ENDIF
|
|
|
|
// Set non-clickable
|
|
CLEAR_BIT(g_sMenuData.iHelpKeyIsClickableBits, g_sMenuData.iHelpCount)
|
|
|
|
// Store the values
|
|
g_sMenuData.eHelpKey[g_sMenuData.iHelpCount] = paramKey
|
|
g_sMenuData.tl15HelpText[g_sMenuData.iHelpCount] = paramLabel
|
|
g_sMenuData.iHelpTextINT[g_sMenuData.iHelpCount] = paramINT
|
|
g_sMenuData.caHelpTextInput[g_sMenuData.iHelpCount] = paramInput // Stores the input that the control represents
|
|
g_sMenuData.caHelpTextInputGroup[g_sMenuData.iHelpCount] = MAX_INPUTGROUPS // If the control method changes, the string will be recalculated from this
|
|
g_sMenuData.iHelpCount++
|
|
|
|
ENDPROC
|
|
|
|
/// PURPOSE: Checks if the chosen help key exists
|
|
FUNC BOOL DOES_HELP_KEY_INPUT_EXIST(CONTROL_ACTION paramInput, STRING paramLabel)
|
|
INT i
|
|
BOOL bFound
|
|
FOR i=0 TO g_sMenuData.iHelpCount
|
|
IF g_sMenuData.caHelpTextInput[i] = paramInput
|
|
IF ARE_STRINGS_EQUAL(g_sMenuData.tl15HelpText[i], paramLabel)
|
|
bFound = TRUE
|
|
ENDIF
|
|
ENDIF
|
|
ENDFOR
|
|
|
|
RETURN bFound
|
|
ENDFUNC
|
|
|
|
|
|
/// PURPOSE: Adds a help key to the menu
|
|
PROC ADD_MENU_HELP_KEY_GROUP(CONTROL_ACTION_GROUP paramGroupInput, STRING paramLabel, INT paramINT = -1)
|
|
|
|
STRING paramKey = GET_CONTROL_GROUP_INSTRUCTIONAL_BUTTONS_STRING(FRONTEND_CONTROL, paramGroupInput)
|
|
|
|
// Ran out of stored variables
|
|
IF (g_sMenuData.iHelpCount >= MAX_STORED_HELP_KEYS)
|
|
|
|
#IF USE_TU_CHANGES
|
|
// HELP KEY OVERFLOW
|
|
g_sMenuData_TU.eHelpKey = paramKey
|
|
g_sMenuData_TU.tl15HelpText = paramLabel
|
|
g_sMenuData_TU.iHelpTextINT = paramINT
|
|
PRINTLN("ADD_MENU_HELP_KEY_INPUT: Stored help limit reached. using overflow.")
|
|
EXIT
|
|
#ENDIF
|
|
|
|
#IF IS_DEBUG_BUILD
|
|
CASSERTLN(DEBUG_SYSTEM, "ADD_MENU_HELP_KEY_INPUT: Stored help limit reached. Tell Kenneth R.")
|
|
#ENDIF
|
|
EXIT
|
|
ENDIF
|
|
|
|
// Set non-clickable
|
|
CLEAR_BIT(g_sMenuData.iHelpKeyIsClickableBits, g_sMenuData.iHelpCount)
|
|
|
|
// Store the values
|
|
g_sMenuData.eHelpKey[g_sMenuData.iHelpCount] = paramKey
|
|
g_sMenuData.tl15HelpText[g_sMenuData.iHelpCount] = paramLabel
|
|
g_sMenuData.iHelpTextINT[g_sMenuData.iHelpCount] = paramINT
|
|
g_sMenuData.caHelpTextInput[g_sMenuData.iHelpCount] = MAX_INPUTS // Stores the inputgroup that the control represents
|
|
g_sMenuData.caHelpTextInputGroup[g_sMenuData.iHelpCount] = paramGroupInput // If the control method changes, the string will be recalculated from this
|
|
g_sMenuData.iHelpCount++
|
|
|
|
ENDPROC
|
|
|
|
/// PURPOSE: Adds a help key to the menu, clickable with mouse on PC.
|
|
PROC ADD_MENU_HELP_KEY_CLICKABLE(CONTROL_ACTION paramInput, STRING paramLabel, INT paramINT = -1, BOOL bIgnoreCursor = FALSE)
|
|
|
|
STRING paramKey = GET_CONTROL_INSTRUCTIONAL_BUTTONS_STRING(FRONTEND_CONTROL, paramInput)
|
|
|
|
IF (g_sMenuData.iHelpCount >= MAX_STORED_HELP_KEYS)
|
|
|
|
#IF USE_TU_CHANGES
|
|
// HELP KEY OVERFLOW
|
|
g_sMenuData_TU.eHelpKey = paramKey
|
|
g_sMenuData_TU.tl15HelpText = paramLabel
|
|
g_sMenuData_TU.iHelpTextINT = paramINT
|
|
PRINTLN("ADD_MENU_HELP_KEY_CLICKABLE: Stored help limit reached. using overflow.")
|
|
EXIT
|
|
#ENDIF
|
|
|
|
#IF IS_DEBUG_BUILD
|
|
CASSERTLN(DEBUG_SYSTEM, "ADD_MENU_HELP_KEY_CLICKABLE: Stored help limit reached. Tell Kenneth R.")
|
|
#ENDIF
|
|
EXIT
|
|
ENDIF
|
|
|
|
// Set clickable
|
|
IF NOT bIgnoreCursor
|
|
SET_BIT(g_sMenuData.iHelpKeyIsClickableBits, g_sMenuData.iHelpCount)
|
|
ENDIF
|
|
|
|
// Store the values
|
|
g_sMenuData.eHelpKey[g_sMenuData.iHelpCount] = paramKey
|
|
g_sMenuData.tl15HelpText[g_sMenuData.iHelpCount] = paramLabel
|
|
g_sMenuData.iHelpTextINT[g_sMenuData.iHelpCount] = paramINT
|
|
g_sMenuData.caHelpTextInput[g_sMenuData.iHelpCount] = paramInput // Stores the input that the control represents
|
|
g_sMenuData.caHelpTextInputGroup[g_sMenuData.iHelpCount] = MAX_INPUTGROUPS // If the control method changes, the string will be recalculated from this
|
|
g_sMenuData.iHelpCount++
|
|
|
|
ENDPROC
|
|
|
|
|
|
|
|
|
|
/// PURPOSE: Adds a help key to the menu
|
|
PROC ADD_MENU_HELP_KEY_WITH_MULTIPLE_BUTTONS(STRING paramLabel, STRING paramKey1, STRING paramKey2, STRING paramKey3 = NULL, STRING paramKey4 = NULL)
|
|
// Ran out of stored variables
|
|
IF (g_sMenuData.iHelpCount >= MAX_STORED_HELP_KEYS)
|
|
#IF IS_DEBUG_BUILD
|
|
CASSERTLN(DEBUG_SYSTEM, "ADD_MENU_HELP_KEY_WITH_MULTIPLE_BUTTONS: Stored help limit reached. Tell Kenneth R.")
|
|
#ENDIF
|
|
EXIT
|
|
ENDIF
|
|
|
|
PRINTLN( "ADD_MENU_HELP_KEY_WITH_MULTIPLE_BUTTONS(", paramLabel,
|
|
", ",paramKey1,
|
|
", ",paramKey2,
|
|
", ",paramKey3,
|
|
", ", paramKey4,")")
|
|
|
|
// Sore the values
|
|
g_sMenuData.eHelpKey[g_sMenuData.iHelpCount] = paramKey1
|
|
g_sMenuData.tl15HelpText[g_sMenuData.iHelpCount] = paramLabel
|
|
g_sMenuData.iHelpCount++
|
|
|
|
g_sMenuData.eHelpKey[g_sMenuData.iHelpCount] = paramKey2
|
|
g_sMenuData.tl15HelpText[g_sMenuData.iHelpCount] = "PREV"
|
|
g_sMenuData.iHelpCount++
|
|
|
|
IF NOT IS_STRING_NULL_OR_EMPTY(paramKey3)
|
|
g_sMenuData.eHelpKey[g_sMenuData.iHelpCount] = paramKey3
|
|
g_sMenuData.tl15HelpText[g_sMenuData.iHelpCount] = "PREV"
|
|
g_sMenuData.iHelpCount++
|
|
ENDIF
|
|
|
|
IF NOT IS_STRING_NULL_OR_EMPTY(paramKey4)
|
|
g_sMenuData.eHelpKey[g_sMenuData.iHelpCount] = paramKey4
|
|
g_sMenuData.tl15HelpText[g_sMenuData.iHelpCount] = "PREV"
|
|
g_sMenuData.iHelpCount++
|
|
ENDIF
|
|
ENDPROC
|
|
|
|
|
|
|
|
/// PURPOSE:
|
|
/// Draws the scroll box highlight when you mouse-over the scroll icons at the bottom of the menu.
|
|
/// PARAMS:
|
|
/// bIsWardrobe - TRUE if the wardrobe, as this needs to be rendered differently due to the difference in the scrollbox colour.
|
|
PROC DRAW_CURSOR_SCROLL_HIGHLIGHT(BOOL bIsWardrobe = FALSE)
|
|
|
|
FLOAT fMenuXMin
|
|
FLOAT fMenuYMax
|
|
|
|
FLOAT fScrollBoxTriggerAreaHeight = CUSTOM_MENU_ITEM_BAR_H / 2
|
|
|
|
INT iAlpha
|
|
|
|
IF bIsWardrobe
|
|
iAlpha = 48
|
|
ELSE
|
|
iAlpha = 210
|
|
ENDIF
|
|
|
|
fMenuXMin = CUSTOM_MENU_X // Default for shops - may have to be changed for other menus.
|
|
fMenuYMax = g_sMenuData.fSetupFinalBodyY
|
|
|
|
// Set up safe-zone adjust
|
|
SET_SCRIPT_GFX_ALIGN(UI_ALIGN_LEFT, UI_ALIGN_TOP)
|
|
SET_SCRIPT_GFX_ALIGN_PARAMS(-0.05, -0.05, 0.0, 0.0)
|
|
|
|
// Highlight scroll up
|
|
IF g_iMenuCursorItem = MENU_CURSOR_SCROLL_UP
|
|
DRAW_RECT_FROM_CORNER(fMenuXMin, fMenuYMax,CUSTOM_MENU_W, fScrollBoxTriggerAreaHeight, 255, 255, 255, iAlpha )
|
|
// Highlight scroll down
|
|
ELIF g_iMenuCursorItem = MENU_CURSOR_SCROLL_DOWN
|
|
DRAW_RECT_FROM_CORNER(fMenuXMin, fMenuYMax + fScrollBoxTriggerAreaHeight, CUSTOM_MENU_W, fScrollBoxTriggerAreaHeight, 255, 255, 255, iAlpha )
|
|
ENDIF
|
|
|
|
RESET_SCRIPT_GFX_ALIGN()
|
|
|
|
ENDPROC
|
|
|
|
PROC DISPLAY_DEBUG_FOR_HANDLE_CURSOR_HIGHLIGHTED_MENU_ITEMS()
|
|
FLOAT fMenuXMin
|
|
FLOAT fMenuYMin
|
|
FLOAT fMenuXMax
|
|
FLOAT fMenuYMax
|
|
|
|
fMenuXMin = CUSTOM_MENU_X // Default for shops - may have to be changed for other menus.
|
|
fMenuXMax = fMenuXMin + CUSTOM_MENU_W
|
|
fMenuYMax = g_sMenuData.fSetupFinalBodyY
|
|
fMenuYMin = g_sMenuData.fSetupFinalBodyY - (g_sMenuData.iSetupTotalDisplayRows * CUSTOM_MENU_ITEM_BAR_H )
|
|
|
|
IF g_sMenuData.iSetupTotalDisplayRows < 1
|
|
fMenuYMin = g_sMenuData.fSetupFinalBodyY - CUSTOM_MENU_ITEM_BAR_H
|
|
ENDIF
|
|
|
|
SET_TEXT_SCALE(0.4, 0.4) DISPLAY_TEXT_WITH_FLOAT(0.7, 0.40, "NUMBER", fMenuXMin, 4)
|
|
SET_TEXT_SCALE(0.4, 0.4) DISPLAY_TEXT_WITH_FLOAT(0.8, 0.40, "NUMBER", fMenuYMin, 4)
|
|
SET_TEXT_SCALE(0.4, 0.4) DISPLAY_TEXT_WITH_FLOAT(0.7, 0.45, "NUMBER", fMenuXMax, 4)
|
|
SET_TEXT_SCALE(0.4, 0.4) DISPLAY_TEXT_WITH_FLOAT(0.8, 0.45, "NUMBER", fMenuYMax, 4)
|
|
|
|
SET_TEXT_SCALE(0.4, 0.4) DISPLAY_TEXT_WITH_FLOAT(0.7, 0.50, "NUMBER", g_sMenuData.fSetupFinalBodyY, 4)
|
|
SET_TEXT_SCALE(0.4, 0.4) DISPLAY_TEXT_WITH_NUMBER(0.7, 0.55, "NUMBER", g_sMenuData.iSetupTotalDisplayRows)
|
|
SET_TEXT_SCALE(0.4, 0.4) DISPLAY_TEXT_WITH_NUMBER(0.7, 0.60, "NUMBER", g_sMenuData.iSetupTotalSelectableRows)
|
|
SET_TEXT_SCALE(0.4, 0.4) DISPLAY_TEXT_WITH_NUMBER(0.7, 0.65, "NUMBER", g_iMenuCursorItem)
|
|
|
|
SET_TEXT_SCALE(0.4, 0.4) DISPLAY_TEXT_WITH_FLOAT(0.7, 0.70, "NUMBER", GET_CONTROL_NORMAL(FRONTEND_CONTROL, INPUT_CURSOR_X), 4)
|
|
SET_TEXT_SCALE(0.4, 0.4) DISPLAY_TEXT_WITH_FLOAT(0.7, 0.75, "NUMBER", GET_CONTROL_NORMAL(FRONTEND_CONTROL, INPUT_CURSOR_Y), 4)
|
|
|
|
DRAW_DEBUG_LINE(<<fMenuXMin, fMenuYMin, 0>>, <<fMenuXMax, fMenuYMin, 0>>)
|
|
DRAW_DEBUG_LINE(<<fMenuXMax, fMenuYMin, 0>>, <<fMenuXMax, fMenuYMax, 0>>)
|
|
DRAW_DEBUG_LINE(<<fMenuXMax, fMenuYMax, 0>>, <<fMenuXMin, fMenuYMax, 0>>)
|
|
DRAW_DEBUG_LINE(<<fMenuXMin, fMenuYMax, 0>>, <<fMenuXMax, fMenuYMin, 0>>)
|
|
|
|
ENDPROC
|
|
|
|
/// PURPOSE: Adds mouse detection to the shop menu system.
|
|
/// Used in combination with functions in menu_cursor.sch
|
|
/// This fuinct
|
|
///
|
|
/// There are three ways to override default behaviour:
|
|
/// bIsGunShopWeaponSelection
|
|
/// bDontHighlightFirstItem - This is used for one of the mp contact menus, that uses the first item as a descriptor, that should not be highlighted when hovered over.
|
|
/// bShiftMenuPosDownByOneBar - When the user of a menu requests the menu system to automatically add an exit option, the system increments the item count correctly, but does not update the Y pos of the bottom of the menu body by one item. This means the highlights are drawn/detected with an offset of one item. Using this overrides shifts them down by one item to compensate.
|
|
PROC HANDLE_CURSOR_HIGHLIGHTED_MENU_ITEMS(BOOL bIsGunShopWeaponSelection = FALSE, BOOL bDontHighlightFirstItem = FALSE, BOOL bShiftMenuPosDownByOneBar = FALSE, BOOL bDrawHighlight = TRUE)
|
|
|
|
CONST_INT HIGHLIGHT_ALPHA_MIN 32
|
|
CONST_INT HIGHLIGHT_ALPHA_MAX 180
|
|
|
|
FLOAT fMenuXMin
|
|
FLOAT fMenuYMin
|
|
FLOAT fMenuXMax
|
|
FLOAT fMenuYMax
|
|
FLOAT fMenuXMinUnAdjusted
|
|
FLOAT fMenuYMinUnadjusted
|
|
|
|
FLOAT fScrollBoxTriggerAreaHeight = CUSTOM_MENU_ITEM_BAR_H / 2
|
|
|
|
FLOAT fMouseX
|
|
FLOAT fMouseY
|
|
|
|
FLOAT fCursorYMenuCoord
|
|
|
|
INT iAlpha
|
|
INT iAlphaRange
|
|
INT iAlphaStep
|
|
|
|
INT iHighlightedItem = MENU_CURSOR_NO_ITEM
|
|
|
|
IF NOT IS_USING_KEYBOARD_AND_MOUSE(FRONTEND_CONTROL)
|
|
g_iMenuCursorItem = MENU_CURSOR_NO_ITEM
|
|
EXIT
|
|
ENDIF
|
|
|
|
SET_USE_ADJUSTED_MOUSE_COORDS(TRUE)
|
|
|
|
fMenuXMin = CUSTOM_MENU_X // Default for shops - may have to be changed for other menus.
|
|
fMenuXMax = fMenuXMin + CUSTOM_MENU_W
|
|
fMenuYMax = g_sMenuData.fSetupFinalBodyY
|
|
fMenuYMin = g_sMenuData.fSetupFinalBodyY - (g_sMenuData.iSetupTotalDisplayRows * CUSTOM_MENU_ITEM_BAR_H )
|
|
|
|
IF bShiftMenuPosDownByOneBar
|
|
fMenuYMax += CUSTOM_MENU_ITEM_BAR_H
|
|
fMenuYMin += CUSTOM_MENU_ITEM_BAR_H
|
|
ENDIF
|
|
|
|
// Work-around for the golf menu which sets g_sMenuData.iSetupTotalDisplayRows to -1 when there's only one item to display!
|
|
IF g_sMenuData.iSetupTotalDisplayRows < 1
|
|
fMenuYMin = g_sMenuData.fSetupFinalBodyY - CUSTOM_MENU_ITEM_BAR_H
|
|
ENDIF
|
|
|
|
// Set up safe-zone adjust
|
|
SET_SCRIPT_GFX_ALIGN(UI_ALIGN_LEFT, UI_ALIGN_TOP)
|
|
SET_SCRIPT_GFX_ALIGN_PARAMS(-0.05, -0.05, 0.0, 0.0)
|
|
|
|
// Store highlight coords un-adjusted, as the safe-zone will automatically move the highlight to the correct coords.
|
|
fMenuXMinUnadjusted = fMenuXMin
|
|
fMenuYMinUnadjusted = fMenuYMin
|
|
|
|
// Adjust menu coords for safe-zone, so the mouse detection works.
|
|
GET_SCRIPT_GFX_ALIGN_POSITION( fMenuXMin, fMenuYMin, fMenuXMin, fMenuYMin )
|
|
GET_SCRIPT_GFX_ALIGN_POSITION( fMenuXMax, fMenuYMax, fMenuXMax, fMenuYMax )
|
|
|
|
// Reset the safe-zone for safety as we have multiple exit points later.
|
|
RESET_SCRIPT_GFX_ALIGN()
|
|
|
|
//////////////////////////////////////////////
|
|
// DEBUG - DRAW DEBUG LINES OVER MENU
|
|
//
|
|
// INT i
|
|
// FLOAT fMenuItemY
|
|
//
|
|
// SET_TEXT_SCALE(0.2, 0.2)
|
|
//
|
|
// SET_DEBUG_LINES_AND_SPHERES_DRAWING_ACTIVE(TRUE)
|
|
//
|
|
// DRAW_DEBUG_LINE_2D(<<fMenuXMin, fMenuYMin,0.0>>,<<fMenuXMax, fMenuYMin,0.0>>)
|
|
// DRAW_DEBUG_LINE_2D(<<fMenuXMax, fMenuYMin,0.0>>,<<fMenuXMax, fMenuYMax,0.0>>)
|
|
// DRAW_DEBUG_LINE_2D(<<fMenuXMax, fMenuYMax,0.0>>,<<fMenuXMin, fMenuYMax,0.0>>)
|
|
// DRAW_DEBUG_LINE_2D(<<fMenuXMin, fMenuYMax,0.0>>,<<fMenuXMin, fMenuYMin,0.0>>)
|
|
//
|
|
// i = 0
|
|
// WHILE i < g_sMenuData.iSetupTotalDisplayRows
|
|
//
|
|
// fMenuItemY = fMenuYMin + (i * CUSTOM_MENU_ITEM_BAR_H)
|
|
// DRAW_DEBUG_LINE_2D(<<fMenuXMin, fMenuItemY,0.0>>,<<fMenuXMax, fMenuItemY,0.0>>)
|
|
//
|
|
// ++ i
|
|
//
|
|
// ENDWHILE
|
|
|
|
UPDATE_MENU_CURSOR_GLOBALS()
|
|
|
|
IF g_iMenuCursorItem = MENU_CURSOR_DRAG_CAM
|
|
EXIT
|
|
ENDIF
|
|
|
|
g_iMenuCursorItem = MENU_CURSOR_NO_ITEM
|
|
|
|
///////////////////////////////////////////
|
|
|
|
//GET_MOUSE_POSITION(fMouseX, fMouseY)
|
|
fMouseX = g_fMenuCursorX
|
|
fMouseY = g_fMenuCursorY
|
|
|
|
//PRINTLN("Mouse: ", fMouseX, " ", fMouseY)
|
|
|
|
// Check scrolling - if we've got more items in the menu than on-screen then display the scroll icons, and return a value
|
|
// to let the script know the scrolling icon has been highlighted.
|
|
IF g_sMenuData.iSetupTotalSelectableRows > g_sMenuData.iSetupTotalDisplayRows
|
|
|
|
// Scroll up
|
|
IF g_fMenuCursorX >= fMenuXMin
|
|
AND g_fMenuCursorX <= fMenuXMax
|
|
AND g_fMenuCursorY >= fMenuYMax
|
|
AND g_fMenuCursorY < fMenuYMax + fScrollBoxTriggerAreaHeight
|
|
g_iMenuCursorItem = MENU_CURSOR_SCROLL_UP
|
|
IF bDrawHighlight
|
|
DRAW_CURSOR_SCROLL_HIGHLIGHT()
|
|
ENDIF
|
|
EXIT
|
|
ENDIF
|
|
|
|
// Scroll down
|
|
IF g_fMenuCursorX >= fMenuXMin
|
|
AND g_fMenuCursorX <= fMenuXMax
|
|
AND g_fMenuCursorY >= fMenuYMax + fScrollBoxTriggerAreaHeight
|
|
AND g_fMenuCursorY < fMenuYMax + CUSTOM_MENU_ITEM_BAR_H
|
|
g_iMenuCursorItem = MENU_CURSOR_SCROLL_DOWN
|
|
IF bDrawHighlight
|
|
DRAW_CURSOR_SCROLL_HIGHLIGHT()
|
|
ENDIF
|
|
EXIT
|
|
ENDIF
|
|
|
|
ENDIF
|
|
|
|
// Check if mouse is in the bounding box for the menu
|
|
IF fMouseX >= fMenuXMin
|
|
AND fMouseX <= fMenuXMax
|
|
AND fMouseY >= fMenuYMin
|
|
AND fMouseY <= fMenuYMax
|
|
|
|
// Adjust relative Y coord so it's inside the menu detection box.
|
|
fCursorYMenuCoord = fMouseY - fMenuYMin
|
|
iHighlightedItem = FLOOR(fCursorYMenuCoord / CUSTOM_MENU_ITEM_BAR_H )
|
|
|
|
//DISPLAY_TEXT_WITH_NUMBER( 0.5, 0.2, "NUMBER", iHighlightedItem )
|
|
//DISPLAY_TEXT_WITH_FLOAT( 0.5, 0.3, "NUMBER", fMouseYMenuCoord / CUSTOM_MENU_ITEM_BAR_H, 2)
|
|
|
|
// Work-around for Golf which sets the number of menu items to -1 when only one option is available.
|
|
IF g_sMenuData.iSetupTotalSelectableRows = -1
|
|
g_iMenuCursorItem = 0
|
|
iHighlightedItem = 0
|
|
EXIT
|
|
ENDIF
|
|
|
|
// Adjust alpha value of menu highlight to take account of the new background gradient.
|
|
iAlphaRange = HIGHLIGHT_ALPHA_MAX - HIGHLIGHT_ALPHA_MIN
|
|
iAlphaStep = iAlphaRange / g_sMenuData.iSetupTotalDisplayRows
|
|
|
|
iAlpha = HIGHLIGHT_ALPHA_MIN + (iAlphaRange - (iAlphaStep * iHighlightedItem))
|
|
|
|
// Draw highlight with safe-zone adjust
|
|
IF bDrawHighlight
|
|
IF NOT bDontHighlightFirstItem
|
|
OR iHighlightedItem != 0
|
|
|
|
SET_SCRIPT_GFX_ALIGN(UI_ALIGN_LEFT, UI_ALIGN_TOP)
|
|
SET_SCRIPT_GFX_ALIGN_PARAMS(-0.05, -0.05, 0.0, 0.0)
|
|
DRAW_RECT_FROM_CORNER(fMenuXMinUnadjusted, fMenuyMinUnadjusted + (iHighlightedItem * CUSTOM_MENU_ITEM_BAR_H ),CUSTOM_MENU_W, CUSTOM_MENU_ITEM_BAR_H - 0.0015, 255, 255, 255, iAlpha )
|
|
RESET_SCRIPT_GFX_ALIGN()
|
|
|
|
ENDIF
|
|
ENDIF
|
|
|
|
// SET_TEXT_SCALE(0.8, 0.8)
|
|
// DISPLAY_TEXT_WITH_NUMBER( 0.5, 0.1, "NUMBER", g_sMenuData.iTopItem )
|
|
// DISPLAY_TEXT_WITH_NUMBER( 0.5, 0.2, "NUMBER", g_sMenuData.iLastDisplayItem )
|
|
// DISPLAY_TEXT_WITH_NUMBER( 0.5, 0.3, "NUMBER", g_sMenuData.iSetupTotalDisplayRows )
|
|
// DISPLAY_TEXT_WITH_NUMBER( 0.5, 0.4, "NUMBER", g_sMenuData.iSetupTotalSelectableRows )
|
|
// DISPLAY_TEXT_WITH_NUMBER( 0.5, 0.5, "NUMBER", iHighlightedItem )
|
|
// DISPLAY_TEXT_WITH_NUMBER( 0.5, 0.6, "NUMBER", g_sMenuData.iSetupTotalRows )
|
|
// DISPLAY_TEXT_WITH_NUMBER( 0.6, 0.1, "NUMBER", g_sMenuData.iDisplayRow[iHighlightedItem])
|
|
// DISPLAY_TEXT_WITH_NUMBER( 0.5, 0.1, "NUMBER", iAlphaRange )
|
|
// DISPLAY_TEXT_WITH_NUMBER( 0.5, 0.2, "NUMBER", iAlphaStep )
|
|
// DISPLAY_TEXT_WITH_NUMBER( 0.5, 0.3, "NUMBER", iAlpha )
|
|
|
|
|
|
g_iMenuCursorItem = g_sMenuData.iDisplayRow[iHighlightedItem]
|
|
|
|
EXIT
|
|
|
|
ENDIF
|
|
|
|
// All shops except the gun shop prevent selection to the left of the menu.
|
|
IF NOT bIsGunShopWeaponSelection
|
|
// Cursor is on the menu side of the screen - needed for
|
|
IF fMouseX < fMenuXMax
|
|
g_iMenuCursorItem = MENU_CURSOR_NO_CAMERA_MOVE
|
|
EXIT
|
|
ENDIF
|
|
|
|
// Disable mouse camera move over instructional buttons.
|
|
// This is a temp fix.
|
|
IF fMouseY > 0.9
|
|
g_iMenuCursorItem = MENU_CURSOR_INSTRUCTIONAL_BUTTONS
|
|
EXIT
|
|
ENDIF
|
|
|
|
|
|
ELSE
|
|
|
|
// Gun shop should allow selection below the menu, but not above.
|
|
IF (fMouseX < fMenuXMax AND fMouseY < fMenuYMax + 0.25)
|
|
g_iMenuCursorItem = MENU_CURSOR_NO_CAMERA_MOVE
|
|
EXIT
|
|
ENDIF
|
|
|
|
ENDIF
|
|
|
|
g_iMenuCursorItem = MENU_CURSOR_NO_ITEM
|
|
|
|
ENDPROC
|
|
|
|
/// PURPOSE:
|
|
/// Handles shop style menu items with increment and decrement icons, such as the Darts and Tennis menus.
|
|
/// PARAMS:
|
|
/// fDecStart - Decrement arrow hit-box X start position
|
|
/// fDecSize - Decrement arrow hit-box X width
|
|
/// iMenuSelection - The menu item whose value is being changed
|
|
/// RETURNS:
|
|
/// 0 if no change, -1 for decrement, or +1 for increment.
|
|
FUNC INT GET_CURSOR_MENU_ITEM_VALUE_CHANGE( FLOAT fLeftSideClickConfirmValue = 0.0 )
|
|
|
|
FLOAT fMenuXMin
|
|
FLOAT fMenuYMin
|
|
FLOAT fMenuXMax
|
|
FLOAT fTemp
|
|
|
|
FLOAT fIncStart
|
|
FLOAT fAcceptEnd
|
|
|
|
FLOAT fIncSize = 0.020
|
|
|
|
fMenuXMin = 0.05 // Default for shops - may have to be changed for other menus.
|
|
fMenuXMax = fMenuXMin + CUSTOM_MENU_W
|
|
//fMenuYMax = g_sMenuData.fSetupFinalBodyY
|
|
fMenuYMin = g_sMenuData.fSetupFinalBodyY - (g_sMenuData.iSetupTotalDisplayRows * CUSTOM_MENU_ITEM_BAR_H )
|
|
|
|
fAcceptEnd = fMenuXMin + fLeftSideClickConfirmValue
|
|
|
|
// Setup safe-zone
|
|
SET_SCRIPT_GFX_ALIGN(UI_ALIGN_LEFT, UI_ALIGN_TOP)
|
|
SET_SCRIPT_GFX_ALIGN_PARAMS(-0.05, -0.05, 0.0, 0.0)
|
|
|
|
// Adjust menu coords for safe-zone, so the mouse detection works.
|
|
GET_SCRIPT_GFX_ALIGN_POSITION( fMenuXMin, fMenuYMin, fMenuXMin, fMenuYMin )
|
|
GET_SCRIPT_GFX_ALIGN_POSITION( fMenuXMax, fTemp, fMenuXMax, fTemp )
|
|
|
|
// Reset the safe-zone for safety as we have multiple exit points later.
|
|
RESET_SCRIPT_GFX_ALIGN()
|
|
|
|
//DISPLAY_TEXT_WITH_NUMBER( 0.5, 0.2, "NUMBER", iHighlightedItem )
|
|
//DISPLAY_TEXT_WITH_FLOAT( 0.5, 0.3, "NUMBER", fMouseYMenuCoord / CUSTOM_MENU_ITEM_BAR_H, 2)
|
|
|
|
fIncStart = fMenuXMax - fIncSize
|
|
|
|
// Debug rect to see if we've got the right click area.
|
|
//DRAW_RECT_FROM_CORNER(fMenuXMin, fMenuYMin, fAcceptEnd, g_sMenuData.iSetupTotalDisplayRows * CUSTOM_MENU_ITEM_BAR_H, 0, 255,0,255)
|
|
//DRAW_RECT_FROM_CORNER(fIncStart, fMenuYMin, fIncSize, g_sMenuData.iSetupTotalDisplayRows * CUSTOM_MENU_ITEM_BAR_H, 0, 255,0,255)
|
|
|
|
|
|
// On Some menus clicking the left side accepts.
|
|
IF fLeftSideClickConfirmValue > 0.0
|
|
IF g_fMenuCursorX >= fMenuXMin AND g_fMenuCursorX < fAcceptEnd
|
|
RETURN -999
|
|
ENDIF
|
|
ENDIF
|
|
|
|
// Decrement
|
|
IF g_fMenuCursorX >= fMenuXMin AND g_fMenuCursorX < fIncStart
|
|
RETURN -1 // -1
|
|
ENDIF
|
|
|
|
// Increment
|
|
IF g_fMenuCursorX >= fIncStart AND g_fMenuCursorX <= fMenuXMax
|
|
RETURN 1 // +1
|
|
ENDIF
|
|
|
|
RETURN 0 // No change
|
|
|
|
ENDFUNC
|
|
|
|
|
|
|
|
FUNC BOOL GET_MENU_ID_FOR_THIS_SCRIPT(INT &iMenuID, BOOl bAssignNewID, INT iMenuType)
|
|
|
|
IF iMenuType = -1
|
|
IF NETWORK_IS_GAME_IN_PROGRESS()
|
|
AND NETWORK_GET_THIS_SCRIPT_IS_NETWORK_SCRIPT()
|
|
iMenuType = NETWORK_GET_INSTANCE_ID_OF_THIS_SCRIPT()
|
|
ENDIF
|
|
ENDIF
|
|
|
|
TEXT_LABEL_63 tlScriptName = GET_THIS_SCRIPT_NAME()
|
|
tlScriptName += iMenuType
|
|
|
|
INT iUniqueHash = GET_HASH_KEY(tlScriptName)
|
|
|
|
INT iID
|
|
INT iFreeSlot = -1
|
|
REPEAT MAX_MENU_IDS iID
|
|
IF g_sMenuData.iScriptHash[iID] = iUniqueHash
|
|
// Already assigned
|
|
iMenuID = iID
|
|
RETURN TRUE
|
|
ELIF g_sMenuData.iScriptHash[iID] = 0
|
|
iFreeSlot = iID
|
|
ENDIF
|
|
ENDREPEAT
|
|
|
|
IF bAssignNewID
|
|
IF iFreeSlot != -1
|
|
PRINTLN("GET_MENU_ID_FOR_THIS_SCRIPT - Assigning slot ", iFreeSlot, " to ", GET_THIS_SCRIPT_NAME())
|
|
|
|
// Not assigned so use free slot
|
|
g_sMenuData.iScriptHash[iFreeSlot] = iUniqueHash
|
|
|
|
iMenuID = iFreeSlot
|
|
RETURN TRUE
|
|
ENDIF
|
|
ENDIF
|
|
|
|
RETURN FALSE
|
|
ENDFUNC
|
|
|
|
|
|
/// PURPOSE: Loads the texture dictionary required for the menu
|
|
FUNC BOOL LOAD_MENU_ASSETS(STRING sTextBlockName = NULL, INT iMenuType = -1, BOOL bStreamDiscountTextures = FALSE)
|
|
|
|
INT iMenuID
|
|
IF NOT GET_MENU_ID_FOR_THIS_SCRIPT(iMenuID, TRUE, iMenuType)
|
|
#IF IS_DEBUG_BUILD
|
|
PRINTLN("LOAD_MENU_ASSETS - Unable to assign id for this menu. Tell Kenneth R.")
|
|
CASSERTLN(DEBUG_SYSTEM, "LOAD_MENU_ASSETS - Unable to assign id for this menu. Tell Kenneth R.")
|
|
#ENDIF
|
|
RETURN FALSE
|
|
ENDIF
|
|
|
|
BOOL bMenuLoaded = TRUE
|
|
|
|
g_sMenuData.tlTextBlockName[iMenuID] = sTextBlockName
|
|
IF NOT IS_STRING_NULL_OR_EMPTY(g_sMenuData.tlTextBlockName[iMenuID])
|
|
REQUEST_ADDITIONAL_TEXT(g_sMenuData.tlTextBlockName[iMenuID], MENU_TEXT_SLOT)
|
|
g_sMenuData.bMenuTextRequested[iMenuID] = TRUE
|
|
IF NOT HAS_THIS_ADDITIONAL_TEXT_LOADED(g_sMenuData.tlTextBlockName[iMenuID], MENU_TEXT_SLOT)
|
|
bMenuLoaded = FALSE
|
|
ENDIF
|
|
ENDIF
|
|
|
|
REQUEST_STREAMED_TEXTURE_DICT("CommonMenu")
|
|
g_sMenuData.bMenuAssetsRequested[iMenuID] = TRUE
|
|
IF NOT HAS_STREAMED_TEXTURE_DICT_LOADED("CommonMenu")
|
|
bMenuLoaded = FALSE
|
|
ENDIF
|
|
IF bStreamDiscountTextures
|
|
REQUEST_STREAMED_TEXTURE_DICT("MPShopSale")
|
|
g_sMenuData.bShopDiscountAssetsRequested[iMenuID] = TRUE
|
|
IF NOT HAS_STREAMED_TEXTURE_DICT_LOADED("MPShopSale")
|
|
bMenuLoaded = FALSE
|
|
ENDIF
|
|
ENDIF
|
|
|
|
BOOL bHelpLoaded = FALSE
|
|
g_sMenuData.sMenuHelp[iMenuID].filename = "instructional_buttons"
|
|
bHelpLoaded = SETUP_SCALEFORM_MOVIE(g_sMenuData.sMenuHelp[iMenuID])
|
|
|
|
IF NOT bMenuLoaded
|
|
OR NOT bHelpLoaded
|
|
PRINTLN("LOAD_MENU_ASSETS - LOADING FOR - ", GET_THIS_SCRIPT_NAME(), ", menu_type=", iMenuType)
|
|
ENDIF
|
|
|
|
RETURN (bMenuLoaded AND bHelpLoaded)
|
|
ENDFUNC
|
|
|
|
/// PURPOSE: Cleans up the texture dictionary required for the menu
|
|
PROC CLEANUP_MENU_ASSETS(BOOL bCleanupScaleformMovie = TRUE, INT iMenuType = -1)
|
|
|
|
INT iMenuID
|
|
IF NOT GET_MENU_ID_FOR_THIS_SCRIPT(iMenuID, FALSE, iMenuType)
|
|
EXIT
|
|
ENDIF
|
|
|
|
IF g_sMenuData.bSubtitlesMoved
|
|
RESET_HUD_COMPONENT_VALUES(NEW_HUD_SUBTITLE_TEXT)
|
|
g_sMenuData.bSubtitlesMoved = FALSE
|
|
ENDIF
|
|
|
|
THEFEED_SET_SCRIPTED_MENU_HEIGHT(0.0)
|
|
|
|
DEBUG_PRINTCALLSTACK()
|
|
IF g_sMenuData.bMenuTextRequested[iMenuID]
|
|
PRINTLN("CLEANUP_MENU_ASSETS - CLEANING UP TEXT FOR - ", GET_THIS_SCRIPT_NAME(), ", menu_type=", iMenuType)
|
|
CLEAR_ADDITIONAL_TEXT(MENU_TEXT_SLOT, FALSE)
|
|
g_sMenuData.bMenuTextRequested[iMenuID] = FALSE
|
|
ENDIF
|
|
|
|
IF g_sMenuData.bMenuAssetsRequested[iMenuID]
|
|
PRINTLN("CLEANUP_MENU_ASSETS - CLEANING UP TXD CommonMenu FOR - ", GET_THIS_SCRIPT_NAME(), ", menu_type=", iMenuType)
|
|
SET_STREAMED_TEXTURE_DICT_AS_NO_LONGER_NEEDED("CommonMenu")
|
|
g_sMenuData.bMenuAssetsRequested[iMenuID] = FALSE
|
|
ENDIF
|
|
IF g_sMenuData.bShopDiscountAssetsRequested[iMenuID]
|
|
PRINTLN("CLEANUP_MENU_ASSETS - CLEANING UP TXD MPShopSale FOR - ", GET_THIS_SCRIPT_NAME(), ", menu_type=", iMenuType)
|
|
SET_STREAMED_TEXTURE_DICT_AS_NO_LONGER_NEEDED("MPShopSale")
|
|
g_sMenuData.bShopDiscountAssetsRequested[iMenuID] = FALSE
|
|
ENDIF
|
|
|
|
IF bCleanupScaleformMovie
|
|
PRINTLN("CLEANUP_MENU_ASSETS - CLEANING UP SCALEFORM FOR - ", GET_THIS_SCRIPT_NAME(), ", menu_type=", iMenuType)
|
|
CLEANUP_SCALEFORM_MOVIE(g_sMenuData.sMenuHelp[iMenuID])
|
|
g_sMenuData.iScriptHash[iMenuID] = 0
|
|
ELSE
|
|
PRINTLN("CLEANUP_MENU_ASSETS - NOT CLEARING SCALEFORM FOR - ", GET_THIS_SCRIPT_NAME(), ", menu_type=", iMenuType)
|
|
g_sMenuData.iScriptHash[iMenuID] = 0
|
|
ENDIF
|
|
ENDPROC
|
|
|
|
/// PURPOSE: Removes all help keys
|
|
PROC REMOVE_MENU_HELP_KEYS( INT iMenuType = -1 )
|
|
g_sMenuData.iHelpCount = 0
|
|
g_sMenuData.bHelpCreated = FALSE
|
|
|
|
INT i
|
|
REPEAT MAX_STORED_HELP_KEYS i
|
|
g_sMenuData.tl15HelpText[i] = ""
|
|
g_sMenuData.iHelpTextINT[i] = -1
|
|
g_sMenuData.caHelpTextInput[i] = MAX_INPUTS
|
|
g_sMenuData.caHelpTextInputGroup[i] = MAX_INPUTGROUPS
|
|
ENDREPEAT
|
|
|
|
g_sMenuData.iHelpKeyIsClickableBits = 0
|
|
|
|
#IF USE_TU_CHANGES
|
|
// HELP KEY OVERFLOW
|
|
g_sMenuData_TU.tl15HelpText = ""
|
|
g_sMenuData_TU.iHelpTextINT = -1
|
|
#ENDIF
|
|
|
|
INT iMenuID
|
|
|
|
IF IS_PC_VERSION()
|
|
|
|
IF NOT GET_MENU_ID_FOR_THIS_SCRIPT(iMenuID, FALSE, iMenuType)
|
|
EXIT
|
|
ENDIF
|
|
|
|
// PRINTLN("REMOVE_MENU_HELP_KEYS - Turning OFF mouse clickable buttons")
|
|
|
|
IF HAS_SCALEFORM_MOVIE_LOADED(g_sMenuData.sMenuHelp[iMenuID].movieID)
|
|
BEGIN_SCALEFORM_MOVIE_METHOD(g_sMenuData.sMenuHelp[iMenuID].movieID, "TOGGLE_MOUSE_BUTTONS")
|
|
SCALEFORM_MOVIE_METHOD_ADD_PARAM_BOOL(FALSE)
|
|
END_SCALEFORM_MOVIE_METHOD()
|
|
ENDIF
|
|
ENDIF
|
|
|
|
ENDPROC
|
|
|
|
/// PURPOSE: Returns TRUE if the menu had been set to draw this frame.
|
|
FUNC BOOL IS_CUSTOM_MENU_ON_SCREEN()
|
|
RETURN (GET_GAME_TIMER() <= (g_sMenuData.iLastDrawTimer+100))
|
|
ENDFUNC
|
|
|
|
/// PURPOSE: Returns the final Y coord that the menu was last drawn to
|
|
FUNC FLOAT GET_CUSTOM_MENU_FINAL_Y_COORD()
|
|
RETURN (g_sMenuData.fMenuFinalScreenY)
|
|
ENDFUNC
|
|
|
|
/// PURPOSE: Returns the Y coord that the current selected item is positioned at
|
|
FUNC FLOAT GET_CUSTOM_MENU_CURRENT_ITEM_Y_COORD()
|
|
RETURN (g_sMenuData.fCurrentItemScreenY)
|
|
ENDFUNC
|
|
|
|
/// PURPOSE: Returns the Y coord that the specified item is positioned at
|
|
FUNC FLOAT GET_CUSTOM_MENU_ITEM_Y_COORD(INT paramMenuItem)
|
|
RETURN (g_sMenuData.fMenuItemScreenY[paramMenuItem])
|
|
ENDFUNC
|
|
|
|
/// PURPOSE: Blocks the menu from drawing
|
|
PROC DISABLE_CUSTOM_MENU()
|
|
#IF IS_DEBUG_BUILD
|
|
PRINTSTRING("\n DISABLE_CUSTOM_MENU() called by '")PRINTSTRING(GET_THIS_SCRIPT_NAME())PRINTSTRING("'")PRINTNL()
|
|
#ENDIF
|
|
g_sMenuData.bDisableMenu = TRUE
|
|
ENDPROC
|
|
PROC ENABLE_CUSTOM_MENU()
|
|
#IF IS_DEBUG_BUILD
|
|
PRINTSTRING("\n ENABLE_CUSTOM_MENU() called by '")PRINTSTRING(GET_THIS_SCRIPT_NAME())PRINTSTRING("'")PRINTNL()
|
|
#ENDIF
|
|
g_sMenuData.bDisableMenu = FALSE
|
|
ENDPROC
|
|
|
|
|
|
FUNC BOOL IS_CUSTOM_MENU_SAFE_TO_DRAW(BOOL bAllowDuringPlayerSwitch = FALSE, BOOL bAllowDuringPause = FALSE)
|
|
|
|
#IF IS_DEBUG_BUILD
|
|
BOOL bOutputDebug
|
|
IF IS_CONTROL_JUST_PRESSED(FRONTEND_CONTROL,INPUT_CONTEXT)
|
|
OR IS_DISABLED_CONTROL_JUST_PRESSED(FRONTEND_CONTROL,INPUT_CONTEXT)
|
|
OR IS_CONTROL_JUST_PRESSED(FRONTEND_CONTROL, INPUT_FRONTEND_UP)
|
|
OR IS_DISABLED_CONTROL_JUST_PRESSED(FRONTEND_CONTROL, INPUT_FRONTEND_UP)
|
|
OR IS_CONTROL_JUST_PRESSED(FRONTEND_CONTROL, INPUT_FRONTEND_DOWN)
|
|
OR IS_DISABLED_CONTROL_JUST_PRESSED(FRONTEND_CONTROL, INPUT_FRONTEND_DOWN)
|
|
bOutputDebug = TRUE
|
|
ENDIF
|
|
#ENDIF
|
|
|
|
// Exception for multiplayer if player is on killstrip
|
|
IF MPGlobals.g_KillStrip.iState != STATE_KILL_STRIP_NULL
|
|
|
|
#IF IS_DEBUG_BUILD
|
|
IF bOutputDebug
|
|
PRINTLN("IS_CUSTOM_MENU_SAFE_TO_DRAW - FALSE : kill strip running")
|
|
ENDIF
|
|
#ENDIF
|
|
|
|
RETURN TRUE
|
|
ENDIF
|
|
|
|
IF NOT IS_SCREEN_FADED_IN()
|
|
OR (IS_SCRIPT_HUD_DISPLAYING(HUDPART_TRANSITIONHUD) AND GET_CURRENT_TRANSITION_STATE() != TRANSITION_STATE_WAITING_FOR_EXTERNAL_TERMINATION_CALL)
|
|
OR (GET_PAUSE_MENU_STATE() != PM_INACTIVE AND NOT bAllowDuringPause)
|
|
OR (IS_PLAYER_SWITCH_IN_PROGRESS() AND NOT bAllowDuringPlayerSwitch) //MP Player Switch is happening.
|
|
OR (IS_COMMERCE_STORE_OPEN())
|
|
OR (g_bResultScreenDisplaying)
|
|
OR (g_sMenuData.bDisableMenu)
|
|
OR (IS_WARNING_MESSAGE_ACTIVE())
|
|
OR (g_sShopSettings.bProcessStoreAlert)
|
|
|
|
#IF IS_DEBUG_BUILD
|
|
IF bOutputDebug
|
|
IF NOT IS_SCREEN_FADED_IN()
|
|
PRINTLN("IS_CUSTOM_MENU_SAFE_TO_DRAW - FALSE : screen not faded in")
|
|
ELIF (IS_SCRIPT_HUD_DISPLAYING(HUDPART_TRANSITIONHUD) AND GET_CURRENT_TRANSITION_STATE() != TRANSITION_STATE_WAITING_FOR_EXTERNAL_TERMINATION_CALL)
|
|
PRINTLN("IS_CUSTOM_MENU_SAFE_TO_DRAW - FALSE : transition")
|
|
ELIF (GET_PAUSE_MENU_STATE() != PM_INACTIVE AND NOT bAllowDuringPause)
|
|
PRINTLN("IS_CUSTOM_MENU_SAFE_TO_DRAW - FALSE : pause menu active")
|
|
ELIF (IS_PLAYER_SWITCH_IN_PROGRESS() AND NOT bAllowDuringPlayerSwitch) //Player Switch is happening.
|
|
PRINTLN("IS_CUSTOM_MENU_SAFE_TO_DRAW - FALSE : Player Switch is active")
|
|
ELIF (IS_COMMERCE_STORE_OPEN())
|
|
PRINTLN("IS_CUSTOM_MENU_SAFE_TO_DRAW - FALSE : commerce store open")
|
|
ELIF (g_bResultScreenDisplaying)
|
|
PRINTLN("IS_CUSTOM_MENU_SAFE_TO_DRAW - FALSE : result screen displaying")
|
|
ELIF (g_sMenuData.bDisableMenu)
|
|
PRINTLN("IS_CUSTOM_MENU_SAFE_TO_DRAW - FALSE : disabled")
|
|
ELIF (IS_WARNING_MESSAGE_ACTIVE())
|
|
PRINTLN("IS_CUSTOM_MENU_SAFE_TO_DRAW - FALSE : warning message active")
|
|
ELSE
|
|
PRINTLN("IS_CUSTOM_MENU_SAFE_TO_DRAW - FALSE : some other reason")
|
|
ENDIF
|
|
ENDIF
|
|
#ENDIF
|
|
|
|
RETURN FALSE
|
|
ENDIF
|
|
RETURN TRUE
|
|
ENDFUNC
|
|
|
|
PROC DRAW_MENU_HELP_SCALEFORM(INT iScreenX, INT iMenuType = -1, INT iTimer = 0, BOOL bCheckIfSafeToDraw = TRUE, BOOL bAllowDuringPlayerSwitch = FALSE, BOOL bUseSubStringTime = FALSE, BOOL bPushSubtitlesUp = TRUE, BOOL bDrawForSCTV = TRUE, BOOL bAllowDuringPause = FALSE)//, BOOL bSetWidth = FALSE)
|
|
|
|
INT iMenuID
|
|
IF NOT GET_MENU_ID_FOR_THIS_SCRIPT(iMenuID, FALSE, iMenuType)
|
|
#IF IS_DEBUG_BUILD
|
|
PRINTLN("DRAW_MENU_HELP_SCALEFORM - LOAD_MENU_ASSETS not returned TRUE. Tell Kenneth R.")
|
|
CASSERTLN(DEBUG_SYSTEM, "DRAW_MENU_HELP_SCALEFORM - LOAD_MENU_ASSETS not returned TRUE. Tell Kenneth R.")
|
|
#ENDIF
|
|
EXIT
|
|
ENDIF
|
|
iScreenX = iScreenX
|
|
IF bCheckIfSafeToDraw
|
|
AND NOT IS_CUSTOM_MENU_SAFE_TO_DRAW(bAllowDuringPlayerSwitch, bAllowDuringPause)
|
|
EXIT
|
|
ENDIF
|
|
|
|
// Fix for bug 1592833 - Hide buttons when cellphone is rendering
|
|
IF IS_PHONE_ACTIVE_OR_OVERLAPPING_HUD_ITEMS()
|
|
EXIT
|
|
ENDIF
|
|
|
|
// Disable instructional buttons if text chat is active. B* 2302619
|
|
IF NETWORK_TEXT_CHAT_IS_TYPING()
|
|
EXIT
|
|
ENDIF
|
|
|
|
|
|
IF bDrawForSCTV = FALSE
|
|
IF IS_PLAYER_SCTV(PLAYER_ID())
|
|
EXIT
|
|
ENDIF
|
|
ENDIF
|
|
|
|
// Don't render instructional buttons if keyboard is on-screen. B* 2212715
|
|
IF IS_PC_VERSION()
|
|
IF UPDATE_ONSCREEN_KEYBOARD() = OSK_PENDING
|
|
OR NETWORK_TEXT_CHAT_IS_TYPING()
|
|
EXIT
|
|
ENDIF
|
|
ENDIF
|
|
//
|
|
// // 2079715
|
|
// IF bSetWidth
|
|
// IF NOT GET_IS_WIDESCREEN()
|
|
// BEGIN_SCALEFORM_MOVIE_METHOD(g_sMenuData.sMenuHelp[iMenuID].movieID, "SET_MAX_WIDTH")
|
|
// SCALEFORM_MOVIE_METHOD_ADD_PARAM_FLOAT(0.6)
|
|
// PRINTLN("[2079715] SCALEFORM_MOVIE_METHOD_ADD_PARAM_FLOAT(0.6) ")
|
|
// END_SCALEFORM_MOVIE_METHOD()
|
|
// ENDIF
|
|
// ENDIF
|
|
|
|
|
|
INT i, j
|
|
IF g_sMenuData.iHelpCount != 0
|
|
|
|
// If control method has changed, refresh the button sprites
|
|
IF HAVE_CONTROLS_CHANGED(FRONTEND_CONTROL)
|
|
REPEAT g_sMenuData.iHelpCount i
|
|
IF g_sMenuData.caHelpTextInput[i] != MAX_INPUTS
|
|
g_sMenuData.eHelpKey[i] = GET_CONTROL_INSTRUCTIONAL_BUTTONS_STRING(FRONTEND_CONTROL, g_sMenuData.caHelpTextInput[i])
|
|
|
|
ELIF g_sMenuData.caHelpTextInputGroup[i] != MAX_INPUTGROUPS
|
|
g_sMenuData.eHelpKey[i] = GET_CONTROL_GROUP_INSTRUCTIONAL_BUTTONS_STRING(FRONTEND_CONTROL, g_sMenuData.caHelpTextInputGroup[i])
|
|
ENDIF
|
|
ENDREPEAT
|
|
g_sMenuData.bHelpCreated = FALSE
|
|
ENDIF
|
|
|
|
IF NOT g_sMenuData.bHelpCreated
|
|
//PRINTLN("setting up menu help")
|
|
BEGIN_SCALEFORM_MOVIE_METHOD(g_sMenuData.sMenuHelp[iMenuID].movieID, "CLEAR_ALL")
|
|
END_SCALEFORM_MOVIE_METHOD()
|
|
|
|
BEGIN_SCALEFORM_MOVIE_METHOD(g_sMenuData.sMenuHelp[iMenuID].movieID, "SET_MAX_WIDTH")
|
|
SCALEFORM_MOVIE_METHOD_ADD_PARAM_FLOAT(1.0 - (g_sMenuData.fHelpKeyClearSpace / 100))
|
|
END_SCALEFORM_MOVIE_METHOD()
|
|
|
|
// Clickable buttons for PC keyboard and mouse
|
|
IF IS_PC_VERSION()
|
|
// PRINTLN("DRAW_MENU_HELP_SCALEFORM - Turning ON mouse clickable buttons")
|
|
BEGIN_SCALEFORM_MOVIE_METHOD(g_sMenuData.sMenuHelp[iMenuID].movieID, "TOGGLE_MOUSE_BUTTONS")
|
|
SCALEFORM_MOVIE_METHOD_ADD_PARAM_BOOL(TRUE)
|
|
END_SCALEFORM_MOVIE_METHOD()
|
|
ENDIF
|
|
|
|
/*BEGIN_SCALEFORM_MOVIE_METHOD(g_sMenuData.sMenuHelp[iMenuID].movieID, "SET_CLEAR_SPACE")
|
|
SCALEFORM_MOVIE_METHOD_ADD_PARAM_FLOAT((iScreenX/100) * g_sMenuData.fHelpKeyClearSpace)
|
|
END_SCALEFORM_MOVIE_METHOD()*/
|
|
|
|
REPEAT g_sMenuData.iHelpCount i
|
|
|
|
IF GET_HASH_KEY(g_sMenuData.tl15HelpText[i]) != GET_HASH_KEY("PREV")
|
|
|
|
// PRINTLN("SHOP MENU: PROCESSING INSTRUCTIONAL BUTTON ", i)
|
|
|
|
BEGIN_SCALEFORM_MOVIE_METHOD(g_sMenuData.sMenuHelp[iMenuID].movieID, "SET_DATA_SLOT")
|
|
SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(i)
|
|
SCALEFORM_MOVIE_METHOD_ADD_PARAM_INSTRUCTIONAL_BUTTONS(g_sMenuData.eHelpKey[i])
|
|
|
|
j = i+1
|
|
WHILE j < MAX_STORED_HELP_KEYS AND GET_HASH_KEY(g_sMenuData.tl15HelpText[j]) = GET_HASH_KEY("PREV")
|
|
SCALEFORM_MOVIE_METHOD_ADD_PARAM_INSTRUCTIONAL_BUTTONS(g_sMenuData.eHelpKey[j])
|
|
j++
|
|
ENDWHILE
|
|
|
|
//If there is no sub string to add
|
|
IF g_sMenuData.iHelpTextINT[i] = -1
|
|
SCALEFORM_MOVIE_METHOD_ADD_PARAM_STRING(g_sMenuData.tl15HelpText[i])
|
|
ELSE
|
|
|
|
INT iParam = g_sMenuData.iHelpTextINT[i]
|
|
IF iTimer >= 0
|
|
iParam = iTimer
|
|
ENDIF
|
|
|
|
//There is a sub string to add!
|
|
PRINTLN("IF g_sMenuData.iHelpTextINT[", i, "] = ", g_sMenuData.iHelpTextINT[i])
|
|
BEGIN_TEXT_COMMAND_SCALEFORM_STRING(g_sMenuData.tl15HelpText[i])
|
|
IF bUseSubStringTime
|
|
ADD_TEXT_COMPONENT_SUBSTRING_TIME(iParam, TIME_FORMAT_MINUTES|TIME_FORMAT_SECONDS|TEXT_FORMAT_HIDE_LEADING_ZEROS_ON_LEADING_UNITS)
|
|
ELSE
|
|
ADD_TEXT_COMPONENT_INTEGER(iParam)
|
|
ENDIF
|
|
END_TEXT_COMMAND_SCALEFORM_STRING()
|
|
ENDIF
|
|
|
|
// Mouse Clickable buttons
|
|
IF IS_PC_VERSION()
|
|
// Store valid input
|
|
IF g_sMenuData.caHelpTextInput[i] != MAX_INPUTS
|
|
AND IS_BIT_SET(g_sMenuData.iHelpKeyIsClickableBits, i)
|
|
//PRINTLN("SHOP MENU: ADDING MOUSE CLICK TO BUTTON ", i)
|
|
SCALEFORM_MOVIE_METHOD_ADD_PARAM_BOOL(TRUE) // CLICKABLE
|
|
SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(ENUM_TO_INT(g_sMenuData.caHelpTextInput[i]))
|
|
ELSE
|
|
// Not clickable, default value
|
|
//PRINTLN("SHOP MENU: NOT CLICKABLE BUTTON ", i)
|
|
SCALEFORM_MOVIE_METHOD_ADD_PARAM_BOOL(FALSE) // NOT CLICKABLE
|
|
SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(ENUM_TO_INT(MAX_INPUTS))
|
|
ENDIF
|
|
|
|
ENDIF
|
|
|
|
END_SCALEFORM_MOVIE_METHOD()
|
|
//PRINTLN("... adding label ", g_sMenuData.tl15HelpText[i])
|
|
ENDIF
|
|
ENDREPEAT
|
|
|
|
#IF USE_TU_CHANGES
|
|
// HELP KEY OVERFLOW
|
|
IF GET_HASH_KEY(g_sMenuData_TU.tl15HelpText) != GET_HASH_KEY("")
|
|
BEGIN_SCALEFORM_MOVIE_METHOD(g_sMenuData.sMenuHelp[iMenuID].movieID, "SET_DATA_SLOT")
|
|
SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(g_sMenuData.iHelpCount)
|
|
SCALEFORM_MOVIE_METHOD_ADD_PARAM_INSTRUCTIONAL_BUTTONS(g_sMenuData_TU.eHelpKey)
|
|
|
|
//If there is no sub string to add
|
|
IF g_sMenuData_TU.iHelpTextINT = -1
|
|
SCALEFORM_MOVIE_METHOD_ADD_PARAM_STRING(g_sMenuData_TU.tl15HelpText)
|
|
ELSE
|
|
|
|
INT iParam = g_sMenuData.iHelpTextINT[i]
|
|
IF iTimer >= 0
|
|
iParam = iTimer
|
|
ENDIF
|
|
|
|
//There is a sub string to add!
|
|
PRINTLN("IF g_sMenuData_TU.iHelpTextINT = ", g_sMenuData_TU.iHelpTextINT)
|
|
BEGIN_TEXT_COMMAND_SCALEFORM_STRING(g_sMenuData_TU.tl15HelpText)
|
|
IF bUseSubStringTime
|
|
ADD_TEXT_COMPONENT_SUBSTRING_TIME(iParam, TIME_FORMAT_MINUTES|TIME_FORMAT_SECONDS|TEXT_FORMAT_HIDE_LEADING_ZEROS_ON_LEADING_UNITS)
|
|
ELSE
|
|
ADD_TEXT_COMPONENT_INTEGER(iParam)
|
|
ENDIF
|
|
END_TEXT_COMMAND_SCALEFORM_STRING()
|
|
ENDIF
|
|
END_SCALEFORM_MOVIE_METHOD()
|
|
//PRINTLN("... adding label ", g_sMenuData_TU.tl15HelpText)
|
|
ENDIF
|
|
#ENDIF
|
|
|
|
BEGIN_SCALEFORM_MOVIE_METHOD(g_sMenuData.sMenuHelp[iMenuID].movieID, "SET_BACKGROUND_COLOUR")
|
|
SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(0)
|
|
SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(0)
|
|
SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(0)
|
|
SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(80)
|
|
END_SCALEFORM_MOVIE_METHOD()
|
|
BEGIN_SCALEFORM_MOVIE_METHOD(g_sMenuData.sMenuHelp[iMenuID].movieID, "DRAW_INSTRUCTIONAL_BUTTONS")
|
|
IF g_sMenuData.bStackedKeys
|
|
SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(1)
|
|
ELSE
|
|
SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(0)
|
|
ENDIF
|
|
END_SCALEFORM_MOVIE_METHOD()
|
|
|
|
g_sMenuData.bHelpCreated = TRUE
|
|
ENDIF
|
|
|
|
|
|
//PRINTLN("IF g_sMenuData.iHelpTextINT[", 0, "] = ", g_sMenuData.iHelpTextINT[0])
|
|
|
|
REPEAT g_sMenuData.iHelpCount i
|
|
IF g_sMenuData.iHelpTextINT[i] != -1
|
|
// PRINTLN("IF g_sMenuData.iHelpTextINT[", i, "] = ", g_sMenuData.iHelpTextINT[i])
|
|
IF iTimer > 0
|
|
//PRINTLN("iTimer = ", iTimer)
|
|
BEGIN_SCALEFORM_MOVIE_METHOD(g_sMenuData.sMenuHelp[iMenuID].movieID, "OVERRIDE_RESPAWN_TEXT")
|
|
SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(i)
|
|
BEGIN_TEXT_COMMAND_SCALEFORM_STRING(g_sMenuData.tl15HelpText[i])
|
|
IF bUseSubStringTime
|
|
ADD_TEXT_COMPONENT_SUBSTRING_TIME(iTimer, TIME_FORMAT_MINUTES|TIME_FORMAT_SECONDS|TEXT_FORMAT_HIDE_LEADING_ZEROS_ON_LEADING_UNITS)
|
|
ELSE
|
|
ADD_TEXT_COMPONENT_INTEGER(iTimer)
|
|
ENDIF
|
|
END_TEXT_COMMAND_SCALEFORM_STRING()
|
|
END_SCALEFORM_MOVIE_METHOD()
|
|
//PRINTLN("END_SCALEFORM_MOVIE_METHOD")
|
|
ENDIF
|
|
ENDIF
|
|
ENDREPEAT
|
|
|
|
#IF USE_TU_CHANGES
|
|
// HELP KEY OVERFLOW
|
|
IF g_sMenuData_TU.iHelpTextINT != -1
|
|
IF iTimer > 0
|
|
BEGIN_SCALEFORM_MOVIE_METHOD(g_sMenuData.sMenuHelp[iMenuID].movieID, "OVERRIDE_RESPAWN_TEXT")
|
|
SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(i)
|
|
BEGIN_TEXT_COMMAND_SCALEFORM_STRING(g_sMenuData_TU.tl15HelpText)
|
|
IF bUseSubStringTime
|
|
ADD_TEXT_COMPONENT_SUBSTRING_TIME(iTimer, TIME_FORMAT_MINUTES|TIME_FORMAT_SECONDS|TEXT_FORMAT_HIDE_LEADING_ZEROS_ON_LEADING_UNITS)
|
|
ELSE
|
|
ADD_TEXT_COMPONENT_INTEGER(iTimer)
|
|
ENDIF
|
|
END_TEXT_COMMAND_SCALEFORM_STRING()
|
|
END_SCALEFORM_MOVIE_METHOD()
|
|
ENDIF
|
|
ENDIF
|
|
#ENDIF
|
|
|
|
|
|
SET_SCRIPT_GFX_ALIGN(UI_ALIGN_LEFT, UI_ALIGN_BOTTOM)
|
|
SET_SCRIPT_GFX_ALIGN_PARAMS(0.0, 0.0, 0.0, 0.0)
|
|
|
|
IF bPushSubtitlesUp
|
|
IF NOT g_sMenuData.bSubtitlesMoved
|
|
SET_HUD_COMPONENT_POSITION(NEW_HUD_SUBTITLE_TEXT, 0, -0.0375)
|
|
g_sMenuData.bSubtitlesMoved = TRUE
|
|
ENDIF
|
|
ELSE
|
|
IF g_sMenuData.bSubtitlesMoved
|
|
RESET_HUD_COMPONENT_VALUES(NEW_HUD_SUBTITLE_TEXT)
|
|
g_sMenuData.bSubtitlesMoved = FALSE
|
|
ENDIF
|
|
ENDIF
|
|
|
|
RESET_SCRIPT_GFX_ALIGN()
|
|
|
|
IF g_sMenuData.bUseTempKeyCoords
|
|
SET_SCRIPT_GFX_ALIGN(UI_ALIGN_RIGHT, UI_ALIGN_BOTTOM)
|
|
SET_SCRIPT_GFX_ALIGN_PARAMS(0.0, 0.0, 0.0, 0.0)
|
|
DRAW_SCALEFORM_MOVIE(g_sMenuData.sMenuHelp[iMenuID].movieID, g_sMenuData.fHelpKeysX, g_sMenuData.fHelpKeysY, 1.0, 1.0, 255, 255, 255, 255)
|
|
RESET_SCRIPT_GFX_ALIGN()
|
|
ELSE
|
|
//DRAW_SCALEFORM_MOVIE(g_sMenuData.sMenuHelp[iMenuID].movieID, 0.550, 0.569, 1.0, 1.0, 255, 255, 255, 255) // old x/y = 0.550, 0.546
|
|
DRAW_SCALEFORM_MOVIE_FULLSCREEN(g_sMenuData.sMenuHelp[iMenuID].movieID, 255, 255, 255, 255)
|
|
ENDIF
|
|
ENDIF
|
|
|
|
|
|
ENDPROC
|
|
|
|
/// PURPOSE: Render the menu to the screen
|
|
/// NOTE: Use the iMenuType param to make sure the scaleform movie is loaded for the correct menu.
|
|
PROC DRAW_MENU(BOOL bSetButtonsUnderHud = TRUE, INT iMenuType = -1, BOOL bHideHelpText = TRUE, BOOL bAddDefaultExitOption = FALSE, BOOL bPushSubtitlesUp = TRUE, FLOAT fCustomWidth = -1.0, BOOL bAllowDuringPause = FALSE, BOOL bUseActualRes = FALSE, INT iTimer = -1)
|
|
|
|
INT iMenuID
|
|
IF NOT GET_MENU_ID_FOR_THIS_SCRIPT(iMenuID, FALSE, iMenuType)
|
|
#IF IS_DEBUG_BUILD
|
|
CASSERTLN(DEBUG_SYSTEM, "DRAW_MENU - LOAD_MENU_ASSETS not returned TRUE. Tell Kenneth R.")
|
|
#ENDIF
|
|
PRINTLN("DRAW_MENU - LOAD_MENU_ASSETS not returned TRUE. Tell Kenneth R.")
|
|
EXIT
|
|
ENDIF
|
|
|
|
IF iMenuID = -1
|
|
#IF IS_DEBUG_BUILD
|
|
PRINTLN("DRAW_MENU() - Script '", GET_THIS_SCRIPT_NAME(), "' with menu_type=", iMenuType, " has not called LOAD_MENU_ASSETS()")
|
|
CASSERTLN(DEBUG_SYSTEM, "LOAD_MENU_ASSETS() not called. Pass logs to Kenneth R.")
|
|
EXIT
|
|
#ENDIF
|
|
ENDIF
|
|
|
|
IF NOT IS_CUSTOM_MENU_SAFE_TO_DRAW(DEFAULT, bAllowDuringPause)
|
|
PRINTLN("DRAW_MENU - Custom menu not safe to draw - EXIT")
|
|
EXIT
|
|
ENDIF
|
|
|
|
#IF IS_DEBUG_BUILD
|
|
// Do not display when we have debug options on screen
|
|
IF (IS_BIT_SET(m_sharedDebugFlags, DBG_F9_SCREEN_ON))
|
|
OR (g_debugMenuControl.bDebugMenuOnScreen)
|
|
IF IS_BIT_SET(m_sharedDebugFlags, DBG_F9_SCREEN_ON)
|
|
PRINTLN("DRAW_MENU - IS_BIT_SET(m_sharedDebugFlags, DBG_F9_SCREEN_ON) - is TRUE")
|
|
ENDIF
|
|
IF g_debugMenuControl.bDebugMenuOnScreen
|
|
PRINTLN("DRAW_MENU - g_debugMenuControl.bDebugMenuOnScreen - is TRUE")
|
|
ENDIF
|
|
PRINTLN("DRAW_MENU - Debug menu on screen - EXIT")
|
|
EXIT
|
|
ENDIF
|
|
#ENDIF
|
|
|
|
SET_SCRIPT_GFX_ALIGN(UI_ALIGN_LEFT, UI_ALIGN_TOP)
|
|
SET_SCRIPT_GFX_ALIGN_PARAMS(-0.05, -0.05, 0.0, 0.0)
|
|
|
|
INT iHudR, iHudG, iHudB, iHudA
|
|
INT iPass, iRow, iRowLoop, iItem, iDisplayRow, iTotalRows, iTotalSelectableRows, iCurrentDisplaySpacer, iSpacerCount
|
|
INT i, iIntParam, iFloatParam, iTextParam, iPlayerNameParam
|
|
INT iTextCount, iIntCount, iFloatCount, iIconCount, iPlayerNameCount
|
|
INT iThisTextItem, iTempTextCount, iTempIntCount, iTempFloatCount, iTempIconCount, iTempPlayerNameCount, iThisTextItemActual
|
|
MENU_TEXT_COMP_TYPE eLastCompType
|
|
BOOL bSelected, bDisplay
|
|
FLOAT fTextX, fTextY
|
|
FLOAT fWidth, fHeight
|
|
VECTOR vTexture
|
|
BOOL bItemAdded
|
|
FLOAT fTempWidth, fTempTextWidth, fTempIconWidth, fTempToggleWidth, fTempColumnWidth
|
|
INT iIconR, iIconG, iIconB, iIconA
|
|
FLOAT fFinalPanelY
|
|
BOOL bCondensed, bPlayerName
|
|
BOOL bAddToggleItems
|
|
BOOL bSetCarColour
|
|
FLOAT fMenuItemBarHeight
|
|
|
|
FLOAT fHeaderGraphicHeight = 0.0
|
|
FLOAT fHeaderGraphicAspectRatio
|
|
|
|
IF g_sMenuData.bUseHeaderGraphic
|
|
IF GET_MENU_ICON_SCREEN_RESOLUTION(MENU_ICON_HEADER, TRUE, TRUE, fWidth, fHeight, bUseActualRes)
|
|
fHeaderGraphicAspectRatio = fHeight/fWidth
|
|
ELSE
|
|
g_sMenuData.bUseHeaderGraphic = FALSE
|
|
ENDIF
|
|
ENDIF
|
|
|
|
IF fCustomWidth = -1.0
|
|
fCustomWidth = CUSTOM_MENU_W
|
|
ENDIF
|
|
|
|
//If we're overriding the header graphic width with fCutsomWidth we also need to make sure it's height is altered
|
|
//to match and preserve the correct aspect ratio.
|
|
fHeaderGraphicHeight = fCustomWidth*fHeaderGraphicAspectRatio
|
|
|
|
FLOAT fBodyStartY
|
|
IF GET_HASH_KEY(g_sMenuData.tl15Title) = GET_HASH_KEY("HIDE")
|
|
fBodyStartY = (CUSTOM_MENU_Y)
|
|
ELSE
|
|
fBodyStartY = (CUSTOM_MENU_Y + fHeaderGraphicHeight + CUSTOM_MENU_HEADER_H + CUSTOM_MENU_WHITE_LINE_H)
|
|
ENDIF
|
|
|
|
// B* 2147964 - Gets the physical screen aspect and compares to fake aspect ratio to get a multiplier
|
|
INT iScreenX, iScreenY
|
|
FLOAT fAspectMulti = 1.0
|
|
GET_SCREEN_RESOLUTION_FOR_MENU(bUseActualRes, iScreenX, iScreenY, fAspectMulti)
|
|
|
|
// Add a default row with Exit text whenever we have 1 item or less.
|
|
IF bAddDefaultExitOption
|
|
IF g_sMenuData.iCurrentRow <= 1
|
|
ADD_MENU_ITEM_TEXT(g_sMenuData.iCurrentRow+1, "DFLT_MNU_OPT")
|
|
g_sMenuData.bDefaultOptionAdded = TRUE
|
|
ENDIF
|
|
ENDIF
|
|
|
|
// We currently do 2 passes so we can draw the background before we draw text/icons.
|
|
// To cut down processing we should do a one off setup and then just the 1 pass.
|
|
|
|
REPEAT 2 iPass
|
|
|
|
// Only draw the backgrounds when the initial set up has been done as
|
|
// we need to work out the background size/footer offset.
|
|
IF iPass = 1
|
|
AND g_sMenuData.bSetupComplete
|
|
|
|
//////////////////////////////////////////////////////////////////////////////////////////
|
|
/// HEADER
|
|
///
|
|
IF GET_HASH_KEY(g_sMenuData.tl15Title) = GET_HASH_KEY("HIDE")
|
|
fFinalPanelY = (CUSTOM_MENU_Y)
|
|
ELSE
|
|
IF g_sMenuData.bUseHeaderGraphic
|
|
|
|
TEXT_LABEL_63 tlTXD = GET_MENU_ICON_TXD(MENU_ICON_HEADER)
|
|
TEXT_LABEL_63 tlName = GET_MENU_ICON_TEXTURE(MENU_ICON_HEADER, TRUE)
|
|
|
|
// Crew logo?
|
|
IF GET_HASH_KEY(g_sMenuData.sIconTextureOverride[MENU_ICON_HEADER]) = HASH("CREW_LOGO")
|
|
DRAW_RECT_FROM_CORNER(CUSTOM_MENU_X, CUSTOM_MENU_Y, fCustomWidth, fHeaderGraphicHeight, 0, 0, 0, 255) // Black background
|
|
DRAW_SPRITE(tlTXD, tlName, CUSTOM_MENU_X+(fCustomWidth*0.5), CUSTOM_MENU_Y+(fHeaderGraphicHeight*0.5), fCustomWidth, fHeaderGraphicHeight, 0.0, 255, 255, 255, 255)
|
|
ELSE
|
|
DRAW_SPRITE(tlTXD, tlName, CUSTOM_MENU_X+(fCustomWidth*0.5), CUSTOM_MENU_Y+(fHeaderGraphicHeight*0.5), fCustomWidth, fHeaderGraphicHeight, 0.0, 255, 255, 255, 255)
|
|
ENDIF
|
|
ENDIF
|
|
|
|
IF g_sMenuData.bUseCustomHeaderColour
|
|
iHudR = g_sMenuData.iHeaderR
|
|
iHudG = g_sMenuData.iHeaderG
|
|
iHudB = g_sMenuData.iHeaderB
|
|
iHudA = g_sMenuData.iHeaderA
|
|
ELSE
|
|
iHudR = 0
|
|
iHudG = 0
|
|
iHudB = 0
|
|
iHudA = tiCOMMON_MENU_H_ALPHA
|
|
ENDIF
|
|
DRAW_RECT_FROM_CORNER(CUSTOM_MENU_X, CUSTOM_MENU_Y+fHeaderGraphicHeight, fCustomWidth, CUSTOM_MENU_HEADER_H, iHudR, iHudG, iHudB, iHudA) // Black panel
|
|
//DRAW_RECT_FROM_CORNER(CUSTOM_MENU_X, CUSTOM_MENU_Y+fHeaderGraphicHeight+CUSTOM_MENU_HEADER_H, CUSTOM_MENU_W, CUSTOM_MENU_WHITE_LINE_H, 255, 255, 255, 255) // White line
|
|
|
|
fFinalPanelY = (CUSTOM_MENU_Y) + (fHeaderGraphicHeight) + (CUSTOM_MENU_HEADER_H) + (CUSTOM_MENU_WHITE_LINE_H)
|
|
|
|
IF GET_HASH_KEY(g_sMenuData.tl15Title) != 0
|
|
// Add text
|
|
SETUP_MENU_HEADING_TEXT()
|
|
BEGIN_TEXT_COMMAND_DISPLAY_TEXT(g_sMenuData.tl15Title)
|
|
iIntParam = 0
|
|
iFloatParam = 0
|
|
iTextParam = 0
|
|
iPlayerNameParam = 0
|
|
REPEAT g_sMenuData.iTitleTotalParams i
|
|
IF g_sMenuData.eTitleComps[i] = MENU_TEXT_COMP_INT
|
|
ADD_TEXT_COMPONENT_INTEGER(g_sMenuData.iTitleInt[iIntParam])
|
|
iIntParam++
|
|
ELIF g_sMenuData.eTitleComps[i] = MENU_TEXT_COMP_FLOAT
|
|
ADD_TEXT_COMPONENT_FLOAT(g_sMenuData.fTitleFloat[iFloatParam], g_sMenuData.iTitleFloatDP[iFloatParam])
|
|
iFloatParam++
|
|
ELIF g_sMenuData.eTitleComps[i] = MENU_TEXT_COMP_TEXT
|
|
ADD_TEXT_COMPONENT_SUBSTRING_TEXT_LABEL(g_sMenuData.tl15TitleText[iTextParam])
|
|
iTextParam++
|
|
ELIF g_sMenuData.eTitleComps[i] = MENU_TEXT_COMP_VEHICLE_NAME
|
|
ADD_TEXT_COMPONENT_SUBSTRING_TEXT_LABEL(g_sMenuData.tl15TitleText[iTextParam])
|
|
iTextParam++
|
|
ELIF g_sMenuData.eTitleComps[i] = MENU_TEXT_COMP_PLAYER_NAME
|
|
ADD_TEXT_COMPONENT_SUBSTRING_PLAYER_NAME(g_sMenuData.tlTitlePlayerName[iPlayerNameParam])
|
|
iPlayerNameParam++
|
|
ELIF g_sMenuData.eTitleComps[i] = MENU_TEXT_COMP_RADIO_STATION
|
|
ADD_TEXT_COMPONENT_SUBSTRING_TEXT_LABEL(g_sMenuData.tlTitlePlayerName[iPlayerNameParam])
|
|
iPlayerNameParam++
|
|
ELIF g_sMenuData.eTitleComps[i] = MENU_TEXT_COMP_LITERAL
|
|
ADD_TEXT_COMPONENT_SUBSTRING_PLAYER_NAME(g_sMenuData.tlTitlePlayerName[iPlayerNameParam])
|
|
iPlayerNameParam++
|
|
ELIF g_sMenuData.eTitleComps[i] = MENU_TEXT_COMP_CONDENSED_LITERAL
|
|
ADD_TEXT_COMPONENT_SUBSTRING_PLAYER_NAME(g_sMenuData.tlTitlePlayerName[iPlayerNameParam])
|
|
iPlayerNameParam++
|
|
ENDIF
|
|
ENDREPEAT
|
|
END_TEXT_COMMAND_DISPLAY_TEXT(CUSTOM_MENU_X+CUSTOM_MENU_TITLE_TEXT_INDENT_X, CUSTOM_MENU_Y+fHeaderGraphicHeight+CUSTOM_MENU_TITLE_TEXT_INDENT_Y)
|
|
ENDIF
|
|
|
|
IF g_sMenuData.bOverrideTitleRowCounts
|
|
SETUP_MENU_HEADING_TEXT()
|
|
DISPLAY_TEXT_WITH_2_NUMBERS(CUSTOM_MENU_X+fCustomWidth-CUSTOM_MENU_TITLE_TEXT_INDENT_X-GET_MENU_ITEM_COUNT_WIDTH("CM_ITEM_COUNT", g_sMenuData.iTitleRowOverride1, g_sMenuData.iTitleRowOverride2), CUSTOM_MENU_Y+fHeaderGraphicHeight+CUSTOM_MENU_TITLE_TEXT_INDENT_Y, "CM_ITEM_COUNT", g_sMenuData.iTitleRowOverride1, g_sMenuData.iTitleRowOverride2)
|
|
ELIF g_sMenuData.iSetupTotalRows > g_sMenuData.iMenuRows
|
|
IF g_sMenuData.iSetupCurrentSelectableItem != 0
|
|
SETUP_MENU_HEADING_TEXT()
|
|
DISPLAY_TEXT_WITH_2_NUMBERS(CUSTOM_MENU_X+fCustomWidth-CUSTOM_MENU_TITLE_TEXT_INDENT_X-GET_MENU_ITEM_COUNT_WIDTH("CM_ITEM_COUNT", g_sMenuData.iSetupCurrentSelectableItem, g_sMenuData.iSetupTotalSelectableRows), CUSTOM_MENU_Y+fHeaderGraphicHeight+CUSTOM_MENU_TITLE_TEXT_INDENT_Y, "CM_ITEM_COUNT", g_sMenuData.iSetupCurrentSelectableItem, g_sMenuData.iSetupTotalSelectableRows)
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
|
|
|
|
//////////////////////////////////////////////////////////////////////////////////////////
|
|
/// BODY
|
|
///
|
|
iRow = g_sMenuData.iTopItem
|
|
iDisplayRow = 0
|
|
|
|
// [TART UP]
|
|
FLOAT fGradientYPos = fFinalPanelY
|
|
|
|
IF g_sMenuData.bUseCustomBodyColour
|
|
iHudR = g_sMenuData.iBodyR
|
|
iHudG = g_sMenuData.iBodyG
|
|
iHudB = g_sMenuData.iBodyB
|
|
iHudA = g_sMenuData.iBodyA
|
|
ELSE
|
|
GET_HUD_COLOUR(HUD_COLOUR_INGAME_BG, iHudR, iHudG, iHudB, iHudA)
|
|
ENDIF
|
|
|
|
WHILE iDisplayRow < g_sMenuData.iMenuRows
|
|
AND iRow <= g_sMenuData.iCurrentRow
|
|
IF iRow >= 0
|
|
IF g_sMenuData.bMenuRowHasDisplayItems[iRow]
|
|
IF g_sMenuData.bMenuRowHasSpacer[iRow]
|
|
AND iRow != g_sMenuData.iTopItem
|
|
fFinalPanelY += CUSTOM_MENU_SPACER_H
|
|
ENDIF
|
|
|
|
fMenuItemBarHeight = CUSTOM_MENU_ITEM_BAR_H
|
|
IF g_sMenuData.fRowHeight[iRow] != 0.0
|
|
fMenuItemBarHeight = g_sMenuData.fRowHeight[iRow]
|
|
ENDIF
|
|
|
|
// [TART UP]
|
|
//DRAW_RECT_FROM_CORNER(CUSTOM_MENU_X, fFinalPanelY, fCustomWidth, fMenuItemBarHeight, iHudR, iHudG, iHudB, iHudA) // Black panel
|
|
fFinalPanelY += fMenuItemBarHeight
|
|
iDisplayRow++
|
|
ENDIF
|
|
ENDIF
|
|
iRow++
|
|
ENDWHILE
|
|
|
|
// [TART UP]
|
|
DRAW_SPRITE("CommonMenu", "Gradient_Bgd", CUSTOM_MENU_X+(fCustomWidth*0.5), fGradientYPos+((fFinalPanelY-fGradientYPos)*0.5)-(CUSTOM_MENU_PIXEL_HEIGHT), fCustomWidth, (fFinalPanelY-fGradientYPos), 0.0, 255, 255, 255, 255)
|
|
/*fWidth = (fCustomWidth / 6)
|
|
fHeight = (fFinalPanelY-fGradientYPos)
|
|
DRAW_SPRITE("CommonMenu", "Gradient_Bgd", CUSTOM_MENU_X+((fWidth*0.5)+(fWidth*0)), fGradientYPos+(fHeight*0.5), fWidth, fHeight, 0.0, iHudR, iHudG, iHudB, iHudA)
|
|
DRAW_SPRITE("CommonMenu", "Gradient_Bgd", CUSTOM_MENU_X+((fWidth*0.5)+(fWidth*1)), fGradientYPos+(fHeight*0.5), fWidth, fHeight, 0.0, iHudR, iHudG, iHudB, iHudA)
|
|
DRAW_SPRITE("CommonMenu", "Gradient_Bgd", CUSTOM_MENU_X+((fWidth*0.5)+(fWidth*2)), fGradientYPos+(fHeight*0.5), fWidth, fHeight, 0.0, iHudR, iHudG, iHudB, iHudA)
|
|
DRAW_SPRITE("CommonMenu", "Gradient_Bgd", CUSTOM_MENU_X+((fWidth*0.5)+(fWidth*3)), fGradientYPos+(fHeight*0.5), fWidth, fHeight, 0.0, iHudR, iHudG, iHudB, iHudA)
|
|
DRAW_SPRITE("CommonMenu", "Gradient_Bgd", CUSTOM_MENU_X+((fWidth*0.5)+(fWidth*4)), fGradientYPos+(fHeight*0.5), fWidth, fHeight, 0.0, iHudR, iHudG, iHudB, iHudA)
|
|
DRAW_SPRITE("CommonMenu", "Gradient_Bgd", CUSTOM_MENU_X+((fWidth*0.5)+(fWidth*5)), fGradientYPos+(fHeight*0.5), fWidth, fHeight, 0.0, iHudR, iHudG, iHudB, iHudA)*/
|
|
|
|
|
|
//////////////////////////////////////////////////////////////////////////////////////////
|
|
/// FOOTER
|
|
///
|
|
IF g_sMenuData.iSetupTotalRows > g_sMenuData.iMenuRows
|
|
// or g_sMenuData.bForceFooter
|
|
IF g_sMenuData.bUseCustomFooterColour
|
|
iHudR = g_sMenuData.iFooterR
|
|
iHudG = g_sMenuData.iFooterG
|
|
iHudB = g_sMenuData.iFooterB
|
|
iHudA = g_sMenuData.iFooterA
|
|
ELSE
|
|
iHudR = 0
|
|
iHudG = 0
|
|
iHudB = 0
|
|
iHudA = tiCOMMON_MENU_F_ALPHA
|
|
ENDIF
|
|
|
|
DRAW_RECT_FROM_CORNER(CUSTOM_MENU_X, fFinalPanelY+CUSTOM_MENU_WHITE_LINE_H, fCustomWidth, CUSTOM_MENU_FOOTER_H, iHudR, iHudG, iHudB, iHudA) // Black panel
|
|
vTexture = GET_TEXTURE_RESOLUTION("CommonMenu", "shop_arrows_upANDdown")
|
|
|
|
// Fix for bug # 1859693 - Reducing size as textures were doubled in size
|
|
vTexture.x *= ( 0.5 / fAspectMulti )
|
|
vTexture.Y *= ( 0.5 / fAspectMulti )
|
|
|
|
IF g_sMenuData.bUseInvertedScrollColour
|
|
iHudR = 0
|
|
iHudG = 0
|
|
iHudB = 0
|
|
iHudA = 255
|
|
ELSE
|
|
GET_HUD_COLOUR(HUD_COLOUR_WHITE, iHudR, iHudG, iHudB, iHudA)
|
|
ENDIF
|
|
|
|
DRAW_SPRITE("CommonMenu", "shop_arrows_upANDdown", CUSTOM_MENU_X+(fCustomWidth*0.5), fFinalPanelY+CUSTOM_MENU_WHITE_LINE_H+(CUSTOM_MENU_FOOTER_H*0.5), (vTexture.X / 1280 * fAspectMulti), (vTexture.Y / 720 * fAspectMulti), 0.0, iHudR, iHudG, iHudB, iHudA)
|
|
|
|
|
|
// DRAW_SPRITE("CommonMenu", "shop_arrows_upANDdown", CUSTOM_MENU_X+CUSTOM_MENU_W-CUSTOM_MENU_TITLE_TEXT_INDENT_X-((vTexture.X / iScreenX)*0.5), fFinalPanelY+CUSTOM_MENU_WHITE_LINE_H+(CUSTOM_MENU_FOOTER_H*0.5), (vTexture.X / iScreenX), (vTexture.Y / iScreenY), 0.0, 255, 255, 255, 255)
|
|
//
|
|
// IF g_sMenuData.iSetupCurrentSelectableItem != 0
|
|
// SETUP_MENU_ITEM_TEXT(FALSE)
|
|
// DISPLAY_TEXT_WITH_2_NUMBERS(CUSTOM_MENU_X+CUSTOM_MENU_TITLE_TEXT_INDENT_X, fFinalPanelY+CUSTOM_MENU_WHITE_LINE_H+CUSTOM_MENU_TITLE_TEXT_INDENT_Y, "CM_ITEM_COUNT", g_sMenuData.iSetupCurrentSelectableItem, g_sMenuData.iSetupTotalSelectableRows)
|
|
// ENDIF
|
|
fFinalPanelY += (CUSTOM_MENU_WHITE_LINE_H) + (CUSTOM_MENU_FOOTER_H)
|
|
ENDIF
|
|
|
|
|
|
//////////////////////////////////////////////////////////////////////////////////////////
|
|
/// DESCRIPTION MESSAGE BOX
|
|
///
|
|
IF GET_HASH_KEY(g_sMenuData.tl23Desc) != 0
|
|
AND g_sMenuData.iDescClearTimer != -1
|
|
|
|
// Add box offset
|
|
fFinalPanelY += (CUSTOM_MENU_MESSAGE_OFFSET_Y*2)
|
|
|
|
fTempWidth = CUSTOM_MENU_X+CUSTOM_MENU_TEXT_INDENT_X
|
|
IF g_sMenuData.eDescIcon != MENU_ICON_DUMMY
|
|
GET_MENU_ICON_SCREEN_RESOLUTION(g_sMenuData.eDescIcon, TRUE, TRUE, fWidth, fHeight, bUseActualRes)
|
|
fTempWidth = CUSTOM_MENU_X+(fWidth)+(CUSTOM_MENU_PIXEL_WIDTH*4)-(CUSTOM_MENU_PIXEL_WIDTH*1)
|
|
ENDIF
|
|
|
|
// Draw description box
|
|
SETUP_MENU_ITEM_MESSAGE_TEXT(fTempWidth)
|
|
BEGIN_TEXT_COMMAND_GET_NUMBER_OF_LINES_FOR_STRING(g_sMenuData.tl23Desc)
|
|
iIntParam = 0
|
|
iFloatParam = 0
|
|
iTextParam = 0
|
|
REPEAT g_sMenuData.iDescTotalParams i
|
|
IF g_sMenuData.eDescComps[i] = MENU_TEXT_COMP_INT
|
|
ADD_TEXT_COMPONENT_INTEGER(g_sMenuData.iDescInt[iIntParam])
|
|
iIntParam++
|
|
ELIF g_sMenuData.eDescComps[i] = MENU_TEXT_COMP_FLOAT
|
|
ADD_TEXT_COMPONENT_FLOAT(g_sMenuData.fDescFloat[iFloatParam], g_sMenuData.iDescFloatDP[iFloatParam])
|
|
iFloatParam++
|
|
ELIF g_sMenuData.eDescComps[i] = MENU_TEXT_COMP_TEXT
|
|
ADD_TEXT_COMPONENT_SUBSTRING_TEXT_LABEL(g_sMenuData.tl15DescText[iTextParam])
|
|
iTextParam++
|
|
ELIF g_sMenuData.eDescComps[i] = MENU_TEXT_COMP_PLAYER_NAME
|
|
ADD_TEXT_COMPONENT_SUBSTRING_PLAYER_NAME(g_sMenuData.tl15DescText[iTextParam])
|
|
iTextParam++
|
|
ELIF g_sMenuData.eDescComps[i] = MENU_TEXT_COMP_RADIO_STATION
|
|
ADD_TEXT_COMPONENT_SUBSTRING_TEXT_LABEL(g_sMenuData.tl15DescText[iTextParam])
|
|
iTextParam++
|
|
ELIF g_sMenuData.eDescComps[i] = MENU_TEXT_COMP_LITERAL
|
|
ADD_TEXT_COMPONENT_SUBSTRING_PLAYER_NAME(g_sMenuData.tl15DescText[iTextParam])
|
|
iTextParam++
|
|
ELIF g_sMenuData.eDescComps[i] = MENU_TEXT_COMP_CONDENSED_LITERAL
|
|
ADD_TEXT_COMPONENT_SUBSTRING_PLAYER_NAME(g_sMenuData.tl15DescText[iTextParam])
|
|
iTextParam++
|
|
ENDIF
|
|
ENDREPEAT
|
|
iRow = END_TEXT_COMMAND_GET_NUMBER_OF_LINES_FOR_STRING(fTempWidth, fFinalPanelY+CUSTOM_MENU_TEXT_INDENT_Y)
|
|
|
|
// [TART UP]
|
|
//GET_HUD_COLOUR(HUD_COLOUR_WHITE, iHudR, iHudG, iHudB, iHudA)
|
|
GET_HUD_COLOUR(HUD_COLOUR_BLACK, iHudR, iHudG, iHudB, iHudA)
|
|
DRAW_RECT_FROM_CORNER(CUSTOM_MENU_X, fFinalPanelY-CUSTOM_MENU_MESSAGE_OFFSET_Y, fCustomWidth, CUSTOM_MENU_MESSAGE_OFFSET_Y, iHudR, iHudG, iHudB, iHudA)
|
|
|
|
IF g_sMenuData.bUseCustomHelpColour
|
|
iHudR = g_sMenuData.iHelpR
|
|
iHudG = g_sMenuData.iHelpG
|
|
iHudB = g_sMenuData.iHelpB
|
|
iHudA = g_sMenuData.iHelpA
|
|
ELSE
|
|
GET_HUD_COLOUR(HUD_COLOUR_INGAME_BG, iHudR, iHudG, iHudB, iHudA)
|
|
ENDIF
|
|
// [TART UP]
|
|
//DRAW_RECT_FROM_CORNER(CUSTOM_MENU_X, fFinalPanelY, fCustomWidth, ((GET_RENDERED_CHARACTER_HEIGHT(CUSTOM_MENU_TEXT_SCALE_Y)*iRow)+(CUSTOM_MENU_PIXEL_HEIGHT*13)+CUSTOM_MENU_PIXEL_HEIGHT*5*(iRow-1)), iHudR, iHudG, iHudB, iHudA)
|
|
DRAW_SPRITE("CommonMenu", "Gradient_Bgd", CUSTOM_MENU_X+(fCustomWidth*0.5), fFinalPanelY+(((GET_RENDERED_CHARACTER_HEIGHT(CUSTOM_MENU_TEXT_SCALE_Y)*iRow)+(CUSTOM_MENU_PIXEL_HEIGHT*13)+CUSTOM_MENU_PIXEL_HEIGHT*5*(iRow-1))*0.5)-(CUSTOM_MENU_PIXEL_HEIGHT), fCustomWidth, ((GET_RENDERED_CHARACTER_HEIGHT(CUSTOM_MENU_TEXT_SCALE_Y)*iRow)+(CUSTOM_MENU_PIXEL_HEIGHT*13)+CUSTOM_MENU_PIXEL_HEIGHT*5*(iRow-1)), 0.0, iHudR, iHudG, iHudB, iHudA)
|
|
/*fWidth = (fCustomWidth / 6)
|
|
fHeight = ((GET_RENDERED_CHARACTER_HEIGHT(CUSTOM_MENU_TEXT_SCALE_Y)*iRow)+(CUSTOM_MENU_PIXEL_HEIGHT*13)+CUSTOM_MENU_PIXEL_HEIGHT*5*(iRow-1))
|
|
DRAW_SPRITE("CommonMenu", "Gradient_Bgd", CUSTOM_MENU_X+((fWidth*0.5)+(fWidth*0)), fFinalPanelY+(fHeight*0.5), fWidth, fHeight, 0.0, iHudR, iHudG, iHudB, iHudA)
|
|
DRAW_SPRITE("CommonMenu", "Gradient_Bgd", CUSTOM_MENU_X+((fWidth*0.5)+(fWidth*1)), fFinalPanelY+(fHeight*0.5), fWidth, fHeight, 0.0, iHudR, iHudG, iHudB, iHudA)
|
|
DRAW_SPRITE("CommonMenu", "Gradient_Bgd", CUSTOM_MENU_X+((fWidth*0.5)+(fWidth*2)), fFinalPanelY+(fHeight*0.5), fWidth, fHeight, 0.0, iHudR, iHudG, iHudB, iHudA)
|
|
DRAW_SPRITE("CommonMenu", "Gradient_Bgd", CUSTOM_MENU_X+((fWidth*0.5)+(fWidth*3)), fFinalPanelY+(fHeight*0.5), fWidth, fHeight, 0.0, iHudR, iHudG, iHudB, iHudA)
|
|
DRAW_SPRITE("CommonMenu", "Gradient_Bgd", CUSTOM_MENU_X+((fWidth*0.5)+(fWidth*4)), fFinalPanelY+(fHeight*0.5), fWidth, fHeight, 0.0, iHudR, iHudG, iHudB, iHudA)
|
|
DRAW_SPRITE("CommonMenu", "Gradient_Bgd", CUSTOM_MENU_X+((fWidth*0.5)+(fWidth*5)), fFinalPanelY+(fHeight*0.5), fWidth, fHeight, 0.0, iHudR, iHudG, iHudB, iHudA)*/
|
|
|
|
// Add text
|
|
SETUP_MENU_ITEM_MESSAGE_TEXT(fTempWidth)
|
|
BEGIN_TEXT_COMMAND_DISPLAY_TEXT(g_sMenuData.tl23Desc)
|
|
iIntParam = 0
|
|
iFloatParam = 0
|
|
iTextParam = 0
|
|
REPEAT g_sMenuData.iDescTotalParams i
|
|
IF g_sMenuData.eDescComps[i] = MENU_TEXT_COMP_INT
|
|
ADD_TEXT_COMPONENT_INTEGER(g_sMenuData.iDescInt[iIntParam])
|
|
iIntParam++
|
|
ELIF g_sMenuData.eDescComps[i] = MENU_TEXT_COMP_FLOAT
|
|
ADD_TEXT_COMPONENT_FLOAT(g_sMenuData.fDescFloat[iFloatParam], g_sMenuData.iDescFloatDP[iFloatParam])
|
|
iFloatParam++
|
|
ELIF g_sMenuData.eDescComps[i] = MENU_TEXT_COMP_TEXT
|
|
ADD_TEXT_COMPONENT_SUBSTRING_TEXT_LABEL(g_sMenuData.tl15DescText[iTextParam])
|
|
iTextParam++
|
|
ELIF g_sMenuData.eDescComps[i] = MENU_TEXT_COMP_PLAYER_NAME
|
|
ADD_TEXT_COMPONENT_SUBSTRING_PLAYER_NAME(g_sMenuData.tl15DescText[iTextParam])
|
|
iTextParam++
|
|
ELIF g_sMenuData.eDescComps[i] = MENU_TEXT_COMP_RADIO_STATION
|
|
ADD_TEXT_COMPONENT_SUBSTRING_TEXT_LABEL(g_sMenuData.tl15DescText[iTextParam])
|
|
iTextParam++
|
|
ELIF g_sMenuData.eDescComps[i] = MENU_TEXT_COMP_LITERAL
|
|
ADD_TEXT_COMPONENT_SUBSTRING_PLAYER_NAME(g_sMenuData.tl15DescText[iTextParam])
|
|
iTextParam++
|
|
ELIF g_sMenuData.eDescComps[i] = MENU_TEXT_COMP_CONDENSED_LITERAL
|
|
ADD_TEXT_COMPONENT_SUBSTRING_PLAYER_NAME(g_sMenuData.tl15DescText[iTextParam])
|
|
iTextParam++
|
|
ELIF g_sMenuData.eDescComps[i] = MENU_TEXT_COMP_VEHICLE_NAME
|
|
ADD_TEXT_COMPONENT_SUBSTRING_TEXT_LABEL(g_sMenuData.tl15DescText[iTextParam])
|
|
iTextParam++
|
|
ENDIF
|
|
ENDREPEAT
|
|
END_TEXT_COMMAND_DISPLAY_TEXT(fTempWidth, fFinalPanelY+CUSTOM_MENU_TEXT_INDENT_Y)
|
|
|
|
IF g_sMenuData.eDescIcon != MENU_ICON_DUMMY
|
|
GET_MENU_ICON_SCREEN_RESOLUTION(g_sMenuData.eDescIcon, TRUE, TRUE, fWidth, fHeight, bUseActualRes)
|
|
GET_MENU_ICON_TEXTURE_RGB(g_sMenuData.eDescIcon, TRUE, iIconR, iIconG, iIconB, iIconA)
|
|
DRAW_SPRITE(GET_MENU_ICON_TXD(g_sMenuData.eDescIcon), GET_MENU_ICON_TEXTURE(g_sMenuData.eDescIcon, TRUE), CUSTOM_MENU_X+(fWidth*0.5)+(CUSTOM_MENU_PIXEL_WIDTH*2), fFinalPanelY+(fHeight*0.5)-(CUSTOM_MENU_PIXEL_HEIGHT*4), fWidth, fHeight, 0.0, iIconR, iIconG, iIconB, iIconA)
|
|
ENDIF
|
|
|
|
|
|
fFinalPanelY += ((GET_RENDERED_CHARACTER_HEIGHT(CUSTOM_MENU_TEXT_SCALE_Y)*iRow)+(CUSTOM_MENU_PIXEL_HEIGHT*13)+(CUSTOM_MENU_PIXEL_HEIGHT*5*(iRow-1)))
|
|
|
|
// Draw description box (EXTRA)
|
|
IF NOT IS_STRING_NULL_OR_EMPTY(g_sMenuData.tl23DescExtra)
|
|
|
|
fFinalPanelY += (CUSTOM_MENU_PIXEL_HEIGHT*6)
|
|
|
|
SETUP_MENU_ITEM_MESSAGE_TEXT(fTempWidth)
|
|
BEGIN_TEXT_COMMAND_GET_NUMBER_OF_LINES_FOR_STRING(g_sMenuData.tl23DescExtra)
|
|
iRow = END_TEXT_COMMAND_GET_NUMBER_OF_LINES_FOR_STRING(fTempWidth, fFinalPanelY+CUSTOM_MENU_TEXT_INDENT_Y)
|
|
|
|
GET_HUD_COLOUR(HUD_COLOUR_BLACK, iHudR, iHudG, iHudB, iHudA)
|
|
DRAW_RECT_FROM_CORNER(CUSTOM_MENU_X, fFinalPanelY-CUSTOM_MENU_MESSAGE_OFFSET_Y, fCustomWidth, CUSTOM_MENU_MESSAGE_OFFSET_Y, iHudR, iHudG, iHudB, iHudA)
|
|
|
|
IF g_sMenuData.bUseCustomHelpColour
|
|
iHudR = g_sMenuData.iHelpR
|
|
iHudG = g_sMenuData.iHelpG
|
|
iHudB = g_sMenuData.iHelpB
|
|
iHudA = g_sMenuData.iHelpA
|
|
ELSE
|
|
GET_HUD_COLOUR(HUD_COLOUR_INGAME_BG, iHudR, iHudG, iHudB, iHudA)
|
|
ENDIF
|
|
|
|
DRAW_SPRITE("CommonMenu", "Gradient_Bgd", CUSTOM_MENU_X+(fCustomWidth*0.5), fFinalPanelY+(((GET_RENDERED_CHARACTER_HEIGHT(CUSTOM_MENU_TEXT_SCALE_Y)*iRow)+(CUSTOM_MENU_PIXEL_HEIGHT*13)+CUSTOM_MENU_PIXEL_HEIGHT*5*(iRow-1))*0.5)-(CUSTOM_MENU_PIXEL_HEIGHT), fCustomWidth, ((GET_RENDERED_CHARACTER_HEIGHT(CUSTOM_MENU_TEXT_SCALE_Y)*iRow)+(CUSTOM_MENU_PIXEL_HEIGHT*13)+CUSTOM_MENU_PIXEL_HEIGHT*5*(iRow-1)), 0.0, iHudR, iHudG, iHudB, iHudA)
|
|
|
|
// Add text
|
|
SETUP_MENU_ITEM_MESSAGE_TEXT(fTempWidth)
|
|
BEGIN_TEXT_COMMAND_DISPLAY_TEXT(g_sMenuData.tl23DescExtra)
|
|
END_TEXT_COMMAND_DISPLAY_TEXT(fTempWidth, fFinalPanelY+CUSTOM_MENU_TEXT_INDENT_Y)
|
|
|
|
/*IF g_sMenuData.eDescIcon != MENU_ICON_DUMMY
|
|
GET_MENU_ICON_SCREEN_RESOLUTION(g_sMenuData.eDescIcon, TRUE, TRUE, fWidth, fHeight, bUseActualRes)
|
|
GET_MENU_ICON_TEXTURE_RGB(g_sMenuData.eDescIcon, TRUE, iIconR, iIconG, iIconB, iIconA)
|
|
DRAW_SPRITE(GET_MENU_ICON_TXD(g_sMenuData.eDescIcon), GET_MENU_ICON_TEXTURE(g_sMenuData.eDescIcon, TRUE), CUSTOM_MENU_X+(fWidth*0.5)+(CUSTOM_MENU_PIXEL_WIDTH*2), fFinalPanelY+(fHeight*0.5)-(CUSTOM_MENU_PIXEL_HEIGHT*4), fWidth, fHeight, 0.0, iIconR, iIconG, iIconB, iIconA)
|
|
ENDIF*/
|
|
|
|
fFinalPanelY += ((GET_RENDERED_CHARACTER_HEIGHT(CUSTOM_MENU_TEXT_SCALE_Y)*iRow)+(CUSTOM_MENU_PIXEL_HEIGHT*13)+(CUSTOM_MENU_PIXEL_HEIGHT*5*(iRow-1)))
|
|
ENDIF
|
|
|
|
// Clear description when time is up
|
|
IF g_sMenuData.iDescClearTimer > 0
|
|
IF (GET_GAME_TIMER()-g_sMenuData.iDescStartTimer) > g_sMenuData.iDescClearTimer
|
|
g_sMenuData.tl23Desc = ""
|
|
g_sMenuData.iDescClearTimer = -1
|
|
ENDIF
|
|
ENDIF
|
|
ELIF NOT IS_STRING_NULL_OR_EMPTY(g_sMenuData.tl23DescExtra)
|
|
fFinalPanelY += (CUSTOM_MENU_MESSAGE_OFFSET_Y*2)
|
|
|
|
fTempWidth = CUSTOM_MENU_X+CUSTOM_MENU_TEXT_INDENT_X
|
|
|
|
// Draw description box
|
|
SETUP_MENU_ITEM_MESSAGE_TEXT(fTempWidth)
|
|
BEGIN_TEXT_COMMAND_GET_NUMBER_OF_LINES_FOR_STRING(g_sMenuData.tl23DescExtra)
|
|
iIntParam = 0
|
|
iFloatParam = 0
|
|
iTextParam = 0
|
|
REPEAT g_sMenuData.iDescTotalParams i
|
|
IF g_sMenuData.eDescComps[i] = MENU_TEXT_COMP_INT
|
|
ADD_TEXT_COMPONENT_INTEGER(g_sMenuData.iDescInt[iIntParam])
|
|
iIntParam++
|
|
ELIF g_sMenuData.eDescComps[i] = MENU_TEXT_COMP_FLOAT
|
|
ADD_TEXT_COMPONENT_FLOAT(g_sMenuData.fDescFloat[iFloatParam], g_sMenuData.iDescFloatDP[iFloatParam])
|
|
iFloatParam++
|
|
ELIF g_sMenuData.eDescComps[i] = MENU_TEXT_COMP_TEXT
|
|
ADD_TEXT_COMPONENT_SUBSTRING_TEXT_LABEL(g_sMenuData.tl15DescText[iTextParam])
|
|
iTextParam++
|
|
ELIF g_sMenuData.eDescComps[i] = MENU_TEXT_COMP_PLAYER_NAME
|
|
ADD_TEXT_COMPONENT_SUBSTRING_PLAYER_NAME(g_sMenuData.tl15DescText[iTextParam])
|
|
iTextParam++
|
|
ELIF g_sMenuData.eDescComps[i] = MENU_TEXT_COMP_RADIO_STATION
|
|
ADD_TEXT_COMPONENT_SUBSTRING_TEXT_LABEL(g_sMenuData.tl15DescText[iTextParam])
|
|
iTextParam++
|
|
ELIF g_sMenuData.eDescComps[i] = MENU_TEXT_COMP_LITERAL
|
|
ADD_TEXT_COMPONENT_SUBSTRING_PLAYER_NAME(g_sMenuData.tl15DescText[iTextParam])
|
|
iTextParam++
|
|
ELIF g_sMenuData.eDescComps[i] = MENU_TEXT_COMP_CONDENSED_LITERAL
|
|
ADD_TEXT_COMPONENT_SUBSTRING_PLAYER_NAME(g_sMenuData.tl15DescText[iTextParam])
|
|
iTextParam++
|
|
ENDIF
|
|
ENDREPEAT
|
|
iRow = END_TEXT_COMMAND_GET_NUMBER_OF_LINES_FOR_STRING(fTempWidth, fFinalPanelY+CUSTOM_MENU_TEXT_INDENT_Y)
|
|
|
|
GET_HUD_COLOUR(HUD_COLOUR_BLACK, iHudR, iHudG, iHudB, iHudA)
|
|
DRAW_RECT_FROM_CORNER(CUSTOM_MENU_X, fFinalPanelY-CUSTOM_MENU_MESSAGE_OFFSET_Y, fCustomWidth, CUSTOM_MENU_MESSAGE_OFFSET_Y, iHudR, iHudG, iHudB, iHudA)
|
|
|
|
IF g_sMenuData.bUseCustomHelpColour
|
|
iHudR = g_sMenuData.iHelpR
|
|
iHudG = g_sMenuData.iHelpG
|
|
iHudB = g_sMenuData.iHelpB
|
|
iHudA = g_sMenuData.iHelpA
|
|
ELSE
|
|
GET_HUD_COLOUR(HUD_COLOUR_INGAME_BG, iHudR, iHudG, iHudB, iHudA)
|
|
ENDIF
|
|
DRAW_SPRITE("CommonMenu", "Gradient_Bgd", CUSTOM_MENU_X+(fCustomWidth*0.5), fFinalPanelY+(((GET_RENDERED_CHARACTER_HEIGHT(CUSTOM_MENU_TEXT_SCALE_Y)*iRow)+(CUSTOM_MENU_PIXEL_HEIGHT*13)+CUSTOM_MENU_PIXEL_HEIGHT*5*(iRow-1))*0.5)-(CUSTOM_MENU_PIXEL_HEIGHT), fCustomWidth, ((GET_RENDERED_CHARACTER_HEIGHT(CUSTOM_MENU_TEXT_SCALE_Y)*iRow)+(CUSTOM_MENU_PIXEL_HEIGHT*13)+CUSTOM_MENU_PIXEL_HEIGHT*5*(iRow-1)), 0.0, iHudR, iHudG, iHudB, iHudA)
|
|
|
|
// Add text
|
|
SETUP_MENU_ITEM_MESSAGE_TEXT(fTempWidth)
|
|
BEGIN_TEXT_COMMAND_DISPLAY_TEXT(g_sMenuData.tl23DescExtra)
|
|
END_TEXT_COMMAND_DISPLAY_TEXT(fTempWidth, fFinalPanelY+CUSTOM_MENU_TEXT_INDENT_Y)
|
|
ENDIF
|
|
|
|
#IF USE_TU_CHANGES
|
|
|
|
//////////////////////////////////////////////////////////////////////////////////////////
|
|
/// DISCOUNT MESSAGE BOX
|
|
///
|
|
IF GET_HASH_KEY(g_sMenuData_TU.tl15Discount) != 0
|
|
AND g_sMenuData_TU.iDiscountClearTimer != -1
|
|
|
|
// Add box offset
|
|
fFinalPanelY += (CUSTOM_MENU_MESSAGE_OFFSET_Y*2)
|
|
|
|
fTempWidth = CUSTOM_MENU_X+CUSTOM_MENU_TEXT_INDENT_X
|
|
IF g_sMenuData_TU.eDiscountIcon != MENU_ICON_DUMMY
|
|
GET_MENU_ICON_SCREEN_RESOLUTION(g_sMenuData_TU.eDiscountIcon, TRUE, TRUE, fWidth, fHeight, bUseActualRes)
|
|
fTempWidth = CUSTOM_MENU_X+(fWidth)+(CUSTOM_MENU_PIXEL_WIDTH*4)-(CUSTOM_MENU_PIXEL_WIDTH*1)
|
|
ENDIF
|
|
|
|
// Draw Discount box
|
|
SETUP_MENU_ITEM_MESSAGE_TEXT(fTempWidth)
|
|
BEGIN_TEXT_COMMAND_GET_NUMBER_OF_LINES_FOR_STRING(g_sMenuData_TU.tl15Discount)
|
|
iIntParam = 0
|
|
iFloatParam = 0
|
|
iTextParam = 0
|
|
REPEAT g_sMenuData_TU.iDiscountTotalParams i
|
|
IF g_sMenuData_TU.eDiscountComps[i] = MENU_TEXT_COMP_INT
|
|
ADD_TEXT_COMPONENT_INTEGER(g_sMenuData_TU.iDiscountInt[iIntParam])
|
|
iIntParam++
|
|
ELIF g_sMenuData_TU.eDiscountComps[i] = MENU_TEXT_COMP_FLOAT
|
|
ADD_TEXT_COMPONENT_FLOAT(g_sMenuData_TU.fDiscountFloat[iFloatParam], g_sMenuData_TU.iDiscountFloatDP[iFloatParam])
|
|
iFloatParam++
|
|
ELIF g_sMenuData_TU.eDiscountComps[i] = MENU_TEXT_COMP_TEXT
|
|
ADD_TEXT_COMPONENT_SUBSTRING_TEXT_LABEL(g_sMenuData_TU.tl15DiscountText[iTextParam])
|
|
iTextParam++
|
|
ELIF g_sMenuData_TU.eDiscountComps[i] = MENU_TEXT_COMP_PLAYER_NAME
|
|
ADD_TEXT_COMPONENT_SUBSTRING_PLAYER_NAME(g_sMenuData_TU.tl15DiscountText[iTextParam])
|
|
iTextParam++
|
|
ELIF g_sMenuData_TU.eDiscountComps[i] = MENU_TEXT_COMP_RADIO_STATION
|
|
ADD_TEXT_COMPONENT_SUBSTRING_TEXT_LABEL(g_sMenuData_TU.tl15DiscountText[iTextParam])
|
|
iTextParam++
|
|
ELIF g_sMenuData_TU.eDiscountComps[i] = MENU_TEXT_COMP_LITERAL
|
|
ADD_TEXT_COMPONENT_SUBSTRING_PLAYER_NAME(g_sMenuData_TU.tl15DiscountText[iTextParam])
|
|
iTextParam++
|
|
ELIF g_sMenuData_TU.eDiscountComps[i] = MENU_TEXT_COMP_CONDENSED_LITERAL
|
|
ADD_TEXT_COMPONENT_SUBSTRING_PLAYER_NAME(g_sMenuData_TU.tl15DiscountText[iTextParam])
|
|
iTextParam++
|
|
ELIF g_sMenuData_TU.eDiscountComps[i] = MENU_TEXT_COMP_VEHICLE_NAME
|
|
ADD_TEXT_COMPONENT_SUBSTRING_TEXT_LABEL(g_sMenuData_TU.tl15DiscountText[iTextParam])
|
|
iTextParam++
|
|
ENDIF
|
|
ENDREPEAT
|
|
iRow = END_TEXT_COMMAND_GET_NUMBER_OF_LINES_FOR_STRING(fTempWidth, fFinalPanelY+CUSTOM_MENU_TEXT_INDENT_Y)
|
|
|
|
// [TART UP]
|
|
//GET_HUD_COLOUR(HUD_COLOUR_WHITE, iHudR, iHudG, iHudB, iHudA)
|
|
GET_HUD_COLOUR(HUD_COLOUR_BLACK, iHudR, iHudG, iHudB, iHudA)
|
|
DRAW_RECT_FROM_CORNER(CUSTOM_MENU_X, fFinalPanelY-CUSTOM_MENU_MESSAGE_OFFSET_Y, fCustomWidth, CUSTOM_MENU_MESSAGE_OFFSET_Y, iHudR, iHudG, iHudB, iHudA)
|
|
|
|
IF g_sMenuData.bUseCustomHelpColour
|
|
iHudR = g_sMenuData.iHelpR
|
|
iHudG = g_sMenuData.iHelpG
|
|
iHudB = g_sMenuData.iHelpB
|
|
iHudA = g_sMenuData.iHelpA
|
|
ELSE
|
|
GET_HUD_COLOUR(HUD_COLOUR_INGAME_BG, iHudR, iHudG, iHudB, iHudA)
|
|
ENDIF
|
|
// [TART UP]
|
|
//DRAW_RECT_FROM_CORNER(CUSTOM_MENU_X, fFinalPanelY, fCustomWidth, ((GET_RENDERED_CHARACTER_HEIGHT(CUSTOM_MENU_TEXT_SCALE_Y)*iRow)+(CUSTOM_MENU_PIXEL_HEIGHT*13)+CUSTOM_MENU_PIXEL_HEIGHT*5*(iRow-1)), iHudR, iHudG, iHudB, iHudA)
|
|
DRAW_SPRITE("CommonMenu", "Gradient_Bgd", CUSTOM_MENU_X+(fCustomWidth*0.5), fFinalPanelY+(((GET_RENDERED_CHARACTER_HEIGHT(CUSTOM_MENU_TEXT_SCALE_Y)*iRow)+(CUSTOM_MENU_PIXEL_HEIGHT*13)+CUSTOM_MENU_PIXEL_HEIGHT*5*(iRow-1))*0.5)-(CUSTOM_MENU_PIXEL_HEIGHT), fCustomWidth, ((GET_RENDERED_CHARACTER_HEIGHT(CUSTOM_MENU_TEXT_SCALE_Y)*iRow)+(CUSTOM_MENU_PIXEL_HEIGHT*13)+CUSTOM_MENU_PIXEL_HEIGHT*5*(iRow-1)), 0.0, iHudR, iHudG, iHudB, iHudA)
|
|
/*fWidth = (fCustomWidth / 6)
|
|
fHeight = ((GET_RENDERED_CHARACTER_HEIGHT(CUSTOM_MENU_TEXT_SCALE_Y)*iRow)+(CUSTOM_MENU_PIXEL_HEIGHT*13)+CUSTOM_MENU_PIXEL_HEIGHT*5*(iRow-1))
|
|
DRAW_SPRITE("CommonMenu", "Gradient_Bgd", CUSTOM_MENU_X+((fWidth*0.5)+(fWidth*0)), fFinalPanelY+(fHeight*0.5), fWidth, fHeight, 0.0, iHudR, iHudG, iHudB, iHudA)
|
|
DRAW_SPRITE("CommonMenu", "Gradient_Bgd", CUSTOM_MENU_X+((fWidth*0.5)+(fWidth*1)), fFinalPanelY+(fHeight*0.5), fWidth, fHeight, 0.0, iHudR, iHudG, iHudB, iHudA)
|
|
DRAW_SPRITE("CommonMenu", "Gradient_Bgd", CUSTOM_MENU_X+((fWidth*0.5)+(fWidth*2)), fFinalPanelY+(fHeight*0.5), fWidth, fHeight, 0.0, iHudR, iHudG, iHudB, iHudA)
|
|
DRAW_SPRITE("CommonMenu", "Gradient_Bgd", CUSTOM_MENU_X+((fWidth*0.5)+(fWidth*3)), fFinalPanelY+(fHeight*0.5), fWidth, fHeight, 0.0, iHudR, iHudG, iHudB, iHudA)
|
|
DRAW_SPRITE("CommonMenu", "Gradient_Bgd", CUSTOM_MENU_X+((fWidth*0.5)+(fWidth*4)), fFinalPanelY+(fHeight*0.5), fWidth, fHeight, 0.0, iHudR, iHudG, iHudB, iHudA)
|
|
DRAW_SPRITE("CommonMenu", "Gradient_Bgd", CUSTOM_MENU_X+((fWidth*0.5)+(fWidth*5)), fFinalPanelY+(fHeight*0.5), fWidth, fHeight, 0.0, iHudR, iHudG, iHudB, iHudA)*/
|
|
|
|
// Add text
|
|
SETUP_MENU_ITEM_MESSAGE_TEXT(fTempWidth)
|
|
BEGIN_TEXT_COMMAND_DISPLAY_TEXT(g_sMenuData_TU.tl15Discount)
|
|
iIntParam = 0
|
|
iFloatParam = 0
|
|
iTextParam = 0
|
|
REPEAT g_sMenuData_TU.iDiscountTotalParams i
|
|
IF g_sMenuData_TU.eDiscountComps[i] = MENU_TEXT_COMP_INT
|
|
ADD_TEXT_COMPONENT_INTEGER(g_sMenuData_TU.iDiscountInt[iIntParam])
|
|
iIntParam++
|
|
ELIF g_sMenuData_TU.eDiscountComps[i] = MENU_TEXT_COMP_FLOAT
|
|
ADD_TEXT_COMPONENT_FLOAT(g_sMenuData_TU.fDiscountFloat[iFloatParam], g_sMenuData_TU.iDiscountFloatDP[iFloatParam])
|
|
iFloatParam++
|
|
ELIF g_sMenuData_TU.eDiscountComps[i] = MENU_TEXT_COMP_TEXT
|
|
ADD_TEXT_COMPONENT_SUBSTRING_TEXT_LABEL(g_sMenuData_TU.tl15DiscountText[iTextParam])
|
|
iTextParam++
|
|
ELIF g_sMenuData_TU.eDiscountComps[i] = MENU_TEXT_COMP_VEHICLE_NAME
|
|
ADD_TEXT_COMPONENT_SUBSTRING_TEXT_LABEL(g_sMenuData_TU.tl15DiscountText[iTextParam])
|
|
iTextParam++
|
|
ELIF g_sMenuData_TU.eDiscountComps[i] = MENU_TEXT_COMP_PLAYER_NAME
|
|
ADD_TEXT_COMPONENT_SUBSTRING_PLAYER_NAME(g_sMenuData_TU.tl15DiscountText[iTextParam])
|
|
iTextParam++
|
|
ELIF g_sMenuData_TU.eDiscountComps[i] = MENU_TEXT_COMP_RADIO_STATION
|
|
ADD_TEXT_COMPONENT_SUBSTRING_TEXT_LABEL(g_sMenuData_TU.tl15DiscountText[iTextParam])
|
|
iTextParam++
|
|
ELIF g_sMenuData_TU.eDiscountComps[i] = MENU_TEXT_COMP_LITERAL
|
|
ADD_TEXT_COMPONENT_SUBSTRING_PLAYER_NAME(g_sMenuData_TU.tl15DiscountText[iTextParam])
|
|
iTextParam++
|
|
ELIF g_sMenuData_TU.eDiscountComps[i] = MENU_TEXT_COMP_CONDENSED_LITERAL
|
|
ADD_TEXT_COMPONENT_SUBSTRING_PLAYER_NAME(g_sMenuData_TU.tl15DiscountText[iTextParam])
|
|
iTextParam++
|
|
ENDIF
|
|
ENDREPEAT
|
|
END_TEXT_COMMAND_DISPLAY_TEXT(fTempWidth, fFinalPanelY+CUSTOM_MENU_TEXT_INDENT_Y)
|
|
|
|
IF g_sMenuData_TU.eDiscountIcon != MENU_ICON_DUMMY
|
|
GET_MENU_ICON_SCREEN_RESOLUTION(g_sMenuData_TU.eDiscountIcon, TRUE, TRUE, fWidth, fHeight, bUseActualRes)
|
|
GET_MENU_ICON_TEXTURE_RGB(g_sMenuData_TU.eDiscountIcon, TRUE, iIconR, iIconG, iIconB, iIconA)
|
|
DRAW_SPRITE(GET_MENU_ICON_TXD(g_sMenuData_TU.eDiscountIcon), GET_MENU_ICON_TEXTURE(g_sMenuData_TU.eDiscountIcon, TRUE), CUSTOM_MENU_X+(fWidth*0.5)+(CUSTOM_MENU_PIXEL_WIDTH*2), fFinalPanelY+(fHeight*0.5)-(CUSTOM_MENU_PIXEL_HEIGHT*4), fWidth, fHeight, 0.0, iIconR, iIconG, iIconB, iIconA)
|
|
ENDIF
|
|
|
|
|
|
fFinalPanelY += ((GET_RENDERED_CHARACTER_HEIGHT(CUSTOM_MENU_TEXT_SCALE_Y)*iRow)+(CUSTOM_MENU_PIXEL_HEIGHT*13)+(CUSTOM_MENU_PIXEL_HEIGHT*5*(iRow-1)))
|
|
|
|
// Clear Discount when time is up
|
|
IF g_sMenuData_TU.iDiscountClearTimer > 0
|
|
IF (GET_GAME_TIMER()-g_sMenuData_TU.iDiscountStartTimer) > g_sMenuData_TU.iDiscountClearTimer
|
|
g_sMenuData_TU.tl15Discount = ""
|
|
g_sMenuData_TU.iDiscountClearTimer = -1
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
#ENDIF
|
|
|
|
//////////////////////////////////////////////////////////////////////////////////////////
|
|
/// HELP KEYS
|
|
///
|
|
DRAW_MENU_HELP_SCALEFORM(iScreenX, iMenuType, iTimer, FALSE, FALSE, FALSE, bPushSubtitlesUp)
|
|
|
|
SET_SCRIPT_GFX_ALIGN(UI_ALIGN_LEFT, UI_ALIGN_TOP)
|
|
SET_SCRIPT_GFX_ALIGN_PARAMS(-0.05, -0.05, 0.0, 0.0)
|
|
|
|
ENDIF
|
|
|
|
|
|
//////////////////////////////////////////////////////////////////////////////////////////
|
|
/// MENU ITEMS
|
|
///
|
|
IF iPass = 1
|
|
OR NOT g_sMenuData.bSetupComplete
|
|
|
|
iTextCount = 0
|
|
iPlayerNameCount = 0
|
|
iIntCount = 0
|
|
iFloatCount = 0
|
|
iIconCount = 0
|
|
iDisplayRow = 0
|
|
iTotalRows = 0
|
|
iTotalSelectableRows = 0
|
|
iCurrentDisplaySpacer = 0
|
|
iSpacerCount = 0
|
|
|
|
INT iRowTo = g_sMenuData.iCurrentRow
|
|
IF g_sMenuData.bDisplayRowsDefined
|
|
iRowTo = g_sMenuData.iSetupTotalDisplayRows-1
|
|
ENDIF
|
|
|
|
FLOAT fHeightTrack = 0.0
|
|
FLOAT fSelectectedHeightTrack = 0.0
|
|
|
|
INT iColumnShift
|
|
|
|
FOR iRowLoop = 0 TO iRowTo
|
|
|
|
fMenuItemBarHeight = CUSTOM_MENU_ITEM_BAR_H
|
|
IF g_sMenuData.fRowHeight[iRow] != 0.0
|
|
fMenuItemBarHeight = g_sMenuData.fRowHeight[iRow]
|
|
ENDIF
|
|
|
|
// Using display row lookup and item offsets?
|
|
IF g_sMenuData.bDisplayRowsDefined
|
|
iRow = g_sMenuData.iDisplayRow[iRowLoop]
|
|
ELSE
|
|
iRow = iRowLoop
|
|
ENDIF
|
|
|
|
iCurrentDisplaySpacer = iSpacerCount
|
|
|
|
bDisplay = FALSE
|
|
IF iRow >= g_sMenuData.iTopItem
|
|
AND iDisplayRow < g_sMenuData.iMenuRows
|
|
bDisplay = TRUE
|
|
|
|
IF (g_sMenuData.iCurrentItem = iRow)
|
|
fSelectectedHeightTrack = fHeightTrack
|
|
ENDIF
|
|
|
|
IF g_sMenuData.bMenuRowHasSpacer[iRow]
|
|
iCurrentDisplaySpacer++
|
|
ENDIF
|
|
|
|
// Only update the Y if we are displaying this row
|
|
fTextY = fBodyStartY+(fHeightTrack)+(CUSTOM_MENU_SPACER_H*iCurrentDisplaySpacer)+CUSTOM_MENU_TEXT_INDENT_Y
|
|
ENDIF
|
|
|
|
// Track the Y pos
|
|
g_sMenuData.fMenuItemScreenY[iRow] = fTextY
|
|
|
|
fTextX = CUSTOM_MENU_X+CUSTOM_MENU_TEXT_INDENT_X
|
|
bItemAdded = FALSE
|
|
bSelected = (g_sMenuData.iCurrentItem = iRow)
|
|
|
|
// Add the highlight bar?
|
|
IF bSelected AND iPass = 1 AND bDisplay
|
|
|
|
INT iR = 255
|
|
INT iG = 255
|
|
INT iB = 255
|
|
INT iA = 255
|
|
IF g_sMenuData.bUseCustomSelectionBarColour
|
|
GET_HUD_COLOUR(g_sMenuData.eSelectionBarColour, iR, iG, iB, iA)
|
|
ELSE
|
|
GET_HUD_COLOUR(HUD_COLOUR_WHITE, iR, iG, iB, iA)
|
|
ENDIF
|
|
// [TART UP]
|
|
//DRAW_RECT_FROM_CORNER(CUSTOM_MENU_X, fBodyStartY+(fSelectectedHeightTrack)+(CUSTOM_MENU_SPACER_H*iCurrentDisplaySpacer), fCustomWidth, fMenuItemBarHeight, iR, iG, iB, iA) // White highlight
|
|
DRAW_SPRITE("CommonMenu", "Gradient_Nav", CUSTOM_MENU_X+(fCustomWidth*0.5), fBodyStartY+(fSelectectedHeightTrack)+(CUSTOM_MENU_SPACER_H*iCurrentDisplaySpacer)+(fMenuItemBarHeight*0.5), fCustomWidth, fMenuItemBarHeight, 0.0, iR, iG, iB, iA)
|
|
g_sMenuData.fCurrentItemScreenY = fTextY
|
|
ENDIF
|
|
|
|
REPEAT g_sMenuData.iMenuColumns iItem
|
|
|
|
IF IS_BIT_SET(g_sMenuData.iItemBitset[iRow], iItem)
|
|
OR g_sMenuData.eItemLayout[iItem] = MENU_ITEM_TAB
|
|
|
|
IF g_sMenuData.bDisplayRowsDefined
|
|
iTextCount = g_sMenuData.iStoredTextCount[(iDisplayRow*g_sMenuData.iMenuColumns)+iItem]
|
|
iIntCount = g_sMenuData.iStoredIntCount[(iDisplayRow*g_sMenuData.iMenuColumns)+iItem]
|
|
iFloatCount = g_sMenuData.iStoredFloatCount[(iDisplayRow*g_sMenuData.iMenuColumns)+iItem]
|
|
iIconCount = g_sMenuData.iStoredIconCount[(iDisplayRow*g_sMenuData.iMenuColumns)+iItem]
|
|
iPlayerNameCount = g_sMenuData.iStoredPlayerNameCount[(iDisplayRow*g_sMenuData.iMenuColumns)+iItem]
|
|
ELSE
|
|
g_sMenuData.iStoredTextCount[(iDisplayRow*g_sMenuData.iMenuColumns)+iItem] = iTextCount
|
|
g_sMenuData.iStoredIntCount[(iDisplayRow*g_sMenuData.iMenuColumns)+iItem] = iIntCount
|
|
g_sMenuData.iStoredFloatCount[(iDisplayRow*g_sMenuData.iMenuColumns)+iItem] = iFloatCount
|
|
g_sMenuData.iStoredIconCount[(iDisplayRow*g_sMenuData.iMenuColumns)+iItem] = iIconCount
|
|
g_sMenuData.iStoredPlayerNameCount[(iDisplayRow*g_sMenuData.iMenuColumns)+iItem] = iPlayerNameCount
|
|
ENDIF
|
|
|
|
INT iArrayPos = 0
|
|
bSetCarColour = FALSE
|
|
IF g_sMenuData.iCarColour[0] != -1
|
|
IF ((iRow*MAX_MENU_COLUMNS)+iItem) = g_sMenuData.iCarColourItem[0]
|
|
bSetCarColour = TRUE
|
|
iArrayPos = 0
|
|
ENDIF
|
|
ENDIF
|
|
IF g_sMenuData.iCarColour[1] != -1
|
|
IF ((iRow*MAX_MENU_COLUMNS)+iItem) = g_sMenuData.iCarColourItem[1]
|
|
bSetCarColour = TRUE
|
|
iArrayPos = 1
|
|
ENDIF
|
|
ENDIF
|
|
|
|
// Use offset explicitly set by the calling script
|
|
IF g_sMenuData.fColumnXOffset[iItem] != -1
|
|
fTextX = CUSTOM_MENU_X+CUSTOM_MENU_TEXT_INDENT_X+g_sMenuData.fColumnXOffset[iItem]
|
|
ENDIF
|
|
|
|
// Work out the width of this column for text justification calculations
|
|
IF iItem < MAX_MENU_COLUMNS-1
|
|
AND g_sMenuData.fColumnXOffset[iItem+1] != -1.0
|
|
AND fTextX < g_sMenuData.fColumnXOffset[iItem+1]
|
|
fTempColumnWidth = (g_sMenuData.fColumnXOffset[iItem+1]-fTextX)
|
|
ELSE
|
|
fTempColumnWidth = (CUSTOM_MENU_X+CUSTOM_MENU_W-CUSTOM_MENU_TEXT_INDENT_X-fTextX)
|
|
ENDIF
|
|
|
|
IF g_sMenuData.bItemToggleable[iItem]
|
|
AND g_sMenuData.bDisplayCurrentItemToggles
|
|
AND bSelected
|
|
bAddToggleItems = TRUE
|
|
ELSE
|
|
bAddToggleItems = FALSE
|
|
ENDIF
|
|
|
|
// Add the items
|
|
SWITCH g_sMenuData.eItemLayout[iItem]
|
|
CASE MENU_ITEM_DUMMY
|
|
// Item not required
|
|
BREAK
|
|
CASE MENU_ITEM_TEXT
|
|
iThisTextItem = iTextCount
|
|
|
|
IF bDisplay
|
|
|
|
// Work out width of this text item
|
|
IF NOT g_sMenuData.bDisplayRowsDefined
|
|
fTempTextWidth = 0
|
|
fTempIconWidth = 0
|
|
iTempTextCount = 0
|
|
iTempIntCount = 0
|
|
iTempFloatCount = 0
|
|
iTempIconCount = 0
|
|
iTempPlayerNameCount = 0
|
|
IF GET_HASH_KEY(g_sMenuData.tl15Item[iThisTextItem]) != 0
|
|
bCondensed = FALSE
|
|
bPlayerName = FALSE
|
|
REPEAT MAX_STORED_TEXT_COMPS i
|
|
IF g_sMenuData.eTextItemComps[iThisTextItem][i] = MENU_TEXT_COMP_PLAYER_NAME
|
|
OR g_sMenuData.eTextItemComps[iThisTextItem][i] = MENU_TEXT_COMP_VEHICLE_NAME // we may want to change this to condensed, will leave until it gets bugged.
|
|
bPlayerName = TRUE
|
|
ELIF g_sMenuData.eTextItemComps[iThisTextItem][i] = MENU_TEXT_COMP_CONDENSED_LITERAL
|
|
bCondensed = TRUE
|
|
ENDIF
|
|
ENDREPEAT
|
|
|
|
IF g_sMenuData.bForceCondensedFont[iThisTextItem]
|
|
bPlayerName = TRUE
|
|
ENDIF
|
|
|
|
SETUP_MENU_ITEM_TEXT(bSelected, g_sMenuData.bIsSelectable[iThisTextItem], g_sMenuData.bIsDefault[iThisTextItem], bSetCarColour, iArrayPos, bPlayerName, bCondensed)
|
|
BEGIN_TEXT_COMMAND_GET_SCREEN_WIDTH_OF_DISPLAY_TEXT(g_sMenuData.tl15Item[iThisTextItem])
|
|
ENDIF
|
|
REPEAT MAX_STORED_TEXT_COMPS i
|
|
IF g_sMenuData.eTextItemComps[iThisTextItem][i] = MENU_TEXT_COMP_TEXT
|
|
iTempTextCount++
|
|
IF GET_HASH_KEY(g_sMenuData.tl15Item[iThisTextItem]) != 0
|
|
ADD_TEXT_COMPONENT_SUBSTRING_TEXT_LABEL(g_sMenuData.tl15Item[iThisTextItem+iTempTextCount])
|
|
ENDIF
|
|
ELIF g_sMenuData.eTextItemComps[iThisTextItem][i] = MENU_TEXT_COMP_VEHICLE_NAME
|
|
iTempTextCount++
|
|
IF GET_HASH_KEY(g_sMenuData.tl15Item[iThisTextItem]) != 0
|
|
ADD_TEXT_COMPONENT_SUBSTRING_TEXT_LABEL(g_sMenuData.tl15Item[iThisTextItem+iTempTextCount])
|
|
ENDIF
|
|
ELIF g_sMenuData.eTextItemComps[iThisTextItem][i] = MENU_TEXT_COMP_PLAYER_NAME
|
|
IF GET_HASH_KEY(g_sMenuData.tl15Item[iThisTextItem]) != 0
|
|
ADD_TEXT_COMPONENT_SUBSTRING_PLAYER_NAME(g_TUMenuGlobals_tlPlayerNameItem[iPlayerNameCount+iTempPlayerNameCount])
|
|
ENDIF
|
|
iTempPlayerNameCount++
|
|
ELIF g_sMenuData.eTextItemComps[iThisTextItem][i] = MENU_TEXT_COMP_RADIO_STATION
|
|
IF GET_HASH_KEY(g_sMenuData.tl15Item[iThisTextItem]) != 0
|
|
ADD_TEXT_COMPONENT_SUBSTRING_TEXT_LABEL(g_TUMenuGlobals_tlPlayerNameItem[iPlayerNameCount+iTempPlayerNameCount])
|
|
ENDIF
|
|
iTempPlayerNameCount++
|
|
ELIF g_sMenuData.eTextItemComps[iThisTextItem][i] = MENU_TEXT_COMP_LITERAL
|
|
IF GET_HASH_KEY(g_sMenuData.tl15Item[iThisTextItem]) != 0
|
|
ADD_TEXT_COMPONENT_SUBSTRING_PLAYER_NAME(g_TUMenuGlobals_tlPlayerNameItem[iPlayerNameCount+iTempPlayerNameCount])
|
|
ENDIF
|
|
iTempPlayerNameCount++
|
|
ELIF g_sMenuData.eTextItemComps[iThisTextItem][i] = MENU_TEXT_COMP_CONDENSED_LITERAL
|
|
IF GET_HASH_KEY(g_sMenuData.tl15Item[iThisTextItem]) != 0
|
|
ADD_TEXT_COMPONENT_SUBSTRING_PLAYER_NAME(g_TUMenuGlobals_tlPlayerNameItem[iPlayerNameCount+iTempPlayerNameCount])
|
|
ENDIF
|
|
iTempPlayerNameCount++
|
|
ELIF g_sMenuData.eTextItemComps[iThisTextItem][i] = MENU_TEXT_COMP_INT
|
|
IF GET_HASH_KEY(g_sMenuData.tl15Item[iThisTextItem]) != 0
|
|
ADD_TEXT_COMPONENT_INTEGER(g_sMenuData.iItem[iIntCount+iTempIntCount])
|
|
ENDIF
|
|
iTempIntCount++
|
|
ELIF g_sMenuData.eTextItemComps[iThisTextItem][i] = MENU_TEXT_COMP_FLOAT
|
|
IF GET_HASH_KEY(g_sMenuData.tl15Item[iThisTextItem]) != 0
|
|
ADD_TEXT_COMPONENT_FLOAT(g_sMenuData.fItem[iFloatCount+iTempFloatCount], g_sMenuData.iFloatDP[iFloatCount+iTempFloatCount])
|
|
ENDIF
|
|
iTempFloatCount++
|
|
ELIF g_sMenuData.eTextItemComps[iThisTextItem][i] = MENU_TEXT_COMP_ICON
|
|
iTempIconCount++
|
|
ENDIF
|
|
ENDREPEAT
|
|
IF GET_HASH_KEY(g_sMenuData.tl15Item[iThisTextItem]) != 0
|
|
fTempTextWidth = END_TEXT_COMMAND_GET_SCREEN_WIDTH_OF_DISPLAY_TEXT(TRUE)
|
|
ENDIF
|
|
|
|
IF iTempIconCount > 0
|
|
REPEAT iTempIconCount i
|
|
IF GET_MENU_ICON_SCREEN_RESOLUTION(g_sMenuData.eIconItem[iIconCount+i], bSelected, FALSE, fWidth, fHeight, bUseActualRes)
|
|
fTempIconWidth += (fWidth)
|
|
IF i > 0
|
|
fTempIconWidth -= (CUSTOM_MENU_PIXEL_WIDTH*4)
|
|
ENDIF
|
|
IF (g_sMenuData.eIconItem[iIconCount+i] = MENU_ICON_LEFT_STAR)
|
|
OR (g_sMenuData.eIconItem[iIconCount+i] = MENU_ICON_DISCOUNT)
|
|
OR (g_sMenuData.eIconItem[iIconCount+i] = MENU_ICON_CHIPS)
|
|
fTempIconWidth -= (CUSTOM_MENU_PIXEL_WIDTH*5)
|
|
ENDIF
|
|
ENDIF
|
|
ENDREPEAT
|
|
ENDIF
|
|
|
|
// Use this to track x offset
|
|
fTempWidth = 0
|
|
|
|
// Offset for text justification
|
|
IF g_sMenuData.eJustification[iItem] = FONT_RIGHT
|
|
fTempWidth += (fTempColumnWidth-(fTempTextWidth+fTempIconWidth))+(CUSTOM_MENU_PIXEL_WIDTH*1)
|
|
ELIF g_sMenuData.eJustification[iItem] = FONT_CENTRE
|
|
fTempWidth += (((fTempColumnWidth-fTextX)*0.5) - ((fTempTextWidth+fTempIconWidth)*0.5))
|
|
ENDIF
|
|
|
|
g_sMenuData.fStoredTempWidth[(iDisplayRow*g_sMenuData.iMenuColumns)+iItem] = fTempWidth
|
|
g_sMenuData.fStoredTempTextWidth[(iDisplayRow*g_sMenuData.iMenuColumns)+iItem] = fTempTextWidth
|
|
g_sMenuData.fStoredTempIconWidth[(iDisplayRow*g_sMenuData.iMenuColumns)+iItem] = fTempIconWidth
|
|
|
|
// Fix up locations for previous column
|
|
IF g_sMenuData.eJustification[iItem] = FONT_RIGHT
|
|
FOR iColumnShift = iItem-1 TO 0 STEP -1
|
|
IF g_sMenuData.eJustification[iColumnShift] = FONT_RIGHT
|
|
g_sMenuData.fStoredTempWidth[(iDisplayRow*g_sMenuData.iMenuColumns)+iColumnShift] -= g_sMenuData.fColumnWidth[iItem]// g_sMenuData.fStoredTempWidth[(iDisplayRow*g_sMenuData.iMenuColumns)+iItem]
|
|
ENDIF
|
|
ENDFOR
|
|
ENDIF
|
|
ELSE
|
|
fTempWidth = g_sMenuData.fStoredTempWidth[(iDisplayRow*g_sMenuData.iMenuColumns)+iItem]
|
|
fTempTextWidth = g_sMenuData.fStoredTempTextWidth[(iDisplayRow*g_sMenuData.iMenuColumns)+iItem]
|
|
fTempIconWidth = g_sMenuData.fStoredTempIconWidth[(iDisplayRow*g_sMenuData.iMenuColumns)+iItem]
|
|
ENDIF
|
|
|
|
// Offset for toggle item
|
|
IF bAddToggleItems
|
|
IF GET_MENU_ICON_SCREEN_RESOLUTION(MENU_ICON_ARROW_L, TRUE, FALSE, fWidth, fHeight, bUseActualRes)
|
|
|
|
IF g_sMenuData.eJustification[iItem] = FONT_RIGHT
|
|
fTempWidth -= (fWidth*2)
|
|
ENDIF
|
|
|
|
fTempToggleWidth = (fWidth*0.5)
|
|
IF GET_MENU_ICON_SCREEN_RESOLUTION(MENU_ICON_ARROW_L, TRUE, TRUE, fWidth, fHeight, bUseActualRes)
|
|
GET_MENU_ICON_TEXTURE_RGB(MENU_ICON_ARROW_L, TRUE, iIconR, iIconG, iIconB, iIconA)
|
|
IF iPass = 1
|
|
DRAW_SPRITE(GET_MENU_ICON_TXD(MENU_ICON_ARROW_L), GET_MENU_ICON_TEXTURE(MENU_ICON_ARROW_L, TRUE), fTextX+fTempWidth+fTempToggleWidth, fTextY-CUSTOM_MENU_TEXT_INDENT_Y+(fMenuItemBarHeight*0.5), fWidth, fHeight, 0.0, iIconR, iIconG, iIconB, iIconA)
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
|
|
IF GET_MENU_ICON_SCREEN_RESOLUTION(MENU_ICON_ARROW_R, TRUE, FALSE, fWidth, fHeight, bUseActualRes)
|
|
|
|
fTempWidth += (fWidth)
|
|
|
|
fTempToggleWidth = (fWidth*0.5)
|
|
IF GET_MENU_ICON_SCREEN_RESOLUTION(MENU_ICON_ARROW_R, TRUE, TRUE, fWidth, fHeight, bUseActualRes)
|
|
GET_MENU_ICON_TEXTURE_RGB(MENU_ICON_ARROW_R, TRUE, iIconR, iIconG, iIconB, iIconA)
|
|
IF iPass = 1
|
|
DRAW_SPRITE(GET_MENU_ICON_TXD(MENU_ICON_ARROW_R), GET_MENU_ICON_TEXTURE(MENU_ICON_ARROW_R, TRUE), fTextX+fTempWidth+fTempToggleWidth+(fTempTextWidth+fTempIconWidth), fTextY-CUSTOM_MENU_TEXT_INDENT_Y+(fMenuItemBarHeight*0.5), fWidth, fHeight, 0.0, iIconR, iIconG, iIconB, iIconA)
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
|
|
// Display the menu item
|
|
iTempTextCount = 0
|
|
iTempIntCount = 0
|
|
iTempFloatCount = 0
|
|
iTempIconCount = 0
|
|
iTempPlayerNameCount = 0
|
|
|
|
eLastCompType = MENU_TEXT_COMP_DUMMY
|
|
IF GET_HASH_KEY(g_sMenuData.tl15Item[iThisTextItem]) != 0
|
|
AND iPass = 1
|
|
|
|
bCondensed = FALSE
|
|
bPlayerName = FALSE
|
|
REPEAT MAX_STORED_TEXT_COMPS i
|
|
IF g_sMenuData.eTextItemComps[iThisTextItem][i] = MENU_TEXT_COMP_PLAYER_NAME
|
|
OR g_sMenuData.eTextItemComps[iThisTextItem][i] = MENU_TEXT_COMP_VEHICLE_NAME
|
|
bPlayerName = TRUE
|
|
ELIF g_sMenuData.eTextItemComps[iThisTextItem][i] = MENU_TEXT_COMP_CONDENSED_LITERAL
|
|
bCondensed = TRUE
|
|
ENDIF
|
|
ENDREPEAT
|
|
|
|
IF g_sMenuData.bForceCondensedFont[iThisTextItem]
|
|
bPlayerName = TRUE
|
|
ENDIF
|
|
|
|
SETUP_MENU_ITEM_TEXT(bSelected, g_sMenuData.bIsSelectable[iThisTextItem], g_sMenuData.bIsDefault[iThisTextItem], bSetCarColour, 0, bPlayerName, bCondensed)
|
|
|
|
IF g_sMenuData.bUseCustomRowColour
|
|
AND g_sMenuData.iCustomRowColour = iRow
|
|
SETUP_MENU_CUSTOM_ITEM_TEXT_COLOUR(bSelected)
|
|
ENDIF
|
|
|
|
BEGIN_TEXT_COMMAND_DISPLAY_TEXT(g_sMenuData.tl15Item[iThisTextItem])
|
|
ENDIF
|
|
REPEAT MAX_STORED_TEXT_COMPS i
|
|
IF g_sMenuData.eTextItemComps[iThisTextItem][i] = MENU_TEXT_COMP_TEXT
|
|
iTempTextCount++
|
|
IF GET_HASH_KEY(g_sMenuData.tl15Item[iThisTextItem]) != 0
|
|
AND iPass = 1
|
|
ADD_TEXT_COMPONENT_SUBSTRING_TEXT_LABEL(g_sMenuData.tl15Item[iThisTextItem+iTempTextCount])
|
|
ENDIF
|
|
eLastCompType = MENU_TEXT_COMP_TEXT
|
|
ELIF g_sMenuData.eTextItemComps[iThisTextItem][i] = MENU_TEXT_COMP_VEHICLE_NAME
|
|
iTempTextCount++
|
|
IF GET_HASH_KEY(g_sMenuData.tl15Item[iThisTextItem]) != 0
|
|
AND iPass = 1
|
|
ADD_TEXT_COMPONENT_SUBSTRING_TEXT_LABEL(g_sMenuData.tl15Item[iThisTextItem+iTempTextCount])
|
|
ENDIF
|
|
eLastCompType = MENU_TEXT_COMP_VEHICLE_NAME
|
|
ELIF g_sMenuData.eTextItemComps[iThisTextItem][i] = MENU_TEXT_COMP_PLAYER_NAME
|
|
IF GET_HASH_KEY(g_sMenuData.tl15Item[iThisTextItem]) != 0
|
|
AND iPass = 1
|
|
ADD_TEXT_COMPONENT_SUBSTRING_PLAYER_NAME(g_TUMenuGlobals_tlPlayerNameItem[iPlayerNameCount+iTempPlayerNameCount])
|
|
ENDIF
|
|
iTempPlayerNameCount++
|
|
eLastCompType = MENU_TEXT_COMP_PLAYER_NAME
|
|
ELIF g_sMenuData.eTextItemComps[iThisTextItem][i] = MENU_TEXT_COMP_RADIO_STATION
|
|
IF GET_HASH_KEY(g_sMenuData.tl15Item[iThisTextItem]) != 0
|
|
AND iPass = 1
|
|
ADD_TEXT_COMPONENT_SUBSTRING_TEXT_LABEL(g_TUMenuGlobals_tlPlayerNameItem[iPlayerNameCount+iTempPlayerNameCount])
|
|
ENDIF
|
|
iTempPlayerNameCount++
|
|
eLastCompType = MENU_TEXT_COMP_RADIO_STATION
|
|
ELIF g_sMenuData.eTextItemComps[iThisTextItem][i] = MENU_TEXT_COMP_LITERAL
|
|
IF GET_HASH_KEY(g_sMenuData.tl15Item[iThisTextItem]) != 0
|
|
AND iPass = 1
|
|
ADD_TEXT_COMPONENT_SUBSTRING_PLAYER_NAME(g_TUMenuGlobals_tlPlayerNameItem[iPlayerNameCount+iTempPlayerNameCount])
|
|
ENDIF
|
|
iTempPlayerNameCount++
|
|
eLastCompType = MENU_TEXT_COMP_LITERAL
|
|
ELIF g_sMenuData.eTextItemComps[iThisTextItem][i] = MENU_TEXT_COMP_CONDENSED_LITERAL
|
|
IF GET_HASH_KEY(g_sMenuData.tl15Item[iThisTextItem]) != 0
|
|
AND iPass = 1
|
|
ADD_TEXT_COMPONENT_SUBSTRING_PLAYER_NAME(g_TUMenuGlobals_tlPlayerNameItem[iPlayerNameCount+iTempPlayerNameCount])
|
|
ENDIF
|
|
iTempPlayerNameCount++
|
|
eLastCompType = MENU_TEXT_COMP_CONDENSED_LITERAL
|
|
ELIF g_sMenuData.eTextItemComps[iThisTextItem][i] = MENU_TEXT_COMP_INT
|
|
IF GET_HASH_KEY(g_sMenuData.tl15Item[iThisTextItem]) != 0
|
|
AND iPass = 1
|
|
ADD_TEXT_COMPONENT_INTEGER(g_sMenuData.iItem[iIntCount+iTempIntCount])
|
|
ENDIF
|
|
iTempIntCount++
|
|
eLastCompType = MENU_TEXT_COMP_INT
|
|
ELIF g_sMenuData.eTextItemComps[iThisTextItem][i] = MENU_TEXT_COMP_FLOAT
|
|
IF GET_HASH_KEY(g_sMenuData.tl15Item[iThisTextItem]) != 0
|
|
AND iPass = 1
|
|
ADD_TEXT_COMPONENT_FLOAT(g_sMenuData.fItem[iFloatCount+iTempFloatCount], g_sMenuData.iFloatDP[iFloatCount+iTempFloatCount])
|
|
ENDIF
|
|
iTempFloatCount++
|
|
eLastCompType = MENU_TEXT_COMP_FLOAT
|
|
ELIF g_sMenuData.eTextItemComps[iThisTextItem][i] = MENU_TEXT_COMP_ICON
|
|
|
|
IF (g_sMenuData.eIconItem[iIconCount+iTempIconCount] = MENU_ICON_LEFT_STAR)
|
|
OR (g_sMenuData.eIconItem[iIconCount+iTempIconCount] = MENU_ICON_DISCOUNT)
|
|
OR (g_sMenuData.eIconItem[iIconCount+iTempIconCount] = MENU_ICON_CHIPS)
|
|
IF GET_MENU_ICON_SCREEN_RESOLUTION(g_sMenuData.eIconItem[iIconCount+iTempIconCount], bSelected, FALSE, fWidth, fHeight, bUseActualRes)
|
|
fTempWidth += (fWidth*0.5)
|
|
IF GET_MENU_ICON_SCREEN_RESOLUTION(g_sMenuData.eIconItem[iIconCount+iTempIconCount], bSelected, TRUE, fWidth, fHeight, bUseActualRes)
|
|
GET_MENU_ICON_TEXTURE_RGB(g_sMenuData.eIconItem[iIconCount+iTempIconCount], bSelected, iIconR, iIconG, iIconB, iIconA)
|
|
|
|
IF iPass = 1
|
|
IF g_sMenuData.eJustification[iItem] = FONT_RIGHT
|
|
DRAW_SPRITE(GET_MENU_ICON_TXD(g_sMenuData.eIconItem[iIconCount+iTempIconCount]), GET_MENU_ICON_TEXTURE(g_sMenuData.eIconItem[iIconCount+iTempIconCount], bSelected), fTextX+fTempWidth-(CUSTOM_MENU_PIXEL_WIDTH*8)+(CUSTOM_MENU_PIXEL_WIDTH*4), fTextY-CUSTOM_MENU_TEXT_INDENT_Y+(fMenuItemBarHeight*0.5), fWidth, fHeight, 0.0, iIconR, iIconG, iIconB, iIconA)
|
|
ELSE
|
|
DRAW_SPRITE(GET_MENU_ICON_TXD(g_sMenuData.eIconItem[iIconCount+iTempIconCount]), GET_MENU_ICON_TEXTURE(g_sMenuData.eIconItem[iIconCount+iTempIconCount], bSelected), fTextX+fTempWidth-(CUSTOM_MENU_PIXEL_WIDTH*8), fTextY-CUSTOM_MENU_TEXT_INDENT_Y+(fMenuItemBarHeight*0.5), fWidth, fHeight, 0.0, iIconR, iIconG, iIconB, iIconA)
|
|
ENDIF
|
|
ENDIF
|
|
|
|
fTempWidth += (CUSTOM_MENU_PIXEL_WIDTH*3)
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
iTempIconCount++
|
|
eLastCompType = MENU_TEXT_COMP_ICON
|
|
ENDIF
|
|
ENDREPEAT
|
|
IF GET_HASH_KEY(g_sMenuData.tl15Item[iThisTextItem]) != 0
|
|
AND iPass = 1
|
|
IF eLastCompType = MENU_TEXT_COMP_ICON
|
|
AND g_sMenuData.eJustification[iItem] = FONT_RIGHT
|
|
END_TEXT_COMMAND_DISPLAY_TEXT(fTextX+fTempWidth+(CUSTOM_MENU_PIXEL_WIDTH*7), fTextY)
|
|
ELSE
|
|
END_TEXT_COMMAND_DISPLAY_TEXT(fTextX+fTempWidth, fTextY)
|
|
|
|
IF IS_ROCKSTAR_DEV()
|
|
AND GET_NUMBER_OF_THREADS_RUNNING_THE_SCRIPT_WITH_THIS_HASH(HASH ("FM_MISSION_CREATOR")) > 0
|
|
IF iItem = 0
|
|
TEXT_LABEL_15 tl15b
|
|
FLOAT fColour
|
|
FLOAT fAlpha
|
|
FLOAT fOffsetForNum
|
|
FLOAT fOffsetY
|
|
FLOAT fOffsetX
|
|
|
|
IF g_sMenuData.bForceCondensedFont[iThisTextItem]
|
|
bPlayerName = TRUE
|
|
ENDIF
|
|
|
|
SETUP_MENU_ITEM_TEXT(FALSE, g_sMenuData.bIsSelectable[iThisTextItem], g_sMenuData.bIsDefault[iThisTextItem], bSetCarColour, 0, bPlayerName, bCondensed)
|
|
tl15b = "TEST_LABEL"
|
|
fColour = 0
|
|
fAlpha = 55
|
|
fOffsetForNum = 0.0185
|
|
fOffsetY = 0.004
|
|
fOffsetX = 0.02
|
|
|
|
SET_TEXT_SCALE(0.0000, CUSTOM_MENU_TEXT_SCALE_Y*0.7)
|
|
|
|
SET_TEXT_COLOUR(255, 255, 255, 150)
|
|
|
|
DRAW_RECT(fTextX-(fOffsetX*0.6), fTextY+(fOffsetForNum*0.75), 0.0175, 0.035, FLOOR(fColour), FLOOR(fColour), FLOOR(fColour), FLOOR(fAlpha))
|
|
BEGIN_TEXT_COMMAND_DISPLAY_TEXT(tl15b)
|
|
// Items hiddens aren't incrementing the count. Fix it: url:bugstar:7930348
|
|
ADD_TEXT_COMPONENT_INTEGER(g_sMenuData.iTopItem+iThisTextItemActual)
|
|
END_TEXT_COMMAND_DISPLAY_TEXT(fTextX-fOffsetX, fTextY+fOffsetY)
|
|
|
|
iThisTextItemActual++
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
|
|
IF iTempIconCount > 0
|
|
fTempWidth += (6 * CUSTOM_MENU_PIXEL_WIDTH)
|
|
REPEAT iTempIconCount i
|
|
IF (g_sMenuData.eIconItem[iIconCount+i] != MENU_ICON_LEFT_STAR)
|
|
AND (g_sMenuData.eIconItem[iIconCount+i] != MENU_ICON_DISCOUNT)
|
|
AND (g_sMenuData.eIconItem[iIconCount+i] != MENU_ICON_CHIPS)
|
|
IF GET_MENU_ICON_SCREEN_RESOLUTION(g_sMenuData.eIconItem[iIconCount+i], bSelected, FALSE, fWidth, fHeight, bUseActualRes)
|
|
fTempWidth += (fWidth*0.5)
|
|
IF iPass = 1
|
|
IF GET_MENU_ICON_SCREEN_RESOLUTION(g_sMenuData.eIconItem[iIconCount+i], bSelected, TRUE, fWidth, fHeight, bUseActualRes)
|
|
GET_MENU_ICON_TEXTURE_RGB(g_sMenuData.eIconItem[iIconCount+i], bSelected, iIconR, iIconG, iIconB, iIconA)
|
|
IF g_sMenuData.eIconItem[iIconCount+i] = MENU_ICON_DLC_IMAGE
|
|
DRAW_SPRITE(GET_MENU_ICON_TXD(g_sMenuData.eIconItem[iIconCount+i]), GET_MENU_ICON_TEXTURE(g_sMenuData.eIconItem[iIconCount+i], bSelected), CUSTOM_MENU_X+(fWidth*0.5), fTextY+CUSTOM_MENU_TEXT_INDENT_Y+(fHeight*0.5)-(CUSTOM_MENU_PIXEL_WIDTH*11), fWidth, fHeight, 0.0, iIconR, iIconG, iIconB, iIconA)
|
|
ELIF g_sMenuData.eJustification[iItem] = FONT_RIGHT
|
|
DRAW_SPRITE(GET_MENU_ICON_TXD(g_sMenuData.eIconItem[iIconCount+i]), GET_MENU_ICON_TEXTURE(g_sMenuData.eIconItem[iIconCount+i], bSelected), fTextX+fTempWidth+fTempTextWidth-(CUSTOM_MENU_PIXEL_WIDTH*8)+(CUSTOM_MENU_PIXEL_WIDTH*4), fTextY-CUSTOM_MENU_TEXT_INDENT_Y+(fMenuItemBarHeight*0.5), fWidth, fHeight, 0.0, iIconR, iIconG, iIconB, iIconA)
|
|
ELSE
|
|
DRAW_SPRITE(GET_MENU_ICON_TXD(g_sMenuData.eIconItem[iIconCount+i]), GET_MENU_ICON_TEXTURE(g_sMenuData.eIconItem[iIconCount+i], bSelected), fTextX+fTempWidth+fTempTextWidth-(CUSTOM_MENU_PIXEL_WIDTH*12), fTextY-CUSTOM_MENU_TEXT_INDENT_Y+(fMenuItemBarHeight*0.5), fWidth, fHeight, 0.0, iIconR, iIconG, iIconB, iIconA)
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
fTempWidth += (12 * CUSTOM_MENU_PIXEL_WIDTH)
|
|
ENDIF
|
|
ENDIF
|
|
ENDREPEAT
|
|
ENDIF
|
|
ENDIF
|
|
bItemAdded = TRUE
|
|
iTextCount++
|
|
|
|
// Add the sub component items we just processed.
|
|
REPEAT MAX_STORED_TEXT_COMPS i
|
|
IF g_sMenuData.eTextItemComps[iThisTextItem][i] = MENU_TEXT_COMP_TEXT
|
|
iTextCount++
|
|
ELIF g_sMenuData.eTextItemComps[iThisTextItem][i] = MENU_TEXT_COMP_VEHICLE_NAME
|
|
iTextCount++
|
|
ELIF g_sMenuData.eTextItemComps[iThisTextItem][i] = MENU_TEXT_COMP_INT
|
|
iIntCount++
|
|
ELIF g_sMenuData.eTextItemComps[iThisTextItem][i] = MENU_TEXT_COMP_FLOAT
|
|
iFloatCount++
|
|
ELIF g_sMenuData.eTextItemComps[iThisTextItem][i] = MENU_TEXT_COMP_ICON
|
|
iIconCount++
|
|
ELIF g_sMenuData.eTextItemComps[iThisTextItem][i] = MENU_TEXT_COMP_PLAYER_NAME
|
|
iPlayerNameCount++
|
|
ELIF g_sMenuData.eTextItemComps[iThisTextItem][i] = MENU_TEXT_COMP_RADIO_STATION
|
|
iPlayerNameCount++
|
|
ELIF g_sMenuData.eTextItemComps[iThisTextItem][i] = MENU_TEXT_COMP_LITERAL
|
|
iPlayerNameCount++
|
|
ELIF g_sMenuData.eTextItemComps[iThisTextItem][i] = MENU_TEXT_COMP_CONDENSED_LITERAL
|
|
iPlayerNameCount++
|
|
ENDIF
|
|
ENDREPEAT
|
|
BREAK
|
|
CASE MENU_ITEM_INT
|
|
IF bDisplay
|
|
|
|
// Work out width of this text item
|
|
IF NOT g_sMenuData.bDisplayRowsDefined
|
|
SETUP_MENU_ITEM_TEXT(bSelected, g_sMenuData.bIsSelectable[iThisTextItem], g_sMenuData.bIsDefault[iThisTextItem], bSetCarColour)
|
|
IF g_sMenuData.bUseCustomRowColour
|
|
AND g_sMenuData.iCustomRowColour = iRow
|
|
SETUP_MENU_CUSTOM_ITEM_TEXT_COLOUR(bSelected)
|
|
ENDIF
|
|
BEGIN_TEXT_COMMAND_GET_SCREEN_WIDTH_OF_DISPLAY_TEXT("NUMBER")
|
|
ADD_TEXT_COMPONENT_INTEGER(g_sMenuData.iItem[iIntCount])
|
|
fTempTextWidth = END_TEXT_COMMAND_GET_SCREEN_WIDTH_OF_DISPLAY_TEXT(TRUE)
|
|
|
|
// Use this to track x offsets
|
|
fTempWidth = 0
|
|
|
|
// Offset for text justification
|
|
IF g_sMenuData.eJustification[iItem] = FONT_RIGHT
|
|
fTempWidth += (fTempColumnWidth-(fTempTextWidth))+(CUSTOM_MENU_PIXEL_WIDTH*1)
|
|
ELIF g_sMenuData.eJustification[iItem] = FONT_CENTRE
|
|
fTempWidth += (((fTempColumnWidth-fTextX)*0.5) - ((fTempTextWidth)*0.5))
|
|
ENDIF
|
|
|
|
g_sMenuData.fStoredTempWidth[(iDisplayRow*g_sMenuData.iMenuColumns)+iItem] = fTempWidth
|
|
g_sMenuData.fStoredTempTextWidth[(iDisplayRow*g_sMenuData.iMenuColumns)+iItem] = fTempTextWidth
|
|
ELSE
|
|
fTempWidth = g_sMenuData.fStoredTempWidth[(iDisplayRow*g_sMenuData.iMenuColumns)+iItem]
|
|
fTempTextWidth = g_sMenuData.fStoredTempTextWidth[(iDisplayRow*g_sMenuData.iMenuColumns)+iItem]
|
|
ENDIF
|
|
|
|
// Offset for toggle item
|
|
IF bAddToggleItems
|
|
IF GET_MENU_ICON_SCREEN_RESOLUTION(MENU_ICON_ARROW_L, TRUE, FALSE, fWidth, fHeight, bUseActualRes)
|
|
|
|
IF g_sMenuData.eJustification[iItem] = FONT_RIGHT
|
|
fTempWidth -= (fWidth*2)
|
|
ENDIF
|
|
|
|
fTempToggleWidth = (fWidth*0.5)
|
|
IF GET_MENU_ICON_SCREEN_RESOLUTION(MENU_ICON_ARROW_L, TRUE, TRUE, fWidth, fHeight, bUseActualRes)
|
|
GET_MENU_ICON_TEXTURE_RGB(MENU_ICON_ARROW_L, TRUE, iIconR, iIconG, iIconB, iIconA)
|
|
IF iPass = 1
|
|
DRAW_SPRITE(GET_MENU_ICON_TXD(MENU_ICON_ARROW_L), GET_MENU_ICON_TEXTURE(MENU_ICON_ARROW_L, TRUE), fTextX+fTempWidth+fTempToggleWidth, fTextY-CUSTOM_MENU_TEXT_INDENT_Y+(fMenuItemBarHeight*0.5), fWidth, fHeight, 0.0, iIconR, iIconG, iIconB, iIconA)
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
|
|
IF GET_MENU_ICON_SCREEN_RESOLUTION(MENU_ICON_ARROW_R, TRUE, FALSE, fWidth, fHeight, bUseActualRes)
|
|
|
|
fTempWidth += (fWidth)
|
|
|
|
fTempToggleWidth = (fWidth*0.5)
|
|
IF GET_MENU_ICON_SCREEN_RESOLUTION(MENU_ICON_ARROW_R, TRUE, TRUE, fWidth, fHeight, bUseActualRes)
|
|
GET_MENU_ICON_TEXTURE_RGB(MENU_ICON_ARROW_R, TRUE, iIconR, iIconG, iIconB, iIconA)
|
|
IF iPass = 1
|
|
DRAW_SPRITE(GET_MENU_ICON_TXD(MENU_ICON_ARROW_R), GET_MENU_ICON_TEXTURE(MENU_ICON_ARROW_R, TRUE), fTextX+fTempWidth+fTempToggleWidth+(fTempTextWidth+fTempIconWidth), fTextY-CUSTOM_MENU_TEXT_INDENT_Y+(fMenuItemBarHeight*0.5), fWidth, fHeight, 0.0, iIconR, iIconG, iIconB, iIconA)
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
|
|
// Display the menu item
|
|
IF iPass = 1
|
|
SETUP_MENU_ITEM_TEXT(bSelected, g_sMenuData.bIsSelectable[iThisTextItem], g_sMenuData.bIsDefault[iThisTextItem], bSetCarColour)
|
|
DISPLAY_TEXT_WITH_NUMBER(fTextX+fTempWidth, fTextY, "NUMBER", g_sMenuData.iItem[iIntCount])
|
|
ENDIF
|
|
ENDIF
|
|
bItemAdded = TRUE
|
|
iIntCount++
|
|
BREAK
|
|
CASE MENU_ITEM_FLOAT
|
|
IF bDisplay
|
|
|
|
// Work out width of this text item
|
|
IF NOT g_sMenuData.bDisplayRowsDefined
|
|
SETUP_MENU_ITEM_TEXT(bSelected, g_sMenuData.bIsSelectable[iThisTextItem], g_sMenuData.bIsDefault[iThisTextItem], bSetCarColour)
|
|
IF g_sMenuData.bUseCustomRowColour
|
|
AND g_sMenuData.iCustomRowColour = iRow
|
|
SETUP_MENU_CUSTOM_ITEM_TEXT_COLOUR(bSelected)
|
|
ENDIF
|
|
BEGIN_TEXT_COMMAND_GET_SCREEN_WIDTH_OF_DISPLAY_TEXT("NUMBER")
|
|
ADD_TEXT_COMPONENT_FLOAT(g_sMenuData.fItem[iFloatCount], g_sMenuData.iFloatDP[iFloatCount])
|
|
fTempTextWidth = END_TEXT_COMMAND_GET_SCREEN_WIDTH_OF_DISPLAY_TEXT(TRUE)
|
|
|
|
// Use this to track x offsets
|
|
fTempWidth = 0
|
|
|
|
// Offset for text justification
|
|
IF g_sMenuData.eJustification[iItem] = FONT_RIGHT
|
|
fTempWidth += (fTempColumnWidth-(fTempTextWidth))+(CUSTOM_MENU_PIXEL_WIDTH*1)
|
|
ELIF g_sMenuData.eJustification[iItem] = FONT_CENTRE
|
|
fTempWidth += (((fTempColumnWidth-fTextX)*0.5) - ((fTempTextWidth)*0.5))
|
|
ENDIF
|
|
|
|
g_sMenuData.fStoredTempWidth[(iDisplayRow*g_sMenuData.iMenuColumns)+iItem] = fTempWidth
|
|
g_sMenuData.fStoredTempTextWidth[(iDisplayRow*g_sMenuData.iMenuColumns)+iItem] = fTempTextWidth
|
|
ELSE
|
|
fTempWidth = g_sMenuData.fStoredTempWidth[(iDisplayRow*g_sMenuData.iMenuColumns)+iItem]
|
|
fTempTextWidth = g_sMenuData.fStoredTempTextWidth[(iDisplayRow*g_sMenuData.iMenuColumns)+iItem]
|
|
ENDIF
|
|
|
|
// Offset for toggle item
|
|
IF bAddToggleItems
|
|
IF GET_MENU_ICON_SCREEN_RESOLUTION(MENU_ICON_ARROW_L, TRUE, FALSE, fWidth, fHeight)
|
|
|
|
IF g_sMenuData.eJustification[iItem] = FONT_RIGHT
|
|
fTempWidth -= (fWidth*2)
|
|
ENDIF
|
|
|
|
fTempToggleWidth = (fWidth*0.5)
|
|
IF GET_MENU_ICON_SCREEN_RESOLUTION(MENU_ICON_ARROW_L, TRUE, TRUE, fWidth, fHeight, bUseActualRes)
|
|
GET_MENU_ICON_TEXTURE_RGB(MENU_ICON_ARROW_L, TRUE, iIconR, iIconG, iIconB, iIconA)
|
|
IF iPass = 1
|
|
DRAW_SPRITE(GET_MENU_ICON_TXD(MENU_ICON_ARROW_L), GET_MENU_ICON_TEXTURE(MENU_ICON_ARROW_L, TRUE), fTextX+fTempWidth+fTempToggleWidth, fTextY-CUSTOM_MENU_TEXT_INDENT_Y+(fMenuItemBarHeight*0.5), fWidth, fHeight, 0.0, iIconR, iIconG, iIconB, iIconA)
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
|
|
IF GET_MENU_ICON_SCREEN_RESOLUTION(MENU_ICON_ARROW_R, TRUE, FALSE, fWidth, fHeight, bUseActualRes)
|
|
|
|
fTempWidth += (fWidth)
|
|
|
|
fTempToggleWidth = (fWidth*0.5)
|
|
IF GET_MENU_ICON_SCREEN_RESOLUTION(MENU_ICON_ARROW_R, TRUE, TRUE, fWidth, fHeight, bUseActualRes)
|
|
GET_MENU_ICON_TEXTURE_RGB(MENU_ICON_ARROW_R, TRUE, iIconR, iIconG, iIconB, iIconA)
|
|
IF iPass = 1
|
|
DRAW_SPRITE(GET_MENU_ICON_TXD(MENU_ICON_ARROW_R), GET_MENU_ICON_TEXTURE(MENU_ICON_ARROW_R, TRUE), fTextX+fTempWidth+fTempToggleWidth+(fTempTextWidth+fTempIconWidth), fTextY-CUSTOM_MENU_TEXT_INDENT_Y+(fMenuItemBarHeight*0.5), fWidth, fHeight, 0.0, iIconR, iIconG, iIconB, iIconA)
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
|
|
// Display the menu item
|
|
SETUP_MENU_ITEM_TEXT(bSelected, g_sMenuData.bIsSelectable[iThisTextItem], g_sMenuData.bIsDefault[iThisTextItem], bSetCarColour)
|
|
DISPLAY_TEXT_WITH_FLOAT(fTextX+fTempWidth, fTextY, "NUMBER", g_sMenuData.fItem[iFloatCount], g_sMenuData.iFloatDP[iFloatCount])
|
|
ENDIF
|
|
bItemAdded = TRUE
|
|
iFloatCount++
|
|
BREAK
|
|
CASE MENU_ITEM_ICON
|
|
IF bDisplay
|
|
IF GET_MENU_ICON_SCREEN_RESOLUTION(g_sMenuData.eIconItem[iIconCount], bSelected, FALSE, fWidth, fHeight, bUseActualRes)
|
|
|
|
// Work out width of this item
|
|
IF NOT g_sMenuData.bDisplayRowsDefined
|
|
fTempIconWidth = (fWidth)
|
|
|
|
// Use this to track x offsets
|
|
fTempWidth = 0
|
|
|
|
// Offset for text justification
|
|
IF g_sMenuData.eJustification[iItem] = FONT_RIGHT
|
|
fTempWidth += (fTempColumnWidth-(fTempIconWidth))+(CUSTOM_MENU_PIXEL_WIDTH*1)
|
|
ELIF g_sMenuData.eJustification[iItem] = FONT_CENTRE
|
|
fTempWidth += (((fTempColumnWidth-fTextX)*0.5) - ((fTempIconWidth)*0.5))
|
|
ENDIF
|
|
|
|
g_sMenuData.fStoredTempWidth[(iDisplayRow*g_sMenuData.iMenuColumns)+iItem] = fTempWidth
|
|
g_sMenuData.fStoredTempIconWidth[(iDisplayRow*g_sMenuData.iMenuColumns)+iItem] = fTempIconWidth
|
|
ELSE
|
|
fTempWidth = g_sMenuData.fStoredTempWidth[(iDisplayRow*g_sMenuData.iMenuColumns)+iItem]
|
|
fTempIconWidth = g_sMenuData.fStoredTempIconWidth[(iDisplayRow*g_sMenuData.iMenuColumns)+iItem]
|
|
ENDIF
|
|
|
|
// Offset for toggle item
|
|
IF bAddToggleItems
|
|
IF GET_MENU_ICON_SCREEN_RESOLUTION(MENU_ICON_ARROW_L, TRUE, FALSE, fWidth, fHeight, bUseActualRes)
|
|
|
|
IF g_sMenuData.eJustification[iItem] = FONT_RIGHT
|
|
fTempWidth -= (fWidth*2)
|
|
ENDIF
|
|
|
|
fTempToggleWidth = (fWidth*0.5)
|
|
IF GET_MENU_ICON_SCREEN_RESOLUTION(MENU_ICON_ARROW_L, TRUE, TRUE, fWidth, fHeight, bUseActualRes)
|
|
GET_MENU_ICON_TEXTURE_RGB(MENU_ICON_ARROW_L, TRUE, iIconR, iIconG, iIconB, iIconA)
|
|
IF iPass = 1
|
|
DRAW_SPRITE(GET_MENU_ICON_TXD(MENU_ICON_ARROW_L), GET_MENU_ICON_TEXTURE(MENU_ICON_ARROW_L, TRUE), fTextX+fTempWidth+fTempToggleWidth, fTextY-CUSTOM_MENU_TEXT_INDENT_Y+(fMenuItemBarHeight*0.5), fWidth, fHeight, 0.0, iIconR, iIconG, iIconB, iIconA)
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
|
|
IF GET_MENU_ICON_SCREEN_RESOLUTION(MENU_ICON_ARROW_R, TRUE, FALSE, fWidth, fHeight, bUseActualRes)
|
|
|
|
fTempWidth += (fWidth)
|
|
|
|
fTempToggleWidth = (fWidth*0.5)
|
|
IF GET_MENU_ICON_SCREEN_RESOLUTION(MENU_ICON_ARROW_R, TRUE, TRUE, fWidth, fHeight, bUseActualRes)
|
|
GET_MENU_ICON_TEXTURE_RGB(MENU_ICON_ARROW_R, TRUE, iIconR, iIconG, iIconB, iIconA)
|
|
IF iPass = 1
|
|
DRAW_SPRITE(GET_MENU_ICON_TXD(MENU_ICON_ARROW_R), GET_MENU_ICON_TEXTURE(MENU_ICON_ARROW_R, TRUE), fTextX+fTempWidth+fTempToggleWidth+(fTempTextWidth+fTempIconWidth), fTextY-CUSTOM_MENU_TEXT_INDENT_Y+(fMenuItemBarHeight*0.5), fWidth, fHeight, 0.0, iIconR, iIconG, iIconB, iIconA)
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
|
|
// Display the menu item
|
|
IF iPass = 1
|
|
IF GET_MENU_ICON_SCREEN_RESOLUTION(g_sMenuData.eIconItem[iIconCount], bSelected, TRUE, fWidth, fHeight, bUseActualRes)
|
|
GET_MENU_ICON_TEXTURE_RGB(g_sMenuData.eIconItem[iIconCount], bSelected, iIconR, iIconG, iIconB, iIconA)
|
|
DRAW_SPRITE(GET_MENU_ICON_TXD(g_sMenuData.eIconItem[iIconCount]), GET_MENU_ICON_TEXTURE(g_sMenuData.eIconItem[iIconCount], bSelected), fTextX+fTempWidth+(fWidth*0.5), fTextY-CUSTOM_MENU_TEXT_INDENT_Y+(fMenuItemBarHeight*0.5), fWidth*GET_MENU_ICON_SCALE_MULTIPLIER(g_sMenuData.eIconItem[iIconCount]), fHeight*GET_MENU_ICON_SCALE_MULTIPLIER(g_sMenuData.eIconItem[iIconCount]), 0.0, iIconR, iIconG, iIconB, iIconA)
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
bItemAdded = TRUE
|
|
iIconCount++
|
|
BREAK
|
|
CASE MENU_ITEM_TAB
|
|
bItemAdded = TRUE
|
|
BREAK
|
|
ENDSWITCH
|
|
|
|
// Add column width for the next item
|
|
IF g_sMenuData.eItemLayout[iItem] = MENU_ITEM_TAB
|
|
IF g_sMenuData.fColumnWidth[iItem] > 0.05
|
|
fTextX += g_sMenuData.fColumnWidth[iItem]
|
|
ELSE
|
|
fTextX += 0.05
|
|
ENDIF
|
|
ELSE
|
|
fTextX += g_sMenuData.fColumnWidth[iItem]
|
|
|
|
// Remove the toggle item width we added at the start as this would have already been added to fColumnWidth
|
|
IF g_sMenuData.bItemToggleable[iItem]
|
|
IF GET_MENU_ICON_SCREEN_RESOLUTION(MENU_ICON_ARROW_L, TRUE, TRUE, fWidth, fHeight, bUseActualRes)
|
|
fTextX -= fWidth
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ELSE
|
|
// No item added so add on default width
|
|
fTextX += g_sMenuData.fColumnWidth[iItem]
|
|
ENDIF
|
|
ENDREPEAT
|
|
|
|
// No more items to add in this row so update the final height
|
|
IF bItemAdded
|
|
IF bDisplay
|
|
g_sMenuData.iDisplayRow[iDisplayRow] = iRow
|
|
g_sMenuData.iLastDisplayItem = iRow
|
|
iDisplayRow++
|
|
IF g_sMenuData.bMenuRowHasSpacer[iRow]
|
|
iSpacerCount++
|
|
ENDIF
|
|
|
|
IF g_sMenuData.fRowHeight[iRow] != 0.0
|
|
fHeightTrack += g_sMenuData.fRowHeight[iRow]
|
|
ELSE
|
|
fHeightTrack += CUSTOM_MENU_ITEM_BAR_H
|
|
ENDIF
|
|
|
|
ENDIF
|
|
|
|
IF NOT g_sMenuData.bSetupComplete
|
|
g_sMenuData.bMenuRowHasDisplayItems[iRow] = TRUE
|
|
|
|
IF g_sMenuData.bMenuRowDoesntAddToCount[iRow]
|
|
IF bSelected
|
|
g_sMenuData.iSetupCurrentSelectableItem = 0
|
|
ENDIF
|
|
ELSE
|
|
iTotalSelectableRows++
|
|
IF bSelected
|
|
g_sMenuData.iSetupCurrentSelectableItem = iTotalSelectableRows
|
|
ENDIF
|
|
ENDIF
|
|
|
|
iTotalRows++
|
|
ENDIF
|
|
ENDIF
|
|
ENDFOR
|
|
|
|
IF NOT g_sMenuData.bSetupComplete
|
|
g_sMenuData.fSetupFinalBodyY = fBodyStartY+(fHeightTrack)+(CUSTOM_MENU_SPACER_H*iCurrentDisplaySpacer)
|
|
g_sMenuData.iSetupTotalSelectableRows = iTotalSelectableRows
|
|
g_sMenuData.iSetupTotalRows = iTotalRows
|
|
g_sMenuData.bSetupComplete = TRUE
|
|
ENDIF
|
|
ENDIF
|
|
|
|
IF NOT g_sMenuData.bDisplayRowsDefined
|
|
g_sMenuData.iSetupTotalDisplayRows = iDisplayRow
|
|
g_sMenuData.bDisplayRowsDefined = TRUE
|
|
ENDIF
|
|
ENDREPEAT
|
|
|
|
g_sMenuData.fMenuFinalScreenY = fFinalPanelY
|
|
|
|
g_sMenuData.iLastDrawTimer = GET_GAME_TIMER()
|
|
|
|
THEFEED_SET_SCRIPTED_MENU_HEIGHT(g_sMenuData.fMenuFinalScreenY)
|
|
|
|
// Block various game states
|
|
IF NOT g_sMenuData.bKeepPhoneForNextDrawMenuCall
|
|
DISABLE_CELLPHONE_THIS_FRAME_ONLY()
|
|
ENDIF
|
|
g_sMenuData.bKeepPhoneForNextDrawMenuCall = FALSE
|
|
|
|
IF bHideHelpText
|
|
HIDE_HUD_COMPONENT_THIS_FRAME(NEW_HUD_HELP_TEXT)
|
|
ENDIF
|
|
|
|
HIDE_HUD_COMPONENT_THIS_FRAME(NEW_HUD_VEHICLE_NAME)
|
|
HIDE_HUD_COMPONENT_THIS_FRAME(NEW_HUD_AREA_NAME)
|
|
HIDE_HUD_COMPONENT_THIS_FRAME(NEW_HUD_STREET_NAME)
|
|
HIDE_HUD_COMPONENT_THIS_FRAME(NEW_HUD_DISTRICT_NAME)
|
|
|
|
// Fix for bug #953251 - Spray booth menu is overlapped by the distance marker for Race to Point
|
|
IF bSetButtonsUnderHud
|
|
SET_INSTRUCTIONAL_BUTTONS_UNDER_HUD_THIS_FRAME()
|
|
ENDIF
|
|
|
|
RESET_SCRIPT_GFX_ALIGN()
|
|
ENDPROC
|
|
|
|
// This is used to delay control movement up/down
|
|
FUNC BOOL ALLOW_ANALOGUE_MOVEMENT(TIME_DATATYPE &selectionIncrementTimer, INT &iIncrement,BOOL bVertical = TRUE)
|
|
// up button
|
|
BOOL bIncrement
|
|
INT iTimerDelay = 150
|
|
|
|
IF bVertical
|
|
IF IS_DISABLED_CONTROL_PRESSED(FRONTEND_CONTROL, INPUT_FRONTEND_UP)
|
|
OR (GET_CONTROL_NORMAL(FRONTEND_CONTROL, INPUT_SCRIPT_LEFT_AXIS_Y) < -0.3)
|
|
OR IS_DISABLED_CONTROL_PRESSED(FRONTEND_CONTROL, INPUT_CURSOR_SCROLL_UP)
|
|
OR IS_CONTROL_JUST_PRESSED(FRONTEND_CONTROL, INPUT_FRONTEND_UP)
|
|
|
|
//faster response
|
|
IF IS_DISABLED_CONTROL_PRESSED(FRONTEND_CONTROL, INPUT_CURSOR_SCROLL_UP)
|
|
iTimerDelay = 100
|
|
ENDIF
|
|
|
|
IF ABSI(GET_TIME_DIFFERENCE(selectionIncrementTimer, GET_NETWORK_TIME())) > iTimerDelay
|
|
selectionIncrementTimer = GET_NETWORK_TIME()
|
|
bIncrement = TRUE
|
|
iIncrement = 1
|
|
ENDIF
|
|
ENDIF
|
|
|
|
// down button
|
|
IF IS_DISABLED_CONTROL_PRESSED(FRONTEND_CONTROL, INPUT_FRONTEND_DOWN)
|
|
OR (GET_CONTROL_NORMAL(FRONTEND_CONTROL, INPUT_SCRIPT_LEFT_AXIS_Y) > 0.3)
|
|
OR IS_DISABLED_CONTROL_PRESSED(FRONTEND_CONTROL, INPUT_CURSOR_SCROLL_DOWN)
|
|
OR IS_CONTROL_JUST_PRESSED(FRONTEND_CONTROL, INPUT_FRONTEND_DOWN)
|
|
//faster response
|
|
IF IS_DISABLED_CONTROL_PRESSED(FRONTEND_CONTROL, INPUT_CURSOR_SCROLL_DOWN)
|
|
iTimerDelay = 100
|
|
ENDIF
|
|
IF ABSI(GET_TIME_DIFFERENCE(selectionIncrementTimer, GET_NETWORK_TIME())) > iTimerDelay
|
|
selectionIncrementTimer = GET_NETWORK_TIME()
|
|
bIncrement = TRUE
|
|
iIncrement = -1
|
|
ENDIF
|
|
ENDIF
|
|
ELSE
|
|
// right button press
|
|
IF IS_DISABLED_CONTROL_PRESSED(FRONTEND_CONTROL, INPUT_FRONTEND_RIGHT)
|
|
OR (GET_CONTROL_NORMAL(FRONTEND_CONTROL, INPUT_SCRIPT_LEFT_AXIS_X) > 0.3)
|
|
OR IS_CONTROL_JUST_RELEASED(FRONTEND_CONTROL, INPUT_FRONTEND_ACCEPT)
|
|
IF ABSI(GET_TIME_DIFFERENCE(selectionIncrementTimer, GET_NETWORK_TIME())) > iTimerDelay
|
|
selectionIncrementTimer = GET_NETWORK_TIME()
|
|
bIncrement = TRUE
|
|
iIncrement = 1
|
|
ENDIF
|
|
ENDIF
|
|
|
|
// left button press
|
|
IF IS_DISABLED_CONTROL_PRESSED(FRONTEND_CONTROL, INPUT_FRONTEND_LEFT)
|
|
OR (GET_CONTROL_NORMAL(FRONTEND_CONTROL, INPUT_SCRIPT_LEFT_AXIS_X) < -0.3)
|
|
IF ABSI(GET_TIME_DIFFERENCE(selectionIncrementTimer, GET_NETWORK_TIME())) > iTimerDelay
|
|
selectionIncrementTimer = GET_NETWORK_TIME()
|
|
bIncrement = TRUE
|
|
iIncrement = -1
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
RETURN bIncrement
|
|
ENDFUNC
|
|
|
|
/// PURPOSE:
|
|
/// Returns true if a menu option was selected OR the cancel button was pressed.
|
|
FUNC BOOL HANDLE_CUSTOM_MENU_INPUT( TIME_DATATYPE& tLastScrollTime, BOOL& ref_bCancelled, BOOL& ref_bAccepted )
|
|
ref_bCancelled = FALSE
|
|
ref_bAccepted = FALSE
|
|
|
|
INT iSelectionChange = 0
|
|
|
|
IF IS_PC_VERSION()
|
|
AND IS_USING_KEYBOARD_AND_MOUSE(FRONTEND_CONTROL)
|
|
IF GET_PAUSE_MENU_STATE() = PM_INACTIVE
|
|
AND NOT IS_SYSTEM_UI_BEING_DISPLAYED()
|
|
AND NOT IS_WARNING_MESSAGE_ACTIVE()
|
|
AND NOT g_sShopSettings.bProcessStoreAlert
|
|
AND NOT NETWORK_TEXT_CHAT_IS_TYPING()
|
|
// Mouse control support
|
|
IF IS_USING_CURSOR(FRONTEND_CONTROL)
|
|
DISABLE_CONTROL_ACTION(PLAYER_CONTROL, INPUT_LOOK_LR)
|
|
DISABLE_CONTROL_ACTION(PLAYER_CONTROL, INPUT_LOOK_UD)
|
|
DISABLE_CONTROL_ACTION(FRONTEND_CONTROL, INPUT_FRONTEND_PAUSE_ALTERNATE)
|
|
DISABLE_CONTROL_ACTION(FRONTEND_CONTROL, INPUT_FRONTEND_PAUSE)
|
|
ENABLE_CONTROL_ACTION(PLAYER_CONTROL, INPUT_CURSOR_ACCEPT)
|
|
ENABLE_CONTROL_ACTION(PLAYER_CONTROL, INPUT_CURSOR_CANCEL)
|
|
ENABLE_CONTROL_ACTION(PLAYER_CONTROL, INPUT_CURSOR_SCROLL_UP)
|
|
ENABLE_CONTROL_ACTION(PLAYER_CONTROL, INPUT_CURSOR_SCROLL_DOWN)
|
|
|
|
SET_INPUT_EXCLUSIVE(PLAYER_CONTROL, INPUT_FRONTEND_PAUSE_ALTERNATE)
|
|
SET_INPUT_EXCLUSIVE(FRONTEND_CONTROL, INPUT_FRONTEND_PAUSE_ALTERNATE)
|
|
DISABLE_CONTROL_ACTION(PLAYER_CONTROL, INPUT_FRONTEND_PAUSE_ALTERNATE)
|
|
DISABLE_CONTROL_ACTION(FRONTEND_CONTROL, INPUT_FRONTEND_PAUSE_ALTERNATE)
|
|
|
|
HANDLE_CURSOR_HIGHLIGHTED_MENU_ITEMS()
|
|
HANDLE_MENU_CURSOR(FALSE)
|
|
ENDIF
|
|
|
|
IF IS_MENU_CURSOR_ACCEPT_PRESSED()
|
|
CDEBUG1LN(DEBUG_EXT_MENU, " HANDLE_CUSTOM_MENU_INPUT - Mouse accept just pressed.")
|
|
IF g_sMenuData.iCurrentItem = g_iMenuCursorItem
|
|
CDEBUG1LN(DEBUG_EXT_MENU, "HANDLE_CUSTOM_MENU_INPUT - Clicked selected option - accepting this menu option. (ACCEPT)")
|
|
ref_bAccepted = TRUE
|
|
ELSE
|
|
iSelectionChange = g_sMenuData.iCurrentItem-g_iMenuCursorItem //(ALLOW_ANALOGUE_MOVEMENT returns the negative so we invert this too)
|
|
CDEBUG1LN(DEBUG_EXT_MENU, "HANDLE_CUSTOM_MENU_INPUT - Clicked non-selected option - moving forward selection by ",iSelectionChange,".")
|
|
ENDIF
|
|
ELIF IS_MENU_CURSOR_CANCEL_PRESSED()
|
|
OR IS_DISABLED_CONTROL_JUST_RELEASED(FRONTEND_CONTROL, INPUT_FRONTEND_PAUSE_ALTERNATE)
|
|
CDEBUG1LN(DEBUG_EXT_MENU, " HANDLE_CUSTOM_MENU_INPUT - INPUT_FRONTEND_PAUSE_ALTERNATE (CANCEL)")
|
|
ref_bCancelled = TRUE
|
|
ELIF IS_MENU_CURSOR_SCROLL_UP_PRESSED()
|
|
iSelectionChange = 1
|
|
ELIF IS_MENU_CURSOR_SCROLL_DOWN_PRESSED()
|
|
iSelectionChange = -1
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
|
|
IF NOT ref_bAccepted
|
|
AND IS_DISABLED_CONTROL_JUST_PRESSED(FRONTEND_CONTROL, INPUT_FRONTEND_ACCEPT)
|
|
CDEBUG1LN(DEBUG_EXT_MENU, " HANDLE_CUSTOM_MENU_INPUT - INPUT_FRONTEND_ACCEPT (ACCEPT)")
|
|
ref_bAccepted = TRUE
|
|
ENDIF
|
|
|
|
IF NOT ref_bCancelled
|
|
AND IS_DISABLED_CONTROL_JUST_RELEASED(FRONTEND_CONTROL, INPUT_FRONTEND_CANCEL)
|
|
//Checking for released instead of pressed to prevent conflict with the pause menu
|
|
CDEBUG1LN(DEBUG_EXT_MENU, " HANDLE_CUSTOM_MENU_INPUT - INPUT_FRONTEND_CANCEL (CANCEL)")
|
|
ref_bCancelled = TRUE
|
|
ENDIF
|
|
|
|
IF iSelectionChange = 0
|
|
AND (NOT ALLOW_ANALOGUE_MOVEMENT( tLastScrollTime, iSelectionChange, TRUE)
|
|
OR NOT (IS_CONTROL_PRESSED(FRONTEND_CONTROL, INPUT_FRONTEND_UP) // Normal interior menus only accept dpad (no LStick)
|
|
OR IS_CONTROL_PRESSED(FRONTEND_CONTROL, INPUT_FRONTEND_DOWN)))
|
|
iSelectionChange = 0 //ALLOW_ANALOGUE_MOVEMENT does processing. Set back to 0 to be sure.
|
|
ENDIF
|
|
|
|
IF ref_bAccepted
|
|
CDEBUG1LN(DEBUG_EXT_MENU, " HANDLE_CUSTOM_MENU_INPUT - ACCEPT just pressed. Option ", g_sMenuData.iCurrentItem)
|
|
PLAY_SOUND_FRONTEND(-1, "SELECT", "HUD_FREEMODE_SOUNDSET")
|
|
RETURN TRUE
|
|
ELIF ref_bCancelled
|
|
CDEBUG1LN(DEBUG_EXT_MENU, " HANDLE_CUSTOM_MENU_INPUT - CANCEL just pressed.")
|
|
PLAY_SOUND_FRONTEND(-1, "BACK","HUD_FREEMODE_SOUNDSET")
|
|
RETURN TRUE
|
|
ENDIF
|
|
|
|
IF iSelectionChange <> 0
|
|
PLAY_SOUND_FRONTEND(-1, "NAV_UP_DOWN", "HUD_FREEMODE_SOUNDSET")
|
|
SET_CURRENT_MENU_ITEM_WITH_WRAP( g_sMenuData.iCurrentItem - iSelectionChange )
|
|
CDEBUG1LN(DEBUG_EXT_MENU, " HANDLE_CUSTOM_MENU_INPUT - Change selection just pressed. Option ", g_sMenuData.iCurrentItem)
|
|
ENDIF
|
|
|
|
RETURN FALSE
|
|
ENDFUNC
|
|
|
|
PROC APPLY_BASIC_CUSTOM_MENU_SETTINGS(BOOL bIncludeBackButton = TRUE, BOOL bIncludeSelectButton = TRUE)
|
|
SET_MENU_ITEM_JUSTIFICATION(FONT_LEFT, FONT_RIGHT)
|
|
SET_MENU_ITEM_LAYOUT(MENU_ITEM_TEXT, MENU_ITEM_TEXT)
|
|
IF bIncludeSelectButton
|
|
ADD_MENU_HELP_KEY_CLICKABLE(INPUT_FRONTEND_ACCEPT, "ITEM_SELECT")
|
|
ENDIF
|
|
IF bIncludeBackButton
|
|
ADD_MENU_HELP_KEY_CLICKABLE(INPUT_FRONTEND_CANCEL, "ITEM_BACK")
|
|
ENDIF
|
|
ENDPROC
|
|
|
|
PROC SETUP_MENU_WITH_TITLE(STRING sTitle)
|
|
CLEAR_MENU_DATA()
|
|
|
|
SET_MENU_TITLE(sTitle)
|
|
|
|
SET_MENU_ITEM_JUSTIFICATION(FONT_LEFT, FONT_RIGHT)
|
|
SET_MENU_ITEM_LAYOUT(MENU_ITEM_TEXT, MENU_ITEM_TEXT)
|
|
ENDPROC
|