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

1721 lines
41 KiB
Lua

local f0_local0 = module
local f0_local1, f0_local2 = ...
f0_local0( f0_local1, package.seeall )
CoD.PrintModuleLoad( _NAME )
function chaos_main_score()
local f1_local0 = 220
local f1_local1 = 64
local f1_local2 = 16
local f1_local3 = 16
local f1_local4 = 1.5
local self = LUI.UIElement.new( {
topAnchor = true,
bottomAnchor = false,
leftAnchor = false,
rightAnchor = true,
top = 0,
height = f1_local1,
width = f1_local0,
right = 4
} )
self.id = "chaos_main_score"
local f1_local6 = LUI.UIHorizontalList.new( {
topAnchor = true,
bottomAnchor = true,
leftAnchor = true,
rightAnchor = true,
top = 0,
bottom = 0,
left = 0,
right = 0
} )
f1_local6.id = "background"
self:addElement( f1_local6 )
local f1_local7 = LUI.UIImage.new( {
material = RegisterMaterial( "hud_box_combo_score_ltcap" ),
topAnchor = true,
bottomAnchor = true,
leftAnchor = true,
rightAnchor = false,
top = 0,
bottom = 0,
left = 0,
right = f1_local2
} )
f1_local7.id = "bgLeft"
f1_local6:addElement( f1_local7 )
local f1_local8 = LUI.UIImage.new( {
material = RegisterMaterial( "hud_box_combo_score_mid" ),
topAnchor = true,
bottomAnchor = true,
leftAnchor = true,
rightAnchor = false,
top = 0,
bottom = 0,
left = 0,
right = f1_local0 - f1_local2 - f1_local3
} )
f1_local8.id = "bgMid"
f1_local6:addElement( f1_local8 )
local f1_local9 = LUI.UIImage.new( {
material = RegisterMaterial( "hud_box_combo_score_rtcap" ),
topAnchor = true,
bottomAnchor = true,
leftAnchor = true,
rightAnchor = false,
top = 0,
bottom = 0,
left = 0,
right = f1_local3
} )
f1_local9.id = "bgRight"
f1_local6:addElement( f1_local9 )
local f1_local10 = LUI.UIText.new( CoD.ColorizeState( Colors.primary_text_color, {
font = CoD.TextSettings.SmallFont.Font,
alignment = LUI.Alignment.Center,
topAnchor = true,
bottomAnchor = false,
leftAnchor = true,
rightAnchor = true,
left = 0,
top = 6,
right = 0,
height = CoD.TextSettings.SmallFont.Height
} ) )
f1_local10.id = "title"
f1_local10:setText( Engine.Localize( "ALIEN_CHAOS_SCORE" ) )
self:addElement( f1_local10 )
local f1_local11 = Game.GetOmnvar( "ui_alien_chaos_total_score" )
local f1_local12 = LUI.UIPrettyNumber.new( CoD.ColorizeState( Colors.alien_chaos_hilite, {
font = CoD.TextSettings.ExtraBigFont.Font,
alignment = LUI.Alignment.Center,
topAnchor = false,
bottomAnchor = true,
leftAnchor = true,
rightAnchor = true,
left = 0,
bottom = -8,
right = 0,
height = CoD.TextSettings.ExtraBigFont.Height
} ), {
speed = 1000,
initialValue = f1_local11,
precision = 5
} )
f1_local12.id = "score"
f1_local12:setTextStyle( CoD.TextStyle.Outlined )
self:addElement( f1_local12 )
local f1_local13 = function ( f2_arg0, f2_arg1 )
assert( f1_local4 > 0 )
local f2_local0 = 0
if f2_arg0.getDisplayValue then
f2_local0 = f2_arg0:getDisplayValue()
end
f2_arg0:setSpeed( (f2_arg1.value - f2_local0) / f1_local4 )
f2_arg0:setValue( f2_arg1.value )
end
f1_local12:registerOmnvarHandler( "ui_alien_chaos_total_score", f1_local13 )
f1_local13( f1_local12, {
value = f1_local11
} )
return self
end
f0_local0 = 300
function chaos_combo_gauge()
local f3_local0 = 256
local f3_local1 = 40
local f3_local2 = 18
local f3_local3 = 12
local f3_local4 = 32
local f3_local5 = 130
local f3_local6 = 12
local f3_local7 = -2
local self = LUI.UIElement.new( {
topAnchor = true,
bottomAnchor = false,
leftAnchor = false,
rightAnchor = false,
top = 0,
height = f3_local1,
left = -f3_local0 / 2,
right = f3_local0 / 2
} )
self.id = "chaos_combo_gauge"
local f3_local9 = LUI.UIImage.new( {
material = RegisterMaterial( "hud_combo_meter_bg" ),
topAnchor = true,
bottomAnchor = true,
leftAnchor = true,
rightAnchor = true,
top = 0,
bottom = 0,
left = 0,
right = 0
} )
f3_local9.id = "background"
self:addElement( f3_local9 )
local f3_local10 = LUI.UIHorizontalList.new( {
topAnchor = true,
bottomAnchor = false,
leftAnchor = true,
rightAnchor = true,
top = 3,
height = f3_local4,
left = 0,
right = 0,
alignment = LUI.Alignment.Center
} )
f3_local10.id = "ticks"
self:addElement( f3_local10 )
for f3_local11 = 1, f3_local2, 1 do
local f3_local14 = f3_local11
local f3_local15 = LUI.UIElement.new( {
topAnchor = true,
bottomAnchor = true,
leftAnchor = true,
rightAnchor = false,
top = 0,
bottom = 0,
left = 0,
right = f3_local3
} )
f3_local15.id = "tick_" .. f3_local14
f3_local10:addElement( f3_local15 )
local f3_local16 = LUI.UIImage.new( {
material = RegisterMaterial( "hud_combo_meter_tic_empty" ),
topAnchor = true,
bottomAnchor = true,
leftAnchor = true,
rightAnchor = true,
top = 0,
bottom = 0,
left = 0,
right = 0,
alpha = 0.75
} )
f3_local16.id = "tickBorder"
f3_local15:addElement( f3_local16 )
local f3_local17 = LUI.UIImage.new( {
material = RegisterMaterial( "hud_combo_meter_tic_fill" ),
topAnchor = true,
bottomAnchor = true,
leftAnchor = true,
rightAnchor = true,
top = 1,
bottom = 1,
left = 0,
right = 0,
alpha = 0
} )
f3_local17:registerAnimationState( "frozen", CoD.ColorizeState( Colors.alien_chaos_freeze, {
alpha = 1
} ) )
local f3_local18 = {
r = 0.38,
g = 0.65,
b = 0.31
}
local f3_local19 = {
r = 0.9,
g = 0.78,
b = 0.1
}
local f3_local20 = {
r = 1,
g = 0.24,
b = 0.04
}
local f3_local21 = {
{
threshold = 0,
color = f3_local20
},
{
threshold = 0.19,
color = f3_local20
},
{
threshold = 0.31,
color = f3_local19
},
{
threshold = 0.53,
color = f3_local19
},
{
threshold = 0.64,
color = f3_local18
},
{
threshold = 1,
color = f3_local18
}
}
f3_local17.id = "tickFill"
f3_local15:addElement( f3_local17 )
local f3_local22 = LUI.UIImage.new( {
material = RegisterMaterial( "white" ),
topAnchor = true,
bottomAnchor = false,
leftAnchor = true,
rightAnchor = true,
top = 14,
height = 4,
left = 1,
right = -1,
alpha = 0
} )
f3_local22:registerAnimationState( "visible", {
alpha = 1
} )
f3_local22.id = "tickFlash"
f3_local15:addElement( f3_local22 )
f3_local15.fill = f3_local17
f3_local15.flash = f3_local22
f3_local15.ticksLit = 0
f3_local15:registerEventHandler( "refresh_ticks", function ( element, event )
local f4_local0 = f3_local14 <= event.ticksLit
if f4_local0 or event.frozen then
if event.frozen then
if not element.frozen then
element.fill:animateToState( "frozen", 350 )
end
elseif element.ticksLit ~= event.ticksLit then
if not element.lit then
local f4_local1 = MBh.AnimateSequence( {
{
"default",
0
},
{
"default",
20 * math.max( 0, f3_local14 - element.ticksLit )
},
{
"visible",
0
},
{
"default",
200
}
} )
f4_local1( element.flash, {} )
end
element.fill:registerAnimationState( "current", CoD.ColorizeState( CoD.GradientMap( f3_local21, event.ticksLit / f3_local2 ) ) )
element.fill:animateToState( "current" )
end
elseif element.lit then
element.fill:animateToState( "default", 100 )
end
element.frozen = event.frozen
element.ticksLit = event.ticksLit
element.lit = f4_local0
end )
end
local f3_local11 = LUI.UIElement.new( {
topAnchor = true,
bottomAnchor = true,
leftAnchor = true,
rightAnchor = true,
top = 0,
bottom = 0,
left = 0,
right = 0
} )
f3_local11.id = "frozen"
self:addElement( f3_local11 )
for f3_local12 = 1, f3_local5, 1 do
local f3_local15 = f3_local12
local f3_local16 = LUI.UIImage.new( {
material = RegisterMaterial( "alien_chaos_freeze_snowflake" ),
topAnchor = false,
bottomAnchor = false,
leftAnchor = true,
rightAnchor = false,
top = f3_local7 - math.random() * 10,
height = f3_local6,
left = 20 - f3_local6 / 2 + f3_local15 * (f3_local0 - 40) / f3_local5,
width = f3_local6,
scale = -1,
alpha = 0
} )
f3_local16:registerAnimationState( "visible", {
alpha = 1,
scale = 0.75 - 1.5 * math.random(),
zRot = 360 * math.random()
} )
f3_local16.id = "iceCube_" .. f3_local15
f3_local11:addElement( f3_local16 )
f3_local16:registerEventHandler( "refresh_ice_cubes", function ( element, event )
if f3_local15 <= event.cubesLit then
if not element.visible then
local f5_local0 = MBh.AnimateSequence( {
{
"default",
0
},
{
"default",
f0_local0 * f3_local15 / f3_local5
},
{
"visible",
200
}
} )
f5_local0( element, {} )
element.visible = true
end
elseif element.visible then
element:cancelAnimateToState()
element:animateToState( "default", 100 )
element.visible = nil
end
end )
end
local f3_local12 = LUI.UIElement.new( {
topAnchor = true,
bottomAnchor = true,
leftAnchor = true,
rightAnchor = true,
top = 8,
bottom = 8,
left = 0,
right = 0,
alpha = 0
} )
f3_local12:registerAnimationState( "visible", {
alpha = 1
} )
f3_local12.id = "icicles"
f3_local11:addElement( f3_local12 )
f3_local12:registerOmnvarHandler( "ui_alien_chaos_meter_freeze_end", function ( f6_arg0, f6_arg1 )
if f6_arg1.value > 0 then
f6_arg0:animateToState( "visible", f0_local0 )
else
f6_arg0:animateToState( "default", 400 )
end
end )
f3_local12:addElement( LUI.UIImage.new( {
material = RegisterMaterial( "alien_chaos_freeze_icicles" ),
topAnchor = true,
bottomAnchor = true,
leftAnchor = true,
rightAnchor = true,
top = 0,
bottom = 0,
left = 0,
right = 0
} ) )
f3_local12:addElement( LUI.UIImage.new( {
material = RegisterMaterial( "alien_chaos_freeze_icicles" ),
topAnchor = true,
bottomAnchor = true,
leftAnchor = true,
rightAnchor = true,
top = 0,
bottom = 0,
left = 0,
right = 0,
alpha = 0.2
} ) )
local f3_local15 = Game.GetOmnvar( "ui_alien_chaos_combo_meter_start" )
self:registerOmnvarHandler( "ui_alien_chaos_combo_meter_end", function ( f7_arg0, f7_arg1 )
f3_local15 = Game.GetTime()
end )
local f3_local16 = LUI.UITimer.new( 50, "combo_gauge_refresh" )
f3_local16.id = "refreshTimer"
self:addElement( f3_local16 )
self:registerEventHandler( "combo_gauge_refresh", function ( element, event )
local f8_local0 = Game.GetTime()
local f8_local1 = Game.GetOmnvar( "ui_alien_chaos_meter_freeze_start" )
local f8_local2 = Game.GetOmnvar( "ui_alien_chaos_meter_freeze_end" )
local f8_local3
if f8_local1 > f8_local0 or f8_local0 >= f8_local2 then
f8_local3 = false
else
f8_local3 = true
end
local f8_local4 = Game.GetOmnvar( "ui_alien_chaos_combo_meter_end" )
local f8_local5 = (f8_local4 - f8_local0) / (f8_local4 - f3_local15)
if f8_local3 then
f8_local5 = (f8_local0 - f8_local1) / f0_local0
end
f3_local10:processEvent( {
name = "refresh_ticks",
ticksLit = math.ceil( LUI.clamp( f8_local5, 0, 1 ) * f3_local2 ),
frozen = f8_local3,
duration = f8_local4 - f3_local15
} )
local f8_local6 = LUI.clamp( (f8_local2 - f8_local0) / (f8_local2 - f8_local1), 0, 1 )
if not f8_local3 then
f8_local6 = 0
end
f3_local11:processEvent( {
name = "refresh_ice_cubes",
cubesLit = math.ceil( f8_local6 * f3_local5 )
} )
end )
return self
end
function chaos_combo_score()
local f9_local0 = 200
local f9_local1 = 15
local f9_local2 = 36
local f9_local3 = 1.5
local self = LUI.UIHorizontalList.new( {
topAnchor = true,
bottomAnchor = false,
leftAnchor = true,
rightAnchor = true,
top = 24,
height = f9_local2,
left = 0,
right = 0,
alignment = LUI.Alignment.Center
} )
self.id = "chaos_combo_score"
local f9_local5 = LUI.UIText.new( CoD.ColorizeState( Colors.alien_tech_tree_bright_grey, {
font = CoD.TextSettings.ExtraBigFont.Font,
alignment = LUI.Alignment.Right,
topAnchor = false,
bottomAnchor = true,
leftAnchor = true,
rightAnchor = false,
left = 0,
bottom = 3,
width = f9_local0,
height = f9_local2,
scale = 0
} ) )
f9_local5:registerAnimationState( "pulse", CoD.ColorizeState( Colors.white, {
scale = 0.1
} ) )
f9_local5:registerAnimationState( "frozen", CoD.ColorizeState( Colors.alien_chaos_freeze, {
scale = 0
} ) )
f9_local5:setTextStyle( CoD.TextStyle.OutlinedMore )
f9_local5.id = "comboMultiplier"
self:addElement( f9_local5 )
local f9_local6 = 0
local f9_local7 = function ( f10_arg0, f10_arg1 )
local f10_local0 = MBh.AnimateSequence( {
{
"pulse",
50
},
{
f10_arg0.frozen and "frozen" or "default",
200
}
} )
f10_arg0:setText( f10_arg1.value .. "x" )
if f10_arg1.value > 0 then
f10_local0( f10_arg0, {} )
end
end
f9_local5:registerOmnvarHandler( "ui_alien_chaos_combo_counter", f9_local7 )
f9_local5:registerOmnvarHandler( "ui_alien_chaos_meter_freeze_start", function ( f11_arg0, f11_arg1 )
if f11_arg1.value > 0 then
f11_arg0:animateToState( "frozen", f0_local0 )
f11_arg0.frozen = true
else
f11_arg0:animateToState( "default", 100 )
f11_arg0.frozen = false
end
end )
f9_local7( f9_local5, {
value = Game.GetOmnvar( "ui_alien_chaos_combo_counter" )
} )
local f9_local8 = LUI.UIElement.new( {
topAnchor = true,
bottomAnchor = true,
leftAnchor = true,
rightAnchor = false,
top = 0,
bottom = 0,
left = 0,
width = f9_local1
} )
f9_local8.id = "padding"
self:addElement( f9_local8 )
local f9_local9 = LUI.UIPrettyNumber.new( CoD.ColorizeState( Colors.alien_chaos_hilite, {
font = CoD.TextSettings.HudIW6NormalFont.Font,
alignment = LUI.Alignment.Left,
topAnchor = false,
bottomAnchor = true,
leftAnchor = true,
rightAnchor = false,
left = 0,
bottom = 0,
width = f9_local0,
height = CoD.TextSettings.HudIW6NormalFont.Height
} ), {
speed = 150,
initialValue = Game.GetOmnvar( "ui_alien_chaos_score_streak" )
} )
f9_local9:registerAnimationState( "frozen", CoD.ColorizeState( Colors.alien_chaos_freeze ) )
f9_local9:setTextStyle( CoD.TextStyle.OutlinedMore )
f9_local9.id = "comboPoints"
self:addElement( f9_local9 )
local f9_local10 = function ( f12_arg0, f12_arg1 )
assert( f9_local3 > 0 )
local f12_local0 = 0
if f12_arg0.getDisplayValue then
f12_local0 = f12_arg0:getDisplayValue()
end
f12_arg0:setSpeed( (f12_arg1.value - f12_local0) / f9_local3 )
f12_arg0:setValue( f12_arg1.value )
end
f9_local9:registerOmnvarHandler( "ui_alien_chaos_score_streak", f9_local10 )
f9_local9:registerOmnvarHandler( "ui_alien_chaos_meter_freeze_start", function ( f13_arg0, f13_arg1 )
if f13_arg1.value > 0 then
f13_arg0:animateToState( "frozen", f0_local0 )
else
f13_arg0:animateToState( "default", 100 )
end
end )
f9_local10( f9_local9, {
value = Game.GetOmnvar( "ui_alien_chaos_score_streak" )
} )
return self
end
function chaos_combo_meter()
local self = nil
if Engine.UsingSplitscreenUpscaling() then
self = LUI.UIElement.new( {
topAnchor = false,
bottomAnchor = true,
leftAnchor = true,
rightAnchor = true,
bottom = -60,
height = 0,
left = 0,
right = 0
} )
else
self = LUI.UIElement.new( {
topAnchor = false,
bottomAnchor = false,
leftAnchor = true,
rightAnchor = true,
top = 50,
height = 0,
left = 0,
right = 0
} )
end
self.id = "chaos_combo_meter"
self:addElement( chaos_combo_gauge() )
self:addElement( chaos_combo_score() )
return self
end
function chaos_clock()
local f15_local0 = 256
local f15_local1 = 64
local f15_local2 = Game.GetOmnvar( "ui_alien_chaos_grace_period" )
local f15_local3 = {
{
time = 30000,
alias = "ui_mp_suitcasebomb_timer"
},
{
time = 20000,
alias = "ui_mp_suitcasebomb_timer"
},
{
time = 10000,
alias = "ui_mp_timer_countdown"
},
{
time = 9000,
alias = "ui_mp_timer_countdown"
},
{
time = 8000,
alias = "ui_mp_timer_countdown"
},
{
time = 7000,
alias = "ui_mp_timer_countdown"
},
{
time = 6000,
alias = "ui_mp_timer_countdown"
},
{
time = 5000,
alias = "ui_mp_timer_countdown"
},
{
time = 4000,
alias = "ui_mp_timer_countdown"
},
{
time = 3000,
alias = "ui_mp_timer_countdown"
},
{
time = 2000,
alias = "ui_mp_timer_countdown"
},
{
time = 1000,
alias = "ui_mp_timer_countdown"
}
}
local self = LUI.UIElement.new( {
topAnchor = true,
bottomAnchor = true,
leftAnchor = true,
rightAnchor = true,
top = 0,
bottom = 0,
left = 0,
right = 0
} )
self.id = "chaos_clock"
local f15_local5 = LUI.UIElement.new( {
topAnchor = true,
bottomAnchor = false,
leftAnchor = false,
rightAnchor = false,
bottom = 0,
height = f15_local1,
left = -f15_local0 / 2,
right = f15_local0 / 2,
alpha = 0
} )
f15_local5:registerAnimationState( "visible", {
topAnchor = true,
bottomAnchor = false,
leftAnchor = false,
rightAnchor = false,
top = 0,
height = f15_local1,
left = -f15_local0 / 2,
right = f15_local0 / 2,
alpha = 1
} )
f15_local5:registerAnimationState( "animating", {
topAnchor = true,
bottomAnchor = false,
leftAnchor = false,
rightAnchor = false,
top = 20,
height = f15_local1,
left = -f15_local0 / 2,
right = f15_local0 / 2,
alpha = 1
} )
f15_local5.id = "chaos_clock"
local f15_local6 = function ( f16_arg0, f16_arg1 )
local f16_local0 = nil
if 0 < f16_arg1 then
f16_local0 = MBh.AnimateSequence( {
{
"animating",
100
},
{
"visible",
150
}
} )
else
f16_local0 = MBh.AnimateSequence( {
{
"animating",
150
},
{
"default",
100
}
} )
end
f16_local0( f16_arg0, {} )
end
f15_local5:registerOmnvarHandler( "ui_alien_chaos_grace_period", function ( f17_arg0, f17_arg1 )
f15_local6( f17_arg0, f17_arg1.value )
end )
if f15_local2 > 0 then
f15_local6( f15_local5, f15_local2 )
end
local f15_local7 = LUI.UIImage.new( {
material = RegisterMaterial( "hud_box_combo_time" ),
topAnchor = true,
bottomAnchor = true,
leftAnchor = true,
rightAnchor = true,
top = 0,
bottom = 0,
left = 0,
right = 0
} )
f15_local7.id = "background"
f15_local5:addElement( f15_local7 )
local f15_local8 = LUI.UICountdown.new()
f15_local8:registerAnimationState( "default", {
font = CoD.TextSettings.ExtraBigFont.Font,
alignment = LUI.Alignment.center,
topAnchor = true,
bottomAnchor = false,
leftAnchor = true,
rightAnchor = true,
left = 0,
top = 15.5,
right = 0,
height = CoD.TextSettings.ExtraBigFont.Height,
red = 1,
green = 1,
blue = 1,
alpha = 1
} )
f15_local8:animateToState( "default" )
f15_local8.id = "value"
f15_local8.isPulsing = false
f15_local8:setTextStyle( CoD.TextStyle.Outlined )
f15_local8:setEndTime( f15_local2 )
f15_local8:registerOmnvarHandler( "ui_alien_chaos_grace_period", function ( f18_arg0, f18_arg1 )
f18_arg0:setEndTime( f18_arg1.value )
f18_arg0:animateToState( "default" )
f18_arg0.currentBeepIndex = 1
f18_arg0.isPulsing = false
end )
f15_local8:registerAnimationState( "pulse", {
red = 1,
blue = 0,
green = 0,
alpha = 1
} )
f15_local5:addElement( f15_local8 )
f15_local8.currentBeepIndex = 1
f15_local8:registerEventHandler( "timer_pulse_check", function ( element, event )
local f19_local0 = Game.GetTime()
local f19_local1 = Game.GetOmnvar( "ui_alien_chaos_grace_period" )
local f19_local2 = false
if element.currentBeepIndex <= #f15_local3 and f19_local1 - f19_local0 <= f15_local3[element.currentBeepIndex].time and f19_local1 > 0 then
Engine.PlaySound( f15_local3[element.currentBeepIndex].alias )
f19_local2 = true
element.currentBeepIndex = element.currentBeepIndex + 1
end
if not element.isPulsing == true then
if f19_local2 == true then
local f19_local3 = MBh.AnimateSequence( {
{
"pulse",
0
},
{
"pulse",
450
},
{
"default",
0
},
{
"default",
450
}
} )
f19_local3( element )
element:registerEventHandlerIfFree( LUI.FormatAnimStateFinishEvent( "default" ), function ( f20_arg0, f20_arg1 )
f20_arg0.isPulsing = false
f19_local2 = false
end )
end
elseif element.isPulsing == true and f19_local2 == false then
element:animateToState( "default" )
element.isPulsing = false
end
end )
local f15_local9 = LUI.UITimer.new( 50, "timer_pulse_check" )
f15_local9.id = "pulseTimer"
f15_local8:addElement( f15_local9 )
self:addElement( f15_local5 )
return self
end
ChaosPerksLUT = {
file = "mp/alien/chaos_perks.csv",
index = 2,
icon = 3
}
function CountChaosPerks()
local f21_local0 = 32
for f21_local1 = 1, f21_local0, 1 do
if Engine.TableLookup( ChaosPerksLUT.file, ChaosPerksLUT.index, tostring( f21_local1 ), 0 ) == "" then
return f21_local1 - 1
end
end
return f21_local0
end
function GetChaosPerksIcon( f22_arg0 )
return Engine.TableLookup( ChaosPerksLUT.file, ChaosPerksLUT.index, tostring( f22_arg0 ), ChaosPerksLUT.icon )
end
function chaos_perks()
local f23_local0 = 8
local f23_local1 = 36
local f23_local2 = 8
local f23_local3 = CountChaosPerks()
local f23_local4 = f23_local0 * f23_local1 + f23_local2 * (2 + math.max( 0, f23_local3 - 1 ))
local f23_local5 = math.ceil( f23_local3 / f23_local0 ) * f23_local1 + f23_local2 * (2 + math.max( 0, f23_local3 - 1 ))
local f23_local6 = 60
local self = LUI.UIElement.new( {
topAnchor = true,
bottomAnchor = false,
leftAnchor = true,
rightAnchor = false,
top = 0,
bottom = f23_local5,
left = 0,
width = f23_local4
} )
self.id = "chaos_perks"
self.perkElements = {}
local f23_local8 = LUI.UIImage.new( {
material = RegisterMaterial( "alien_health_bg_shadow" ),
topAnchor = true,
bottomAnchor = true,
leftAnchor = true,
rightAnchor = true,
top = -f23_local6,
bottom = 0,
left = -f23_local6,
right = f23_local6,
alpha = 0.8
} )
f23_local8.id = "background"
self:addElement( f23_local8 )
local f23_local9 = LUI.UIGrid.new( {
topAnchor = true,
bottomAnchor = true,
leftAnchor = true,
rightAnchor = true,
top = f23_local2,
bottom = -f23_local2,
left = f23_local2,
right = -f23_local2
}, {
elementsPerRow = f23_local0,
rowHeight = f23_local1,
hSpacing = f23_local2,
vSpacing = f23_local2
} )
f23_local9.id = "grid"
self:addElement( f23_local9 )
for f23_local10 = 1, f23_local3, 1 do
local f23_local13 = f23_local10
local f23_local14 = GetChaosPerksIcon( f23_local13 )
local f23_local15 = LUI.UIElement.new( {
topAnchor = true,
bottomAnchor = false,
leftAnchor = true,
rightAnchor = false,
top = 0,
bottom = f23_local1,
left = 0,
right = f23_local1,
scale = 0
} )
f23_local15:registerAnimationState( "smaller", {
scale = -0.2
} )
f23_local15:registerAnimationState( "bigger", {
scale = 0.2
} )
f23_local15.id = "perk_" .. f23_local13
f23_local9:addElement( f23_local15 )
self.perkElements[f23_local13] = f23_local15
local f23_local16 = LUI.UIImage.new( {
material = RegisterMaterial( "hud_box_combo_perk" ),
topAnchor = true,
bottomAnchor = true,
leftAnchor = true,
rightAnchor = true,
top = 0,
bottom = 0,
left = 0,
right = 0,
alpha = 0.1
} )
f23_local16:registerAnimationState( "active", {
alpha = 0.8
} )
f23_local16.id = "perkBG"
f23_local15:addElement( f23_local16 )
local f23_local17 = LUI.UIImage.new( {
material = RegisterMaterial( f23_local14 ),
topAnchor = true,
bottomAnchor = true,
leftAnchor = true,
rightAnchor = true,
top = 0,
bottom = 0,
left = 0,
right = 0,
alpha = 0.2
} )
f23_local17:registerAnimationState( "active", {
alpha = 1
} )
f23_local17.id = "perkIcon"
f23_local15:addElement( f23_local17 )
f23_local15.bg = f23_local16
f23_local15.icon = f23_local17
f23_local15:registerEventHandler( "activate", function ( element, event )
if not element.active then
local f24_local0 = MBh.AnimateSequence( {
{
"default",
0
},
{
"smaller",
250
},
{
"bigger",
100
},
{
"default",
150
}
} )
local f24_local1 = MBh.AnimateSequence( {
{
"default",
0
},
{
"active",
100
}
} )
local f24_local2 = MBh.AnimateSequence( {
{
"default",
0
},
{
"active",
100
}
} )
f24_local0( element, {} )
f24_local1( element.bg, {} )
f24_local2( element.icon, {} )
element.active = true
end
end )
f23_local15:registerEventHandler( "deactivate", function ( element, event )
if element.active then
local f25_local0 = 80 * (f23_local3 - f23_local13)
local f25_local1 = MBh.AnimateSequence( {
{
"default",
f25_local0
},
{
"bigger",
250
},
{
"smaller",
100
},
{
"default",
150
}
} )
f25_local1( element, {} )
f25_local1 = MBh.AnimateSequence( {
{
"active",
f25_local0
},
{
"default",
200
}
} )
f25_local1( element.bg, {} )
f25_local1 = MBh.AnimateSequence( {
{
"active",
f25_local0
},
{
"default",
200
}
} )
f25_local1( element.icon, {} )
element.active = nil
end
end )
end
self:registerOmnvarHandler( "ui_chaos_perk", function ( f26_arg0, f26_arg1 )
if f26_arg1.value == 0 then
f23_local9:processEvent( {
name = "deactivate"
} )
end
end )
self.getPerkElement = function ( f27_arg0, f27_arg1 )
return f27_arg0.perkElements[f27_arg1]
end
local f23_local10 = Game.GetOmnvar( "ui_chaos_perk" )
if f23_local10 > 0 then
for f23_local11 = 1, f23_local10, 1 do
local f23_local15 = self:getPerkElement( f23_local11 )
if f23_local15 then
f23_local15:processEvent( {
name = "activate"
} )
end
end
end
return self
end
f0_local1 = 2000
function chaos_perk_unlock_one( f28_arg0, f28_arg1 )
assert( f28_arg1 )
local f28_local0 = 48
local f28_local1 = f28_arg0:getPerkElement( f28_arg1 )
local self = LUI.UIElement.new( {
topAnchor = true,
bottomAnchor = false,
leftAnchor = false,
rightAnchor = false,
top = 0,
height = f28_local0,
left = -80 - f28_local0 / 2,
width = f28_local0,
scale = 0,
alpha = 1
} )
self:registerAnimationState( "centered", {
topAnchor = true,
bottomAnchor = false,
leftAnchor = false,
rightAnchor = false,
top = 0,
height = f28_local0,
left = -f28_local0 / 2,
width = f28_local0
} )
self:registerAnimationState( "wait", {} )
self:registerAnimationState( "hidden", {
alpha = 0
} )
self.id = "chaos_perk_unlock_one_" .. f28_arg1
local f28_local3 = MBh.AnimateSequence( {
{
"default",
0
},
{
"centered",
400
},
{
"wait",
f0_local1
}
} )
self:registerEventHandler( LUI.FormatAnimStateFinishEvent( "wait" ), function ( element, event )
self:registerAnimationState( "flyover", LUI.MakeFlyOverAnimationState( element, f28_local1 ) )
element:animateToState( "flyover", 400 )
end )
self:registerEventHandler( LUI.FormatAnimStateFinishEvent( "flyover" ), function ( element, event )
element:animateToState( "hidden", 200 )
f28_local1:processEvent( {
name = "activate"
} )
end )
self:registerEventHandler( LUI.FormatAnimStateFinishEvent( "hidden" ), function ( element, event )
element:close()
end )
f28_local3( self, {} )
local f28_local4 = LUI.UIElement.new( {
topAnchor = false,
bottomAnchor = false,
leftAnchor = true,
rightAnchor = false,
top = 0,
bottom = 1,
left = 0,
right = 0
} )
f28_local4:registerAnimationState( "horizontal", {
topAnchor = false,
bottomAnchor = false,
leftAnchor = true,
rightAnchor = true,
top = 0,
bottom = 1,
left = 0,
right = 0
} )
f28_local4:registerAnimationState( "full", {
topAnchor = true,
bottomAnchor = true,
leftAnchor = true,
rightAnchor = true,
top = 0,
bottom = 0,
left = 0,
right = 0
} )
f28_local4.id = "stencil"
f28_local4:setUseStencil( true )
self:addElement( f28_local4 )
local f28_local5 = MBh.AnimateSequence( {
{
"default",
0
},
{
"horizontal",
100,
false,
false
},
{
"horizontal",
100,
false,
true
},
{
"full",
150
}
} )
f28_local5( f28_local4, {} )
f28_local5 = LUI.UIElement.new( {
topAnchor = true,
bottomAnchor = true,
leftAnchor = true,
rightAnchor = true,
bottom = 0,
top = 0,
left = 0,
right = 0
} )
f28_local5.id = "icon"
f28_local4:addElement( f28_local5 )
local f28_local6 = LUI.UIImage.new( {
material = RegisterMaterial( "hud_box_combo_perk" ),
topAnchor = true,
bottomAnchor = true,
leftAnchor = true,
rightAnchor = true,
top = 0,
bottom = 0,
left = 0,
right = 0,
alpha = 0.8
} )
f28_local6.id = "perkBG"
f28_local5:addElement( f28_local6 )
local f28_local7 = LUI.UIImage.new( {
material = RegisterMaterial( GetChaosPerksIcon( f28_arg1 ) ),
topAnchor = true,
bottomAnchor = true,
leftAnchor = true,
rightAnchor = true,
top = 0,
bottom = 0,
left = 0,
right = 0
} )
f28_local7.id = "perkIcon"
f28_local5:addElement( f28_local7 )
return self
end
function chaos_perk_unlock( f32_arg0, f32_arg1 )
assert( f32_arg1.perksWidget )
local f32_local0 = {}
local f32_local1 = 16
local self = LUI.UIElement.new( {
topAnchor = false,
bottomAnchor = false,
leftAnchor = true,
rightAnchor = true,
top = 114,
height = 0,
left = 0,
right = 0
} )
self.id = "chaos_perk_unlock"
self.lastUnlockTime = 0
self:registerOmnvarHandler( "ui_chaos_perk", function ( f33_arg0, f33_arg1 )
if f33_arg1.value > 0 and #f32_local0 < f32_local1 then
table.insert( f32_local0, f33_arg1.value )
end
end )
self:registerEventHandler( "refresh_unlock_perk", function ( element, event )
local f34_local0 = Game.GetTime()
if #f32_local0 > 0 and f0_local1 + 400 < f34_local0 - element.lastUnlockTime then
local f34_local1 = chaos_perk_unlock_one( f32_arg1.perksWidget, f32_local0[1] )
table.remove( f32_local0, 1 )
element:addElement( f34_local1 )
element.lastUnlockTime = f34_local0
Engine.PlaySound( "mp_intel_success" )
end
end )
local f32_local3 = LUI.UITimer.new( 100, "refresh_unlock_perk" )
f32_local3.id = "refreshTimer"
self:addElement( f32_local3 )
return self
end
maxVisibleChaosLogEvents = 5
ChaosEventLUT = {
file = "mp/alien/chaos_events.csv",
size = 256,
index = 2,
text = 3,
points = 5,
mp_alien_town = 6,
mp_alien_armory = 7,
mp_alien_beacon = 8,
mp_alien_dlc3 = 9,
mp_alien_last = 10
}
function GetChaosEventInfo( f35_arg0 )
return Engine.Localize( Engine.TableLookup( ChaosEventLUT.file, ChaosEventLUT.index, tostring( f35_arg0 ), ChaosEventLUT.text ) ), Engine.TableLookup( ChaosEventLUT.file, ChaosEventLUT.index, tostring( f35_arg0 ), ChaosEventLUT.points )
end
function ChaosEventFactory( f36_arg0, f36_arg1 )
local f36_local0 = 12000
local f36_local1, f36_local2 = GetChaosEventInfo( f36_arg0 )
local self = LUI.UIElement.new( {
topAnchor = true,
bottomAnchor = false,
leftAnchor = true,
rightAnchor = true,
top = 0,
bottom = 1,
left = -80,
right = -80,
alpha = 0
} )
self:registerAnimationState( "opening", {
topAnchor = true,
bottomAnchor = false,
leftAnchor = true,
rightAnchor = true,
top = 0,
height = 20,
left = 0,
right = 0,
scale = 0.05,
alpha = 1
} )
self:registerAnimationState( "visible", {
scale = 0,
alpha = 1
} )
self:registerAnimationState( "closed", {
alpha = 0
} )
self:setUseStencil( true )
self.id = "event_" .. f36_arg1
local f36_local4 = CoD.TextSettings.SmallFont
local f36_local5, f36_local6, f36_local7, f36_local8 = GetTextDimensions( f36_local1, f36_local4.Font, f36_local4.Height )
local f36_local9 = f36_local7 - f36_local5
local f36_local10 = LUI.UIText.new( {
alignment = LUI.Alignment.Left,
font = f36_local4.Font,
topAnchor = true,
bottomAnchor = false,
leftAnchor = false,
rightAnchor = true,
width = f36_local9,
top = 0,
right = 0,
height = f36_local4.Height
} )
f36_local10.id = "eventText"
f36_local10:setText( f36_local1 )
self:addElement( f36_local10 )
local f36_local11 = LUI.UIText.new( CoD.ColorizeState( Colors.alien_chaos_hilite, {
alignment = LUI.Alignment.Right,
font = CoD.TextSettings.SmallFont.Font,
topAnchor = true,
bottomAnchor = false,
leftAnchor = false,
rightAnchor = true,
right = -f36_local9 - 10,
top = 0,
width = 60,
height = CoD.TextSettings.SmallFont.Height
} ) )
f36_local11.id = "eventPoints"
f36_local11:setText( f36_local2 )
self:addElement( f36_local11 )
local f36_local12 = MBh.AnimateSequence( {
{
"opening",
100
},
{
"visible",
150
}
} )
f36_local12( self, {} )
self:registerEventHandler( "close", function ( element, event )
if element.closing then
return
else
element.closing = true
element:animateToState( "closed", 250 )
end
end )
self:registerEventHandler( LUI.FormatAnimStateFinishEvent( "closed" ), self.close )
self:registerEventHandler( "new_log_event", function ( element, event )
if element.closing then
return
else
element.timesPushed = element.timesPushed and element.timesPushed + 1 or 1
element:registerAnimationState( "target", {
scale = 0,
alpha = LUI.clamp( 1 - element.timesPushed / math.max( 1, maxVisibleChaosLogEvents ), 0, 1 )
} )
element:animateToState( "target", 100 )
end
end )
f36_local12 = LUI.UITimer.new( f36_local0, "close", nil, true )
f36_local12.id = "expirationTimer"
self:addElement( f36_local12 )
return self
end
function chaos_event_log()
local f39_local0 = 0
local self = LUI.UIElement.new( {
topAnchor = true,
bottomAnchor = true,
leftAnchor = false,
rightAnchor = true,
top = 60,
bottom = 0,
width = 300,
right = 0
} )
self.id = "chaos_event_log"
local f39_local2 = LUI.UIVerticalList.new( {
topAnchor = true,
bottomAnchor = true,
leftAnchor = true,
rightAnchor = true,
top = 0,
bottom = 0,
left = 0,
right = 0
} )
f39_local2.id = "vlist"
self:addElement( f39_local2 )
local f39_local3 = function ()
local f40_local0 = 0
local f40_local1 = f39_local2:getFirstChild()
while f40_local1 do
if not f40_local1.closing then
f40_local0 = f40_local0 + 1
end
f40_local1 = f40_local1:getNextSibling()
end
return f40_local0
end
local f39_local4 = function ( f41_arg0 )
f39_local0 = f39_local0 + 1
f39_local2:processEvent( {
name = "new_log_event"
} )
local f41_local0 = ChaosEventFactory( f41_arg0, f39_local0 )
f41_local0:setPriority( -f39_local0 )
f39_local2:addElement( f41_local0 )
if f39_local3() > maxVisibleChaosLogEvents then
local f41_local1 = f39_local2:getLastChild()
f41_local1:processEvent( {
name = "close"
} )
end
end
self:registerOmnvarHandler( "ui_chaos_event", function ( f42_arg0, f42_arg1 )
f39_local4( f42_arg1.value )
end )
self:registerEventHandler( "fake_event", function ()
f39_local4( 1 + math.floor( 8 * math.random() ) )
end )
return self
end
function chaos_event_recap()
local f44_local0 = LUI.mp_hud.AlienScoreboards
local self = LUI.UIElement.new( {
topAnchor = true,
bottomAnchor = true,
leftAnchor = true,
rightAnchor = true,
top = 0,
bottom = 0,
left = 0,
right = 0,
scale = Engine.UsingSplitscreenUpscaling() and -0.25 or 0
} )
self.id = "chaos_event_recap"
local f44_local2 = f44_local0.table_factory( 21, {
80,
350,
80
}, 4, LUI.Alignment.Middle )
f44_local2:registerAnimationState( "default", {
topAnchor = false,
bottomAnchor = false,
leftAnchor = false,
rightAnchor = false,
top = 0,
left = -255,
width = 510,
bottom = 0
} )
f44_local2:animateToState( "default" )
self:addElement( f44_local2 )
f44_local2.addHeader( Engine.Localize( "ALIEN_CHAOS_RECAP_TITLE" ) )
local f44_local3 = {
r = Colors.alien_tech_tree_bright_grey.r,
g = Colors.alien_tech_tree_bright_grey.g,
b = Colors.alien_tech_tree_bright_grey.b,
a = 1
}
f44_local2.addRow( f44_local0.bgPalette.Dark, {
{
text = Engine.Localize( "ALIEN_CHAOS_RECAP_VALUE" ),
color = f44_local3,
align = LUI.Alignment.Left
},
{
text = Engine.Localize( "ALIEN_CHAOS_RECAP_EVENT" ),
color = f44_local3,
align = LUI.Alignment.Center
},
{
text = Engine.Localize( "ALIEN_CHAOS_RECAP_COUNT" ),
color = f44_local3,
align = LUI.Alignment.Left
}
}, false )
local f44_local4 = 0
local f44_local5 = Engine.GetDvarString( "ui_mapname" )
repeat
if Engine.TableLookupByRow( ChaosEventLUT.file, f44_local4, 0 ) == "" then
break
else
local f44_local6 = Engine.TableLookupByRow( ChaosEventLUT.file, f44_local4, ChaosEventLUT.index )
local f44_local7 = true
if ChaosEventLUT[f44_local5] then
f44_local7 = tonumber( Engine.TableLookupByRow( ChaosEventLUT.file, f44_local4, ChaosEventLUT[f44_local5] ) ) == 1
end
if f44_local6 and tonumber( f44_local6 ) and tonumber( f44_local6 ) > 0 and f44_local7 then
local f44_local8 = Game.GetOmnvar( "ui_alien_eog_score_row_" .. f44_local6 )
if f44_local8 then
local f44_local9, f44_local10 = GetChaosEventInfo( f44_local6 )
f44_local2.addRow( f44_local0.bgPalette.Dark, {
{
text = f44_local10,
color = Colors.alien_scoreboard_dull_grey,
align = LUI.Alignment.Right
},
{
text = f44_local9,
color = Colors.alien_scoreboard_dull_grey,
align = LUI.Alignment.Left
},
{
text = f44_local8,
color = Colors.alien_chaos_hilite,
align = LUI.Alignment.Left,
pretty = {
initialValue = 0,
speed = math.max( 40, f44_local10 / 3 )
}
}
}, 40 )
end
end
f44_local4 = f44_local4 + 1
end
until f44_local4 >= ChaosEventLUT.size
return self
end
function quick_shop_freeze_item()
local self = LUI.UIElement.new( {
topAnchor = true,
bottomAnchor = true,
leftAnchor = true,
rightAnchor = true,
top = 0,
bottom = 0,
left = 0,
right = 0,
alpha = 0
} )
self:registerAnimationState( "visible", {
alpha = 1
} )
self.id = "element"
local f45_local1 = function ( f46_arg0, f46_arg1 )
local f46_local0 = f46_arg0
local f46_local1 = f46_arg0.animateToState
local f46_local2
if f46_arg1 then
f46_local2 = "visible"
if not f46_local2 then
else
f46_local1( f46_local0, f46_local2, 100 )
end
end
f46_local2 = "default"
end
self:registerOmnvarHandler( "ui_alien_chaos_has_meter_freeze", function ( f47_arg0, f47_arg1 )
f45_local1( f47_arg0, f47_arg1.value )
end )
f45_local1( self, Game.GetOmnvar( "ui_alien_chaos_has_meter_freeze" ) )
self:addElement( LUI.mp_hud.AlienHud.quick_shop_item( LUI.Alignment.Bottom, nil, function ()
return "alien_dpad_icon_freeze"
end ) )
return self
end
function chaos_class_skill_item()
local f49_local0 = 40
local f49_local1 = 8
local self = LUI.UIElement.new( {
topAnchor = false,
bottomAnchor = true,
leftAnchor = false,
rightAnchor = true,
top = -210,
bottom = -170,
left = -100,
right = -60,
alpha = 1
} )
self.id = "chaos_class_skill_item"
local f49_local3 = LUI.UIImage.new()
f49_local3.id = "arrow"
f49_local3:registerAnimationState( "default", {
material = RegisterMaterial( "alien_dpad_arrow_up" ),
topAnchor = false,
bottomAnchor = true,
leftAnchor = false,
rightAnchor = true,
top = -9,
left = -30,
width = 21,
height = 11,
red = 1,
green = 1,
blue = 1,
alpha = 0
} )
f49_local3:registerAnimationState( "enabled", CoD.ColorizeState( Colors.white, {
alpha = 0.8
} ) )
f49_local3:animateToState( "default" )
f49_local3:registerOmnvarHandler( "ui_alien_chaos_class_skill_bonus", function ( f50_arg0, f50_arg1 )
if f50_arg1.value == 0 then
f50_arg0:animateToState( "default" )
else
f50_arg0:animateToState( "enabled" )
end
end )
local f49_local4 = LUI.UIImage.new( {
topAnchor = false,
bottomAnchor = true,
leftAnchor = true,
rightAnchor = true,
top = -50,
bottom = -10,
left = 0,
right = 0,
alpha = 1
} )
f49_local4:registerAnimationState( "hidden", {
material = RegisterMaterial( "white" ),
alpha = 0
} )
f49_local4:registerAnimationState( "specialist", {
material = RegisterMaterial( "hud_alien_ammo_infinite" ),
alpha = 1
} )
f49_local4:registerAnimationState( "tank", {
material = RegisterMaterial( "alien_icon_tank" ),
alpha = 1
} )
f49_local4:registerAnimationState( "engineer", {
material = RegisterMaterial( "alien_icon_engineer" ),
alpha = 1
} )
f49_local4:registerAnimationState( "medic", {
material = RegisterMaterial( "alien_icon_medic" ),
alpha = 1
} )
f49_local4:animateToState( "hidden" )
f49_local4:registerOmnvarHandler( "ui_alien_chaos_class_skill_bonus", function ( f51_arg0, f51_arg1 )
if f51_arg1.value == 0 then
f51_arg0:animateToState( "hidden" )
elseif f51_arg1.value == 1 then
f51_arg0:animateToState( "specialist" )
elseif f51_arg1.value == 2 then
f51_arg0:animateToState( "tank" )
elseif f51_arg1.value == 3 then
f51_arg0:animateToState( "engineer" )
elseif f51_arg1.value == 4 then
f51_arg0:animateToState( "medic" )
end
end )
self:addElement( f49_local4 )
self:addElement( f49_local3 )
return self
end
LUI.MenuBuilder.registerType( "chaos_main_score", chaos_main_score )
LUI.MenuBuilder.registerType( "chaos_combo_meter", chaos_combo_meter )
LUI.MenuBuilder.registerType( "chaos_clock", chaos_clock )
LUI.MenuBuilder.registerType( "chaos_perks", chaos_perks )
LUI.MenuBuilder.registerType( "chaos_perk_unlock", chaos_perk_unlock )
LUI.MenuBuilder.registerType( "chaos_event_log", chaos_event_log )
LUI.MenuBuilder.registerType( "chaos_event_recap", chaos_event_recap )
LUI.MenuBuilder.registerType( "quick_shop_freeze_item", quick_shop_freeze_item )
LUI.MenuBuilder.registerType( "chaos_class_skill_item", chaos_class_skill_item )
LockTable( _M )