Files
itgmania212121/Themes/_fallback/BGAnimations/ScreenOptionsCustomizeProfile overlay.lua
T

173 lines
5.0 KiB
Lua

-- Pester Kyzentun for an explanation if you need to customize this screen.
-- Also, this might be rewritten to us a proper customizable lua menu system
-- in the future.
local profile= GAMESTATE:GetEditLocalProfile()
local number_entry= new_numpad_entry{
Name= "number_entry",
InitCommand= cmd(diffusealpha, 0; xy, _screen.cx*1.5, _screen.cy),
value_color= PlayerColor(PLAYER_1),
cursor_draw= "first",
cursor_color= PlayerDarkColor(PLAYER_1),
}
local function item_value_to_text(item, value)
if item.item_type == "bool" then
if value then
value= THEME:GetString("ScreenOptionsCustomizeProfile", item.true_text)
else
value= THEME:GetString("ScreenOptionsCustomizeProfile", item.false_text)
end
end
return value
end
local menu_items= {
{name= "weight", get= "GetWeightPounds", set= "SetWeightPounds",
item_type= "number", auto_done= 100},
{name= "voomax", get= "GetVoomax", set= "SetVoomax", item_type= "number",
auto_done= 10},
{name= "birth_year", get= "GetBirthYear", set= "SetBirthYear",
item_type= "number", auto_done= 1000},
{name= "calorie_calc", get= "GetIgnoreStepCountCalories",
set= "SetIgnoreStepCountCalories", item_type= "bool",
true_text= "use_heart", false_text= "use_steps"},
{name= "gender", get= "GetIsMale", set= "SetIsMale", item_type= "bool",
true_text= "male", false_text= "female"},
{name= "exit", item_type= "exit"}
}
local menu_cursor
local menu_pos= 1
local menu_start= 72
local menu_x= 32
local value_x= 300
local fader
local cursor_on_menu= true
local menu_item_actors= {}
local menu_values= {}
local function fade_actor_to(actor, alf)
actor:stoptweening()
actor:linear(.2)
actor:diffusealpha(alf)
end
local function update_menu_cursor()
menu_cursor:stoptweening()
menu_cursor:linear(.1)
menu_cursor:y(menu_item_actors[menu_pos]:GetY())
menu_cursor:SetWidth(menu_item_actors[menu_pos]:GetWidth() + 20)
end
local function input(event)
local pn= event.PlayerNumber
if not pn then return false end
if event.type == "InputEventType_Release" then return false end
local button= event.GameButton
if cursor_on_menu then
if button == "Start" then
local item= menu_items[menu_pos]
if item.item_type == "bool" then
local value= not Profile[item.get](profile)
menu_values[menu_pos]:settext(item_value_to_text(item, value))
Profile[item.set](profile, value)
elseif item.item_type == "number" then
fade_actor_to(fader, .8)
fade_actor_to(number_entry.container, 1)
number_entry.value= Profile[item.get](profile)
number_entry.value_actor:playcommand("Set", {number_entry.value})
number_entry.auto_done_value= item.auto_done
number_entry.max_value= item.max
number_entry:update_cursor(number_entry.cursor_start)
number_entry.prompt_actor:playcommand(
"Set", {THEME:GetString("ScreenOptionsCustomizeProfile", item.name)})
cursor_on_menu= false
elseif item.item_type == "exit" then
SCREENMAN:GetTopScreen():StartTransitioningScreen("SM_GoToNextScreen")
SOUND:PlayOnce(THEME:GetPathS("Common", "Start"))
end
else
if button == "MenuLeft" or button == "MenuUp" then
if menu_pos > 1 then menu_pos= menu_pos - 1 end
update_menu_cursor()
elseif button == "MenuRight" or button == "MenuDown" then
if menu_pos < #menu_items then menu_pos= menu_pos + 1 end
update_menu_cursor()
end
end
else
local done= number_entry:handle_input(button)
if done then
local item= menu_items[menu_pos]
Profile[item.set](profile, number_entry.value)
menu_values[menu_pos]:settext(item_value_to_text(item, number_entry.value))
fade_actor_to(fader, 0)
fade_actor_to(number_entry.container, 0)
cursor_on_menu= true
end
end
end
local args= {
Def.Actor{
OnCommand= function(self)
update_menu_cursor()
SCREENMAN:GetTopScreen():AddInputCallback(input)
end
},
Def.Quad{
Name= "menu_cursor", InitCommand= function(self)
menu_cursor= self
self:horizalign(left)
self:setsize(0, 24)
self:diffuse(PlayerColor(PLAYER_1))
self:xy(menu_x - 10, menu_start)
end,
},
}
for i, item in ipairs(menu_items) do
local item_y= menu_start + ((i-1) * 24)
args[#args+1]= Def.BitmapText{
Name= "menu_" .. item.name, Font= "Common Normal",
Text= THEME:GetString("ScreenOptionsCustomizeProfile", item.name),
InitCommand= function(self)
menu_item_actors[i]= self
self:xy(menu_x, item_y)
self:diffuse(Color.White)
self:horizalign(left)
end
}
if item.get then
local value_text= item_value_to_text(item, Profile[item.get](profile))
args[#args+1]= Def.BitmapText{
Name= "value_" .. item.name, Font= "Common Normal",
Text= value_text,
InitCommand= function(self)
menu_values[i]= self
self:xy(value_x, menu_start + ((i-1) * 24))
self:diffuse(Color.White)
self:horizalign(left)
end
}
end
end
args[#args+1]= Def.Quad{
Name= "fader", InitCommand= function(self)
fader= self
self:setsize(270, #menu_items * 24)
self:horizalign(left)
self:vertalign(top)
self:xy(menu_x-10, menu_start-12)
self:diffuse(Color.Black)
self:diffusealpha(0)
end
}
args[#args+1]= number_entry:create_actors()
return Def.ActorFrame(args)