iw6-lui/lui/mp_menus/mpleaderboard.dec.lua
2024-09-12 17:25:45 +02:00

1517 lines
43 KiB
Lua

local f0_local0 = module
local f0_local1, f0_local2 = ...
f0_local0( f0_local1, package.seeall )
CoD.PrintModuleLoad( _NAME )
function LeaderboardPop()
Leaderboards.Clear()
end
function LeaderboardButtonSetFocusable( f2_arg0, f2_arg1 )
if f2_arg0.properties.focusable then
f2_arg0:makeFocusable()
else
f2_arg0:makeNotFocusable()
end
end
function LeaderboardListRowFeeder( f3_arg0 )
local f3_local0 = {
[#f3_local0 + 1] = {
type = "UIImage",
id = "leaderboard_header_bg",
states = {
default = {
topAnchor = true,
bottomAnchor = false,
leftAnchor = true,
rightAnchor = true,
top = 0,
bottom = Leaderboards.Layout.HeaderHeight,
left = 0,
right = 0,
material = RegisterMaterial( "white" ),
alpha = 0.05
}
}
}
}
for f3_local1 = 1, Leaderboards.Layout.NumRows, 1 do
local f3_local4 = 0.15
if f3_local1 % 2 == 1 then
f3_local4 = 0
end
f3_local0[#f3_local0 + 1] = {
type = "UIImage",
id = "leaderboard_row_bg_" .. f3_local1,
states = {
default = CoD.ColorizeState( Colors.black, {
topAnchor = true,
bottomAnchor = false,
leftAnchor = true,
rightAnchor = true,
top = 0,
bottom = Leaderboards.Layout.RowHeight,
left = 0,
right = 0,
material = RegisterMaterial( "white" ),
alpha = f3_local4
} )
},
id = "leaderboard_line_button_" .. f3_local1
}
end
return f3_local0
end
function LeaderboardHeaderRowFeeder( f4_arg0 )
local f4_local0 = {}
local f4_local1 = Leaderboards.GetLeaderboardNumColumns( "Common" )
local f4_local2 = f4_local1 + Leaderboards.GetLeaderboardNumColumns( f4_arg0.leaderboardType )
local f4_local3 = {}
for f4_local4 = 1, f4_local1, 1 do
f4_local3[f4_local4] = Engine.Localize( Leaderboards.GetLeaderboardHeaderName( "Common", f4_local4 ) )
end
for f4_local4 = 1, Leaderboards.GetLeaderboardNumColumns( f4_arg0.leaderboardType ), 1 do
f4_local3[f4_local1 + f4_local4] = Engine.Localize( Leaderboards.GetLeaderboardHeaderName( f4_arg0.leaderboardType, f4_local4 ) )
end
local f4_local4 = {}
for f4_local5 = 1, f4_local1, 1 do
f4_local4[f4_local5] = Leaderboards.GetLeaderboardColumnWidth( "Common", f4_local5 )
end
for f4_local5 = 1, Leaderboards.GetLeaderboardNumColumns( f4_arg0.leaderboardType ), 1 do
f4_local4[f4_local1 + f4_local5] = Leaderboards.GetLeaderboardColumnWidth( f4_arg0.leaderboardType, f4_local5 )
end
for f4_local5 = 1, f4_local2, 1 do
f4_local0[#f4_local0 + 1] = {
type = "UIText",
id = "leaderboard_header_name_" .. f4_local5,
properties = {
text = f4_local3[f4_local5]
},
states = {
default = {
topAnchor = false,
bottomAnchor = true,
leftAnchor = true,
rightAnchor = false,
top = -CoD.TextSettings.SmallFont.Height - 10,
bottom = -10,
left = 0,
right = f4_local4[f4_local5],
alignment = LUI.Alignment.Left,
font = CoD.TextSettings.SmallFont.Font,
red = Colors.white.r,
green = Colors.white.g,
blue = Colors.white.b
}
}
}
end
return f4_local0
end
function LeaderboardPlayerRowFeeder( f5_arg0 )
local f5_local0 = {}
local f5_local1 = Leaderboards.GetLeaderboardNumColumns( "Common" )
local f5_local2 = f5_local1 + Leaderboards.GetLeaderboardNumColumns( f5_arg0.leaderboardType )
local f5_local3 = {}
for f5_local4 = 1, f5_local1, 1 do
f5_local3[f5_local4] = Leaderboards.GetLeaderboardColumnWidth( "Common", f5_local4 )
end
for f5_local4 = 1, Leaderboards.GetLeaderboardNumColumns( f5_arg0.leaderboardType ), 1 do
f5_local3[f5_local1 + f5_local4] = Leaderboards.GetLeaderboardColumnWidth( f5_arg0.leaderboardType, f5_local4 )
end
local f5_local4 = {}
for f5_local5 = 1, f5_local1, 1 do
f5_local4[f5_local5] = Leaderboards.GetLeaderboardDataColumnIndex( "Common", f5_local5 )
end
for f5_local5 = 1, Leaderboards.GetLeaderboardNumColumns( f5_arg0.leaderboardType ), 1 do
f5_local4[f5_local1 + f5_local5] = Leaderboards.GetLeaderboardDataColumnIndex( f5_arg0.leaderboardType, f5_local5 )
end
for f5_local5 = 1, f5_local2, 1 do
local f5_local8 = {}
if f5_local4[f5_local5] == 1 then
local f5_local9 = f5_arg0.exclusiveController
if not f5_local9 then
f5_local9 = Engine.GetFirstActiveController()
end
local f5_local10 = Leaderboards.GetPlayerValue( f5_local9, f5_local4[f5_local5] )
local f5_local11 = Leaderboards.GetPlayerValue( f5_local9, f5_local4[f5_local5] + 1 )
if f5_local11 == nil then
f5_local11 = ""
end
f5_local0[#f5_local0 + 1] = {
type = "UIText",
id = "leaderboard_cell_value_player_rank_" .. f5_local5,
properties = {
text = f5_local11
},
states = {
default = {
topAnchor = false,
bottomAnchor = true,
leftAnchor = true,
rightAnchor = false,
top = -CoD.TextSettings.NormalFont.Height,
bottom = 0,
left = 0,
right = 0.5 * f5_local3[f5_local5],
alignment = LUI.Alignment.Left,
font = CoD.TextSettings.NormalFont.Font,
red = Engine.IsAliensMode() and Colors.alien_frontend_hilite.r or Colors.frontend_hilite.r,
green = Engine.IsAliensMode() and Colors.alien_frontend_hilite.g or Colors.frontend_hilite.g,
blue = Engine.IsAliensMode() and Colors.alien_frontend_hilite.b or Colors.frontend_hilite.b
}
}
}
local f5_local12 = 1
if f5_local10 == nil or f5_local10 == "" then
f5_local12 = 0
end
f5_local0[#f5_local0 + 1] = {
type = "UIImage",
id = "leaderboard_cell_value_player_rankicon_" .. f5_local5,
properties = {
columnIndex = f5_local4[f5_local5]
},
states = {
default = {
topAnchor = false,
bottomAnchor = false,
leftAnchor = true,
rightAnchor = false,
left = 0,
width = 24,
height = 24,
material = RegisterMaterial( f5_local10 ),
animateOnRefresh = true,
alpha = f5_local12
}
}
}
f5_local0[#f5_local0 + 1] = {
type = "UIImage",
states = {
default = {
topAnchor = true,
bottomAnchor = treu,
leftAnchor = true,
rightAnchor = false,
top = 0,
bottom = 0,
left = 0,
right = f5_local3[f5_local5] * 0.5 - 24,
alpha = 0
}
}
}
end
local f5_local9 = f5_arg0.exclusiveController
if not f5_local9 then
f5_local9 = Engine.GetFirstActiveController()
end
local f5_local10 = Leaderboards.GetPlayerValue( f5_local9, f5_local4[f5_local5] )
if f5_local10 == nil then
f5_local10 = ""
end
local f5_local11 = Engine.IsAliensMode() and Colors.alien_frontend_hilite.r or Colors.frontend_hilite.r
local f5_local13 = Engine.IsAliensMode() and Colors.alien_frontend_hilite.g or Colors.frontend_hilite.g
local f5_local12 = Engine.IsAliensMode() and Colors.alien_frontend_hilite.b or Colors.frontend_hilite.b
if f5_local4[f5_local5] == 3 then
f5_local0[#f5_local0 + 1] = {
type = "mp_leaderboard_cell_marquee_value",
id = "leaderboard_cell_value_player_" .. f5_local5,
properties = {
text = f5_local10,
columnWidth = f5_local3[f5_local5] - 10,
red = f5_local11,
green = f5_local13,
blue = f5_local12
}
}
f5_local0[#f5_local0 + 1] = {
type = "UIImage",
states = {
default = {
topAnchor = true,
bottomAnchor = true,
leftAnchor = true,
rightAnchor = false,
top = 0,
bottom = 0,
left = 0,
right = 10,
alpha = 0
}
}
}
else
f5_local0[#f5_local0 + 1] = {
type = "mp_leaderboard_cell_value",
id = "leaderboard_cell_value_player_" .. f5_local5,
properties = {
text = f5_local10,
columnWidth = f5_local3[f5_local5],
red = f5_local11,
green = f5_local13,
blue = f5_local12
}
}
end
end
return f5_local0
end
function mp_leaderboard_cell_value()
return {
type = "UIText",
id = "mp_leaderboard_cell_value",
properties = {
text = "",
columnWidth = 100,
red = Colors.white.r,
green = Colors.white.g,
blue = Colors.white.b
},
states = {
default = {
topAnchor = false,
bottomAnchor = true,
leftAnchor = true,
rightAnchor = false,
top = -CoD.TextSettings.NormalFont.Height,
bottom = 0,
left = 0,
right = MBh.Property( "columnWidth" ),
alignment = LUI.Alignment.Left,
font = CoD.TextSettings.NormalFont.Font,
red = MBh.Property( "red" ),
green = MBh.Property( "green" ),
blue = MBh.Property( "blue" )
},
hilite = {
red = 0,
green = 0,
blue = 0
}
},
handlers = {
button_over = MBh.AnimateToState( "hilite" ),
button_up = MBh.AnimateToState( "default" )
}
}
end
function HandleLeaderboardCellMarqueeSetHilite( f7_arg0, f7_arg1 )
f7_arg0:SetColor( 0, 0, 0 )
end
function HandleLeaderboardCellMarqueeSetNotHilite( f8_arg0, f8_arg1 )
local f8_local0 = f8_arg0.properties
f8_arg0:SetColor( f8_local0.red, f8_local0.green, f8_local0.blue )
end
function mp_leaderboard_cell_marquee_value()
return {
type = "UIMarqueeText",
id = "mp_leaderboard_cell_marquee_value",
properties = {
text = "",
columnWidth = 100,
red = Colors.white.r,
green = Colors.white.g,
blue = Colors.white.b
},
states = {
default = {
topAnchor = false,
bottomAnchor = true,
leftAnchor = true,
rightAnchor = false,
top = -CoD.TextSettings.NormalFont.Height,
bottom = 0,
left = 0,
right = MBh.Property( "columnWidth" ),
alignment = LUI.Alignment.Left,
font = CoD.TextSettings.NormalFont.Font,
red = MBh.Property( "red" ),
green = MBh.Property( "green" ),
blue = MBh.Property( "blue" )
}
},
handlers = {
button_over = HandleLeaderboardCellMarqueeSetHilite,
button_up = HandleLeaderboardCellMarqueeSetNotHilite
}
}
end
f0_local0 = function ( f10_arg0, f10_arg1 )
local f10_local0 = LUI.FlowManager.GetMenuScopedDataFromElement( f10_arg0 )
f10_arg0:processEvent( {
name = "lose_focus"
} )
f10_arg0:clearSavedState()
local f10_local1 = false
local f10_local2 = f10_arg0:getFirstChild()
while f10_local2 do
local self = f10_local2:getNextSibling()
if f10_local2.properties and f10_local2.properties.rankIndex and f10_local2.properties.rankIndex == f10_local0.newRankIndex then
f10_local1 = true
f10_local2.listDefaultFocus = true
else
f10_local2.listDefaultFocus = false
end
f10_local2 = self
end
if not f10_local1 then
local self = f10_arg0:getFirstChild()
while self do
local f10_local4 = self:getNextSibling()
if self.properties and self.properties.rowIndex and self.properties.rowIndex == 1 then
self.listDefaultFocus = true
else
self.listDefaultFocus = false
end
self = f10_local4
end
end
Leaderboards.UpdateCurrentIndex( f10_arg1.controller, f10_local0.newRankIndex )
Leaderboards.UpdateLeaderboard( f10_arg1.controller, f10_local0.newRankIndex )
if f10_local0.readDelayFail then
if f10_arg0:getChildById( "leaderboard_changeindex_timer_id" ) == nil then
local self = LUI.UITimer.new( 50, {
name = "try_change_index",
controller = f10_arg1.controller
} )
self.id = "leaderboard_changeindex_timer_id"
f10_arg0:addElement( self )
end
f10_local0.readDelayFail = false
else
local self = f10_arg0:getChildById( "leaderboard_changeindex_timer_id" )
if self then
self:close()
end
f10_arg0:processEvent( {
name = "leaderboard_refresh"
} )
end
end
f0_local1 = function ( f11_arg0, f11_arg1, f11_arg2, f11_arg3 )
local f11_local0 = LUI.FlowManager.GetMenuScopedDataFromElement( f11_arg0 )
f11_local0.currentRankIndex = f11_arg3
f11_local0.newRankIndex = f11_arg2
f11_arg0:processEvent( {
name = "try_change_index",
controller = f11_arg1
} )
end
function HandleLeaderboardWrap( f12_arg0, f12_arg1 )
local f12_local0 = f12_arg0.properties.exclusiveController
if not f12_local0 then
f12_local0 = Engine.GetFirstActiveController()
end
f0_local1( f12_arg0:getParent(), f12_local0, f12_arg0.properties.index, Leaderboards.GetCurrentIndex( f12_local0 ) )
end
function LeaderboardSelectAction( f13_arg0, f13_arg1 )
if Engine.IsPS3() or Engine.IsPS4() then
return
end
local f13_local0 = LUI.FlowManager.GetMenuScopedDataByMenuName( "mp_leaderboard_main" )
f13_local0.selectedRowIndex = f13_arg0.properties.rankIndex
local f13_local1 = f13_arg0.properties.exclusiveController
if not f13_local1 then
f13_local1 = Engine.GetFirstActiveController()
end
Leaderboards.UpdateCurrentIndex( f13_local1, f13_arg0.properties.rankIndex )
Leaderboards.OnSelect( f13_local1 )
end
f0_local2 = function ( f14_arg0, f14_arg1 )
local f14_local0 = Engine.GetLuiRoot()
local f14_local1 = ""
if f14_local0 then
local f14_local2 = LUI.FlowManager.GetTopMenuInfo( f14_local0.flowManager.menuInfoStack )
if f14_local2 and f14_local2.name then
f14_local1 = f14_local2.name
end
end
if f14_local1 == "mp_leaderboard_main" and f14_arg1.down == true then
local f14_local2 = f14_arg0.properties.exclusiveController
if not f14_local2 then
f14_local2 = Engine.GetFirstActiveController()
end
local f14_local3 = Leaderboards.GetCurrentIndex( f14_local2 )
local f14_local4 = Leaderboards.GetPlayerCount()
local f14_local5
if f14_arg1.button ~= "dpad_up" and f14_arg1.button ~= "page_up" and (f14_arg1.button ~= "up" or f14_arg1.qualifier ~= "dpad") then
f14_local5 = false
else
f14_local5 = true
end
local f14_local6
if f14_arg1.button ~= "dpad_down" and f14_arg1.button ~= "page_down" and (f14_arg1.button ~= "down" or f14_arg1.qualifier ~= "dpad") then
f14_local6 = false
else
f14_local6 = true
end
if f14_local5 then
if Leaderboards.IsUpdating and Leaderboards.IsUpdating() then
return true
elseif f14_local4 <= 0 then
return true
elseif f14_local3 == 0 then
return true
end
local self = f14_local3 - Leaderboards.Layout.NumRows - 1
if self < 0 then
self = 0
end
f0_local1( f14_arg0, f14_local2, self, f14_local3 )
return true
elseif f14_local6 then
if Leaderboards.IsUpdating and Leaderboards.IsUpdating() then
return true
elseif f14_local4 <= 0 then
return true
elseif f14_local3 == f14_local4 - 1 then
return true
end
local self = f14_local3 + Leaderboards.Layout.NumRows - 1
if f14_local4 - 1 < self then
self = f14_local4 - 1
end
f0_local1( f14_arg0, f14_local2, self, f14_local3 )
return true
elseif f14_arg1.button == "up" then
if Leaderboards.IsUpdating and Leaderboards.IsUpdating() then
return true
elseif f14_local4 <= 0 then
return true
elseif f14_arg0:getChildById( "leaderboard_scrolldelay_timer_id" ) then
return true
end
local self = LUI.UITimer.new( 50, {
name = "scroll_delay_complete"
}, nil, true )
self.id = "leaderboard_scrolldelay_timer_id"
f14_arg0:addElement( self )
local f14_local8 = f14_local3 - 1
if f14_local8 < 0 then
f14_local8 = f14_local4 - 1
end
f0_local1( f14_arg0, f14_local2, f14_local8, f14_local3 )
return true
elseif f14_arg1.button == "down" then
if Leaderboards.IsUpdating and Leaderboards.IsUpdating() then
return true
elseif f14_local4 <= 0 then
return true
elseif f14_arg0:getChildById( "leaderboard_scrolldelay_timer_id" ) then
return true
end
local self = LUI.UITimer.new( 50, {
name = "scroll_delay_complete"
}, nil, true )
self.id = "leaderboard_scrolldelay_timer_id"
f14_arg0:addElement( self )
local f14_local8 = f14_local3 + 1
if f14_local4 - 1 < f14_local8 then
f14_local8 = 0
end
f0_local1( f14_arg0, f14_local2, f14_local8, f14_local3 )
return true
elseif f14_arg1.button == "home" then
f0_local1( f14_arg0, f14_local2, 0, f14_local3 )
return true
end
end
return LUI.UIButton.GamepadButton( f14_arg0, f14_arg1 )
end
function LeaderboardRankIconRefresh( f15_arg0, f15_arg1 )
local f15_local0 = f15_arg0.properties
local f15_local1 = f15_arg0.properties.exclusiveController
if not f15_local1 then
f15_local1 = Engine.GetFirstActiveController()
end
local f15_local2 = Leaderboards.GetValue( f15_local1, f15_local0.rankIndex, f15_local0.columnIndex )
if f15_local2 == nil or f15_local2 == "" then
f15_arg0:animateToState( "hidden" )
else
f15_arg0:setImage( RegisterMaterial( f15_local2 ) )
if f15_arg0.properties.focusable then
f15_arg0:animateToState( "default" )
else
f15_arg0:animateToState( "hidden" )
end
end
end
function LeaderboardLineButtonFeeder( f16_arg0 )
local f16_local0 = {}
local f16_local1 = Leaderboards.GetLeaderboardNumColumns( "Common" )
local f16_local2 = f16_local1 + Leaderboards.GetLeaderboardNumColumns( f16_arg0.leaderboardType )
local f16_local3 = {}
for f16_local4 = 1, f16_local1, 1 do
f16_local3[f16_local4] = Leaderboards.GetLeaderboardColumnWidth( "Common", f16_local4 )
end
for f16_local4 = 1, Leaderboards.GetLeaderboardNumColumns( f16_arg0.leaderboardType ), 1 do
f16_local3[f16_local1 + f16_local4] = Leaderboards.GetLeaderboardColumnWidth( f16_arg0.leaderboardType, f16_local4 )
end
local f16_local4 = {}
for f16_local5 = 1, f16_local1, 1 do
f16_local4[f16_local5] = Leaderboards.GetLeaderboardDataColumnIndex( "Common", f16_local5 )
end
for f16_local5 = 1, Leaderboards.GetLeaderboardNumColumns( f16_arg0.leaderboardType ), 1 do
f16_local4[f16_local1 + f16_local5] = Leaderboards.GetLeaderboardDataColumnIndex( f16_arg0.leaderboardType, f16_local5 )
end
for f16_local5 = 1, f16_local2, 1 do
if f16_local4[f16_local5] == 1 then
local f16_local8 = f16_arg0.exclusiveController
if not f16_local8 then
f16_local8 = Engine.GetFirstActiveController()
end
local f16_local9 = Leaderboards.GetValue( f16_local8, f16_arg0.rankIndex, f16_local4[f16_local5] )
local f16_local10 = Leaderboards.GetValue( f16_local8, f16_arg0.rankIndex, f16_local4[f16_local5] + 1 )
if f16_arg0.memTest == true then
f16_local10 = "99"
f16_local9 = "rank_pvt1"
end
f16_local0[#f16_local0 + 1] = {
type = "mp_leaderboard_cell_value",
id = "leaderboard_cell_value_rank_" .. f16_local5,
properties = {
text = f16_local10,
columnWidth = 0.5 * f16_local3[f16_local5]
}
}
local f16_local11 = RegisterMaterial( f16_local9 )
f16_local0[#f16_local0 + 1] = {
type = "UIImage",
id = "leaderboard_cell_value_rankicon_" .. f16_local5,
properties = {
rankIndex = f16_arg0.rankIndex,
columnIndex = f16_local4[f16_local5],
focusable = f16_arg0.focusable
},
states = {
default = {
topAnchor = false,
bottomAnchor = false,
leftAnchor = true,
rightAnchor = false,
left = 0,
width = 24,
height = 24,
alpha = 1
},
hidden = {
alpha = 0
}
},
handlers = {
leaderboard_update_elements = LeaderboardRankIconRefresh,
menu_create = LeaderboardRankIconRefresh
}
}
f16_local0[#f16_local0 + 1] = {
type = "UIImage",
states = {
default = {
topAnchor = true,
bottomAnchor = true,
leftAnchor = true,
rightAnchor = false,
top = 0,
bottom = 0,
left = 0,
right = f16_local3[f16_local5] * 0.5 - 24,
alpha = 0
}
}
}
end
local f16_local8 = "0"
if f16_arg0.memTest == true then
if f16_local4[f16_local5] == 0 then
f16_local8 = "00000000"
elseif f16_local4[f16_local5] == 3 then
f16_local8 = "WWWWWWWWWWWWWWWW"
end
else
local f16_local9 = f16_arg0.exclusiveController
if not f16_local9 then
f16_local9 = Engine.GetFirstActiveController()
end
f16_local8 = Leaderboards.GetValue( f16_local9, f16_arg0.rankIndex, f16_local4[f16_local5] )
end
if f16_local4[f16_local5] == 3 then
f16_local0[#f16_local0 + 1] = {
type = "mp_leaderboard_cell_marquee_value",
id = "leaderboard_cell_value_" .. f16_local5,
properties = {
text = f16_local8,
columnWidth = f16_local3[f16_local5] - 10
}
}
f16_local0[#f16_local0 + 1] = {
type = "UIImage",
states = {
default = {
topAnchor = true,
bottomAnchor = true,
leftAnchor = true,
rightAnchor = false,
top = 0,
bottom = 0,
left = 0,
right = 10,
alpha = 0
}
}
}
else
f16_local0[#f16_local0 + 1] = {
type = "mp_leaderboard_cell_value",
id = "leaderboard_cell_value_" .. f16_local5,
properties = {
text = f16_local8,
columnWidth = f16_local3[f16_local5]
}
}
end
end
return f16_local0
end
function mp_leaderboard_line_button()
return {
type = "UIButton",
id = "mp_leaderboard_line_button",
properties = {
rankIndex = 0,
leaderboardType = "Kills",
memTest = false,
focusable = false
},
states = {
default = {
topAnchor = true,
bottomAnchor = false,
leftAnchor = true,
rightAnchor = true,
top = 0,
bottom = Leaderboards.Layout.RowHeight,
left = 0,
right = 0
}
},
handlers = {
button_action = LeaderboardSelectAction,
leaderboard_update_elements = LeaderboardButtonSetFocusable
},
children = {
{
type = "UIImage",
id = "leaderboard_row_hilite",
states = {
default = CoD.ColorizeState( Colors.white, {
topAnchor = true,
bottomAnchor = true,
leftAnchor = true,
rightAnchor = true,
top = 0,
bottom = 0,
left = 0,
right = 0,
red = Engine.IsAliensMode() and Colors.alien_frontend_hilite.r or 1,
green = Engine.IsAliensMode() and Colors.alien_frontend_hilite.g or 1,
blue = Engine.IsAliensMode() and Colors.alien_frontend_hilite.b or 1,
material = RegisterMaterial( "white" ),
alpha = 0
} ),
dim = {
red = Engine.IsAliensMode() and Colors.alien_frontend_hilite.r or 1,
green = Engine.IsAliensMode() and Colors.alien_frontend_hilite.g or 1,
blue = Engine.IsAliensMode() and Colors.alien_frontend_hilite.b or 1,
alpha = 0.5
},
focus = {
red = Engine.IsAliensMode() and Colors.alien_frontend_hilite.r or 1,
green = Engine.IsAliensMode() and Colors.alien_frontend_hilite.g or 1,
blue = Engine.IsAliensMode() and Colors.alien_frontend_hilite.b or 1,
alpha = 0.8
}
},
handlers = {
button_over = MBh.AnimateLoop( {
{
"focus",
0
},
{
"dim",
750
},
{
"focus",
750
}
} ),
button_up = MBh.AnimateToState( "default" ),
lose_focus = MBh.AnimateToState( "default" )
}
},
{
type = "UIHorizontalList",
id = "leaderboard_row",
properties = {
rankIndex = MBh.Property( "rankIndex" ),
leaderboardType = MBh.Property( "leaderboardType" ),
memTest = MBh.Property( "memTest" ),
focusable = MBh.Property( "focusable" )
},
states = {
default = {
topAnchor = true,
bottomAnchor = false,
leftAnchor = true,
rightAnchor = true,
top = 0,
bottom = Leaderboards.Layout.RowHeight,
left = 5,
right = 0
}
},
childrenFeeder = LeaderboardLineButtonFeeder
}
}
}
end
local f0_local3 = function ( f18_arg0, f18_arg1, f18_arg2 )
local f18_local0 = Leaderboards.GetOffset( f18_arg0 )
local f18_local1 = 0
if f18_arg2 <= Leaderboards.Layout.NumRows - 1 then
f18_local1 = 0
else
f18_local1 = f18_arg1 - Leaderboards.Layout.NumRows / 2 - 1
if f18_local1 < f18_local0 then
f18_local1 = f18_local0
elseif f18_arg2 - Leaderboards.Layout.NumRows - 1 < f18_local1 then
f18_local1 = f18_arg2 - Leaderboards.Layout.NumRows - 1
end
end
return f18_local1
end
function LeaderboardDataListRowFeeder( f19_arg0 )
local f19_local0 = {}
local f19_local1 = 0
local f19_local2 = 0
local f19_local3 = 0
if f19_arg0.memTest == true then
f19_local1 = 200
f19_local2 = 0
f19_local3 = 25
else
f19_local1 = Leaderboards.GetPlayerCount()
local f19_local4 = f19_arg0.exclusiveController
if not f19_local4 then
f19_local4 = Engine.GetFirstActiveController()
end
f19_local3 = Leaderboards.GetCurrentIndex( f19_local4 )
f19_local2 = f0_local3( f19_local4, f19_local3, f19_local1 )
end
for f19_local4 = 1, Leaderboards.Layout.NumRows - 1, 1 do
local f19_local7 = f19_local2 + f19_local4 - 1
local f19_local8 = f19_local7 < f19_local1
local f19_local9 = nil
if f19_local7 == f19_local3 then
f19_local9 = true
end
f19_local0[#f19_local0 + 1] = {
type = "mp_leaderboard_line_button",
id = "leaderboard_button_" .. f19_local4,
listDefaultFocus = f19_local9,
focusable = f19_local8,
disabled = not f19_local8,
properties = {
rowIndex = f19_local4,
rankIndex = f19_local7,
leaderboardType = f19_arg0.leaderboardType,
memTest = f19_arg0.memTest,
focusable = f19_local8
}
}
end
return f19_local0
end
function LeaderboardVertStripeFeeder( f20_arg0 )
local f20_local0 = {}
local f20_local1 = Leaderboards.GetLeaderboardNumColumns( "Common" )
local f20_local2 = f20_local1 + Leaderboards.GetLeaderboardNumColumns( f20_arg0.leaderboardType )
local f20_local3 = {}
for f20_local4 = 1, f20_local1, 1 do
f20_local3[f20_local4] = Leaderboards.GetLeaderboardColumnWidth( "Common", f20_local4 )
end
for f20_local4 = 1, Leaderboards.GetLeaderboardNumColumns( f20_arg0.leaderboardType ), 1 do
f20_local3[f20_local1 + f20_local4] = Leaderboards.GetLeaderboardColumnWidth( f20_arg0.leaderboardType, f20_local4 )
end
local f20_local4 = {}
for f20_local5 = 1, f20_local2, 1 do
local f20_local8 = 0
if f20_local5 % 2 == 0 then
f20_local8 = 0.15
end
f20_local0[#f20_local0 + 1] = {
type = "UIImage",
states = {
default = {
topAnchor = true,
bottomAnchor = true,
leftAnchor = true,
rightAnchor = false,
top = 0,
bottom = 0,
left = 0,
right = f20_local3[f20_local5],
material = RegisterMaterial( "white" ),
red = 0,
green = 0,
blue = 0,
alpha = f20_local8
}
},
id = "vert_stripe_" .. f20_local5
}
end
return f20_local0
end
function mp_leaderboard_page_bg()
return {
type = "UIVerticalList",
id = "mp_leaderboard_page_bg_id",
states = {
default = {
topAnchor = true,
bottomAnchor = false,
leftAnchor = true,
rightAnchor = true,
top = 0,
bottom = Leaderboards.Layout.HeaderHeight + Leaderboards.Layout.RowHeight * Leaderboards.Layout.NumRows,
left = 1,
right = -1
}
},
childrenFeeder = LeaderboardListRowFeeder
}
end
function mp_leaderboard_page_vert_stripes()
return {
type = "UIHorizontalList",
id = "mp_leaderboard_page_vert_stripes_id",
properties = {
leaderboardType = "Kills"
},
states = {
default = {
topAnchor = true,
bottomAnchor = false,
leftAnchor = true,
rightAnchor = true,
top = 0,
bottom = Leaderboards.Layout.HeaderHeight + Leaderboards.Layout.RowHeight * Leaderboards.Layout.NumRows,
left = 1,
right = -1
}
},
childrenFeeder = LeaderboardVertStripeFeeder
}
end
local f0_local4 = function ( f23_arg0, f23_arg1 )
f23_arg0:clearSavedState()
end
local f0_local5 = function ( f24_arg0, f24_arg1 )
local f24_local0 = f24_arg0:getFirstChild()
while f24_local0 do
local f24_local1 = f24_local0:getNextSibling()
f24_local0.listDefaultFocus = false
if f24_local0.properties and f24_local0.properties.rowIndex == 1 then
f24_local0.listDefaultFocus = true
end
f24_local0 = f24_local1
end
end
local f0_local6 = function ( f25_arg0, f25_arg1 )
collectgarbage( "collect" )
local f25_local0 = LUI.FlowManager.GetMenuScopedDataFromElement( f25_arg0 )
f25_local0.readDelayFail = false
f25_arg0:processEvent( {
name = "lose_focus"
} )
f25_arg0:processEvent( {
name = "menu_refresh"
} )
f25_arg0:processEvent( {
name = "leaderboard_update_elements",
dispatchChildren = true
} )
f25_arg0:processEvent( {
name = "update_navigation",
dispatchChildren = true
} )
local f25_local1 = f25_arg0.properties.exclusiveController
if not f25_local1 then
f25_local1 = Engine.GetFirstActiveController()
end
local f25_local2 = Leaderboards.GetCurrentIndex( f25_local1 )
local f25_local3 = f25_arg0:getFirstChild()
while f25_local3 do
local f25_local4 = f25_local3:getNextSibling()
f25_local3.listDefaultFocus = false
if f25_local3:isInFocus() then
f25_local3:processEvent( {
name = "lose_focus"
} )
end
if f25_local3.properties and f25_local3.properties.rankIndex == f25_local2 then
f25_local3:processEvent( {
name = "gain_focus"
} )
f25_local3.listDefaultFocus = true
end
f25_local3 = f25_local4
end
if f25_local0.scrollbar then
local f25_local4 = Leaderboards.GetPlayerCount()
local f25_local5 = f0_local3( f25_local1, Leaderboards.GetCurrentIndex( f25_local1 ), f25_local4 )
if f25_local4 <= Leaderboards.Layout.NumRows then
f25_local0.scrollbar:processEvent( {
name = "hide_scrollbar",
immediate = true
} )
else
f25_local0.scrollbar:processEvent( {
name = "show_scrollbar",
immediate = true
} )
f25_local0.scrollbar:manualUpdate( f25_local5, Leaderboards.Layout.NumRows, f25_local4, Leaderboards.Layout.RowHeight )
end
end
end
function LeaderboardClose( f26_arg0, f26_arg1 )
if Leaderboards.Clear then
Leaderboards.Clear()
end
LUI.FlowManager.RequestLeaveMenu( f26_arg0 )
end
function mp_leaderboard_page_data()
return {
type = "UIElement",
id = "mp_leaderboard_page_data_id",
properties = {
leaderboardType = "Kills",
filterType = "Friends",
memTest = false
},
states = {
default = {
topAnchor = true,
bottomAnchor = false,
leftAnchor = true,
rightAnchor = true,
top = 0,
bottom = Leaderboards.Layout.HeaderHeight + Leaderboards.Layout.RowHeight * Leaderboards.Layout.NumRows,
left = 1,
right = -1
}
},
handlers = {
menu_create = function ( f28_arg0, f28_arg1 )
if f28_arg0.properties and not f28_arg0.properties.memTest then
local f28_local0 = LUI.FlowManager.GetMenuScopedDataFromElement( f28_arg0 )
f28_local0.scrollbar = f28_arg0:getFirstDescendentById( "scrollbar" )
f28_local0.leaderboardType = f28_arg0.properties.leaderboardType
local f28_local1 = Leaderboards.GetLeaderboardDefaultDurationKey( f28_arg0.properties.leaderboardType )
if f28_local1 == nil or f28_local1 == "" then
local f28_local2 = Leaderboards.LeaderboardFilterGetDurationKeys( f28_arg0.properties.leaderboardType )
if #f28_local2 > 0 then
f28_local1 = f28_local2[1]
else
f28_local1 = ""
end
end
local f28_local2 = false
if Engine.GetDvarBool( "g_hardcore" ) and Leaderboards.GetLeaderboardHasHardcoreMode( f28_arg0.properties.leaderboardType ) then
f28_local2 = true
end
if f28_local0.isPublicLobbyLeaderboard and Engine.IsAliensMode() and Leaderboards.GetLeaderboardHasHardcoreMode( f28_arg0.properties.leaderboardType ) and LUI.mp_menus.Aliens.ExtinctionDetermineDifficulty() == LUI.mp_menus.Aliens.ExtinctionDifficluty.Hard then
f28_local2 = true
end
Leaderboards.OpenLeaderboard( f28_arg0, f28_arg0.properties.leaderboardType, f28_arg0.properties.filterType, f28_local1, f28_local2 )
Leaderboards.Refresh()
end
end
},
children = {
{
type = "UIHorizontalList",
id = "mp_leaderboard_page_header_id",
properties = {
leaderboardType = MBh.Property( "leaderboardType" )
},
states = {
default = {
topAnchor = true,
bottomAnchor = false,
leftAnchor = true,
rightAnchor = true,
top = 0,
bottom = Leaderboards.Layout.HeaderHeight,
left = 0,
right = 0
}
},
handlers = {
leaderboard_refresh = MBh.EmitEvent( "menu_refresh" )
},
childrenFeeder = LeaderboardHeaderRowFeeder
},
{
type = "UIHorizontalList",
id = "mp_leaderboard_page_player_id",
properties = {
leaderboardType = MBh.Property( "leaderboardType" )
},
states = {
default = {
topAnchor = true,
bottomAnchor = false,
leftAnchor = true,
rightAnchor = true,
top = Leaderboards.Layout.HeaderHeight,
bottom = Leaderboards.Layout.HeaderHeight + Leaderboards.Layout.RowHeight,
left = 5,
right = -10
}
},
handlers = {
leaderboard_refresh = MBh.EmitEvent( "menu_refresh" )
},
childrenFeeder = LeaderboardPlayerRowFeeder
},
{
type = "UIStencil",
id = "mp_leaderboard_page_stencil_id",
properties = {
leaderboardType = MBh.Property( "leaderboardType" ),
memTest = MBh.Property( "memTest" )
},
states = {
default = {
topAnchor = true,
bottomAnchor = true,
leftAnchor = true,
rightAnchor = true,
top = Leaderboards.Layout.HeaderHeight + Leaderboards.Layout.RowHeight,
bottom = 0,
left = 0,
right = -10
}
},
children = {
{
type = "UIVerticalList",
id = "mp_leaderboard_page_list_id",
properties = {
leaderboardType = MBh.Property( "leaderboardType" ),
memTest = MBh.Property( "memTest" ),
disableOutsideChildren = true
},
states = {
default = {
topAnchor = true,
bottomAnchor = false,
leftAnchor = true,
rightAnchor = true,
top = 0,
bottom = Leaderboards.Layout.RowHeight * (Leaderboards.Layout.NumRows - 1),
left = 0,
right = -10
}
},
handlers = {
leaderboard_clear = f0_local5,
leaderboard_refresh = f0_local6,
leaderboard_read_delayfail = function ( f29_arg0, f29_arg1 )
local f29_local0 = LUI.FlowManager.GetMenuScopedDataFromElement( f29_arg0 )
f29_local0.readDelayFail = true
end
,
menu_create = function ( f30_arg0, f30_arg1 )
local f30_local0 = LUI.FlowManager.GetMenuScopedDataFromElement( f30_arg0 )
f30_local0.readDelayFail = false
f30_local0.leaderboardList = f30_arg0
end
,
try_change_index = f0_local0,
gamepad_button = f0_local2
},
childrenFeeder = LeaderboardDataListRowFeeder
}
}
},
{
type = "UIVerticalScrollbar",
id = "scrollbar",
properties = {
on_move_func = function ( f31_arg0, f31_arg1, f31_arg2, f31_arg3 )
local f31_local0 = LUI.FlowManager.GetMenuScopedDataFromElement( f31_arg0 )
local f31_local1 = Leaderboards.GetPlayerCount()
local f31_local2 = LUI.clamp( math.floor( f31_arg2 * f31_local1 ), 0, math.max( 0, f31_local1 - Leaderboards.Layout.NumRows ) )
local f31_local3 = f31_arg3.exclusiveController
if not f31_local3 then
f31_local3 = Engine.GetFirstActiveController()
end
f0_local1( f31_local0.leaderboardList, f31_local3, f31_local2, Leaderboards.GetCurrentIndex( f31_local3 ) )
end
},
states = {
default = {
topAnchor = true,
bottomAnchor = true,
leftAnchor = false,
rightAnchor = true,
top = Leaderboards.Layout.HeaderHeight,
bottom = 0,
left = -14,
right = -2,
alpha = 1
},
visible = {
alpha = 1
},
hidden = {
alpha = 0
}
},
handlers = {
hide_scrollbar = MBh.AnimateToState( "hidden", 0 ),
show_scrollbar = MBh.AnimateToState( "visible", 0 ),
init_scrollbar = function ( f32_arg0, f32_arg1 )
local f32_local0 = LUI.FlowManager.GetMenuScopedDataFromElement( f32_arg0 )
f32_arg0:manualUpdate( 0, Leaderboards.Layout.NumRows, 100, Leaderboards.Layout.RowHeight )
end
},
children = {
{
type = "UITimer",
properties = {
event = "init_scrollbar",
interval = 1,
disposable = true,
deferNextFrame = true
}
}
}
}
}
}
end
function LeaderboardGoToTop( f33_arg0, f33_arg1 )
local f33_local0 = LUI.FlowManager.GetMenuScopedDataFromElement( f33_arg0 )
local f33_local1 = f33_arg0.properties.exclusiveController
if not f33_local1 then
f33_local1 = Engine.GetFirstActiveController()
end
f0_local1( f33_local0.leaderboardList, f33_local1, 0, Leaderboards.GetCurrentIndex( f33_local1 ) )
end
function LeaderboardPageUp( f34_arg0, f34_arg1 )
local f34_local0 = f34_arg0.properties.exclusiveController
if not f34_local0 then
f34_local0 = Engine.GetFirstActiveController()
end
local f34_local1 = Leaderboards.GetCurrentIndex( f34_local0 )
if f34_local1 == 0 then
return
end
local f34_local2 = f34_local1 - Leaderboards.Layout.NumRows - 1
if f34_local2 < 0 then
f34_local2 = 0
end
f0_local1( scoped.leaderboardList, f34_local0, f34_local2, f34_local1 )
end
function LeaderboardPageDown( f35_arg0, f35_arg1 )
local f35_local0 = f35_arg0.properties.exclusiveController
if not f35_local0 then
f35_local0 = Engine.GetFirstActiveController()
end
local f35_local1 = Leaderboards.GetCurrentIndex( f35_local0 )
if f35_local1 == count - 1 then
return
end
newIdx = f35_local1 + Leaderboards.Layout.NumRows - 1
if count - 1 < newIdx then
newIdx = count - 1
end
f0_local1( scoped.leaderboardList, f35_local0, newIdx, f35_local1 )
end
function LeaderboardOpenFiltersMenu( f36_arg0, f36_arg1 )
LUI.FlowManager.RequestPopupMenu( f36_arg0, "mp_leaderboard_filters_popup", true, f36_arg1.controller, false, {} )
end
function LeaderboardMainFeeder( f37_arg0 )
local f37_local0 = {
[#f37_local0 + 1] = {
type = "generic_drop_shadow",
properties = {
offset_shadow = 0
}
},
[#f37_local0 + 1] = {
type = "generic_menu_background",
id = "leaderboard_border",
properties = {
fill_alpha = 1
}
},
[#f37_local0 + 1] = {
type = "aar_title_bar",
id = "leaderboard_title_bar_id",
properties = {
title_text = Engine.Localize( "@LUA_MENU_LEADERBOARDS_CAPS" ),
subtitle_text = Engine.Localize( Leaderboards.GetLeaderboardFilterTitle( f37_arg0.filterType ), Engine.Localize( Leaderboards.GetLeaderboardTitle( f37_arg0.leaderboardType ) ) ),
subtitle_banner_width = Leaderboards.Layout.SubtitleBannerWidth
}
},
[#f37_local0 + 1] = {
type = "UIElement",
states = {
default = {
topAnchor = true,
bottomAnchor = true,
leftAnchor = true,
rightAnchor = true,
top = AAR.Layout.TitleBarHeight + AAR.Layout.SubTitleBarHeight,
bottom = 0,
left = 1,
right = -1
}
},
children = {
{
type = "mp_leaderboard_page_bg"
},
{
type = "mp_leaderboard_page_vert_stripes",
properties = {
leaderboardType = f37_arg0.leaderboardType
}
},
{
type = "mp_leaderboard_page_data",
properties = {
leaderboardType = f37_arg0.leaderboardType,
filterType = f37_arg0.filterType
}
},
{
type = "button_helper_text_main",
id = "help_texts",
properties = {
left_inset = 10,
top_margin = GenericFooterDims.TopMargin_WithoutBackground,
background_alpha = 0,
height = AAR.Layout.FooterHeight - 1,
spacing = 65
}
},
{
type = "UIBindButton",
id = "leaderboard_bind_buttons_id",
handlers = {
button_secondary = LeaderboardClose,
button_alt1 = LeaderboardGoToTop,
button_alt2 = LeaderboardOpenFiltersMenu,
button_dpad_up = LeaderboardPageUp,
button_dpad_down = LeaderboardPageDown
}
}
}
}
}
return f37_local0
end
function LeaderboardMainCreate( f38_arg0, f38_arg1 )
f38_arg0:processEvent( {
name = "add_button_helper_text",
button_ref = "button_secondary",
helper_text = Engine.Localize( "@LUA_MENU_BACK" ),
side = "left",
clickable = true
} )
if Engine.IsGamepadEnabled() == 1 and not Engine.IsPS3() and not Engine.IsPS4() then
f38_arg0:processEvent( {
name = "add_button_helper_text",
button_ref = "button_action",
helper_text = Engine.Localize( "@LUA_MENU_SELECT" ),
side = "left",
clickable = true
} )
end
f38_arg0:processEvent( {
name = "add_button_helper_text",
button_ref = "button_alt2",
helper_text = Engine.Localize( "@LUA_MENU_FILTER" ),
side = "left",
clickable = true
} )
if Engine.IsConsoleGame() or Engine.IsGamepadEnabled() == 1 then
f38_arg0:processEvent( {
name = "add_button_helper_text",
button_ref = "button_alt1",
helper_text = Engine.Localize( "@LUA_MENU_TOP" ),
side = "left",
clickable = true
} )
f38_arg0:processEvent( {
name = "add_button_helper_text",
button_ref = "button_dpad_up",
helper_text = Engine.Localize( "@LUA_MENU_PAGE_UP" ),
side = "left",
clickable = true
} )
f38_arg0:processEvent( {
name = "add_button_helper_text",
button_ref = "button_dpad_down",
helper_text = Engine.Localize( "@LUA_MENU_PAGE_DOWN" ),
side = "left",
clickable = true
} )
else
f38_arg0:processEvent( {
name = "add_button_helper_text",
button_ref = "button_home",
helper_text = Engine.Localize( "@LUA_MENU_TOP" ),
side = "left",
clickable = true
} )
f38_arg0:processEvent( {
name = "add_button_helper_text",
button_ref = "button_page_up",
helper_text = Engine.Localize( "@LUA_MENU_PAGE_UP" ),
side = "left",
clickable = true
} )
f38_arg0:processEvent( {
name = "add_button_helper_text",
button_ref = "button_page_down",
helper_text = Engine.Localize( "@LUA_MENU_PAGE_DOWN" ),
side = "left",
clickable = true
} )
end
end
function mp_leaderboard_main()
return {
type = "UIElement",
id = "mp_leaderboard_main_id",
properties = {
leaderboardType = "Kills",
filterType = "Friends"
},
states = {
default = {
topAnchor = true,
bottomAnchor = true,
leftAnchor = true,
rightAnchor = true,
top = 0,
bottom = 0,
left = 0,
right = 0
}
},
handlers = {
leaderboard_clear = f0_local4
},
children = {
{
type = "UIImage",
id = "darken_bg",
states = {
default = CoD.ColorizeState( Swatches.Overlay.Color, {
topAnchor = true,
bottomAnchor = true,
leftAnchor = true,
rightAnchor = true,
left = 0,
right = 0,
top = 0,
bottom = 0,
material = RegisterMaterial( "white" ),
alpha = Swatches.Overlay.AlphaMore
} )
}
},
{
type = "UIElement",
id = "mp_leaderboard_main_popup_id",
properties = {
leaderboardType = MBh.Property( "leaderboardType" ),
filterType = MBh.Property( "filterType" )
},
states = {
default = {
topAnchor = false,
bottomAnchor = false,
leftAnchor = false,
rightAnchor = false,
top = -1 * (AAR.Layout.TitleBarHeight + AAR.Layout.SubTitleBarHeight + Leaderboards.Layout.HeaderHeight + Leaderboards.Layout.RowHeight * Leaderboards.Layout.NumRows + AAR.Layout.FooterHeight) * 0.5,
bottom = (AAR.Layout.TitleBarHeight + AAR.Layout.SubTitleBarHeight + Leaderboards.Layout.HeaderHeight + Leaderboards.Layout.RowHeight * Leaderboards.Layout.NumRows + AAR.Layout.FooterHeight) * 0.5,
left = -1 * Leaderboards.Layout.Width * 0.5,
right = Leaderboards.Layout.Width * 0.5
}
},
handlers = {
menu_create = LeaderboardMainCreate
},
childrenFeeder = LeaderboardMainFeeder
}
}
}
end
LUI.MenuBuilder.registerDef( "mp_leaderboard_main", mp_leaderboard_main )
LUI.FlowManager.RegisterStackPopBehaviour( "mp_leaderboard_main", LeaderboardPop )
LUI.MenuBuilder.registerDef( "mp_leaderboard_page_bg", mp_leaderboard_page_bg )
LUI.MenuBuilder.registerDef( "mp_leaderboard_page_vert_stripes", mp_leaderboard_page_vert_stripes )
LUI.MenuBuilder.registerDef( "mp_leaderboard_page_data", mp_leaderboard_page_data )
LUI.MenuBuilder.registerDef( "mp_leaderboard_cell_value", mp_leaderboard_cell_value )
LUI.MenuBuilder.registerDef( "mp_leaderboard_cell_marquee_value", mp_leaderboard_cell_marquee_value )
LUI.MenuBuilder.registerDef( "mp_leaderboard_line_button", mp_leaderboard_line_button )
LockTable( _M )