ascension flash label, scrollable menu
All checks were successful
ci/woodpecker/push/woodpecker Pipeline was successful
All checks were successful
ci/woodpecker/push/woodpecker Pipeline was successful
This commit is contained in:
@@ -5,6 +5,7 @@ local _anim = 0
|
||||
local _menu_max_w = 0
|
||||
local ANIM_SPEED = 2.5
|
||||
local HEADER_H = 28
|
||||
MenuWindow._scroll_offset = 0
|
||||
|
||||
--- Calculates the animated x position of the menu block.
|
||||
--- @within MenuWindow
|
||||
@@ -45,6 +46,17 @@ function MenuWindow.draw_norman()
|
||||
spr(305, nx + 32, ny + 64, Config.colors.transparent, 4)
|
||||
end
|
||||
|
||||
--- Adjusts _scroll_offset so the selected item is within the visible window.
|
||||
--- @within MenuWindow
|
||||
function MenuWindow.ensure_visible()
|
||||
local sel = Context.current_menu_item
|
||||
if sel <= MenuWindow._scroll_offset then
|
||||
MenuWindow._scroll_offset = sel - 1
|
||||
elseif sel > MenuWindow._scroll_offset + 5 then
|
||||
MenuWindow._scroll_offset = sel - 5
|
||||
end
|
||||
end
|
||||
|
||||
--- Draws the menu window.
|
||||
--- @within MenuWindow
|
||||
function MenuWindow.draw()
|
||||
@@ -56,9 +68,19 @@ function MenuWindow.draw()
|
||||
MenuWindow.draw_norman()
|
||||
end
|
||||
|
||||
local menu_h = #_menu_items * 10
|
||||
local y = HEADER_H + math.floor((Config.screen.height - HEADER_H - 10 - menu_h) / 2)
|
||||
UI.draw_menu(_menu_items, Context.current_menu_item, MenuWindow.calc_menu_x(), y, false)
|
||||
local menu_x = MenuWindow.calc_menu_x()
|
||||
local arrow_cx = math.floor(menu_x + _menu_max_w / 2)
|
||||
local y = HEADER_H + math.floor((Config.screen.height - HEADER_H - 50) / 2)
|
||||
|
||||
if MenuWindow._scroll_offset > 0 then
|
||||
Print.text_center("^", arrow_cx, y - 8, Config.colors.light_blue)
|
||||
end
|
||||
|
||||
UI.draw_menu(_menu_items, Context.current_menu_item, menu_x, y, false, MenuWindow._scroll_offset, 5)
|
||||
|
||||
if MenuWindow._scroll_offset + 5 < #_menu_items then
|
||||
Print.text_center("v", arrow_cx, y + 52, Config.colors.light_blue)
|
||||
end
|
||||
|
||||
local ttg_text = "TTG"
|
||||
local ttg_w = print(ttg_text, 0, -10, 0, false, 1, false)
|
||||
@@ -72,8 +94,8 @@ function MenuWindow.update()
|
||||
_anim = math.min(1, _anim + ANIM_SPEED * Context.delta_time)
|
||||
end
|
||||
|
||||
local menu_h = #_menu_items * 10
|
||||
local y = HEADER_H + math.floor((Config.screen.height - HEADER_H - 10 - menu_h) / 2)
|
||||
local menu_x = MenuWindow.calc_menu_x()
|
||||
local y = HEADER_H + math.floor((Config.screen.height - HEADER_H - 50) / 2)
|
||||
|
||||
if _click_timer > 0 then
|
||||
_click_timer = _click_timer - Context.delta_time
|
||||
@@ -87,8 +109,9 @@ function MenuWindow.update()
|
||||
return
|
||||
end
|
||||
|
||||
local new_item, mouse_confirmed = UI.update_menu(_menu_items, Context.current_menu_item, MenuWindow.calc_menu_x(), y, false)
|
||||
local new_item, mouse_confirmed = UI.update_menu(_menu_items, Context.current_menu_item, menu_x, y, false, MenuWindow._scroll_offset, 5)
|
||||
Context.current_menu_item = new_item
|
||||
MenuWindow.ensure_visible()
|
||||
|
||||
if mouse_confirmed then
|
||||
Audio.sfx_select()
|
||||
@@ -186,6 +209,12 @@ function MenuWindow.ascend_debug()
|
||||
GameWindow.set_state("ascend_debug")
|
||||
end
|
||||
|
||||
--- Triggers the Level Up flash animation for testing.
|
||||
--- @within MenuWindow
|
||||
function MenuWindow.level_up_flash()
|
||||
Ascension.start_flash()
|
||||
end
|
||||
|
||||
--- Refreshes the list of menu items based on current game state.
|
||||
--- @within MenuWindow
|
||||
function MenuWindow.refresh_menu_items()
|
||||
@@ -200,6 +229,8 @@ function MenuWindow.refresh_menu_items()
|
||||
table.insert(_menu_items, {label = "Credits", decision = MenuWindow.credits})
|
||||
|
||||
if Context.test_mode then
|
||||
table.insert(_menu_items, {label = "Debug Menu", header = true})
|
||||
table.insert(_menu_items, {label = "Level Up Flash", decision = MenuWindow.level_up_flash})
|
||||
table.insert(_menu_items, {label = "Audio Test", decision = MenuWindow.audio_test})
|
||||
table.insert(_menu_items, {label = "To Be Continued...", decision = MenuWindow.continued})
|
||||
table.insert(_menu_items, {label = "DDR Test", decision = MenuWindow.ddr_test})
|
||||
@@ -212,11 +243,14 @@ function MenuWindow.refresh_menu_items()
|
||||
|
||||
_menu_max_w = 0
|
||||
for _, item in ipairs(_menu_items) do
|
||||
local w = print(item.label, 0, -10, 0, false, 1, false)
|
||||
if w > _menu_max_w then _menu_max_w = w end
|
||||
if not item.header then
|
||||
local w = print(item.label, 0, -10, 0, false, 1, false)
|
||||
if w > _menu_max_w then _menu_max_w = w end
|
||||
end
|
||||
end
|
||||
|
||||
Context.current_menu_item = 1
|
||||
MenuWindow._scroll_offset = 0
|
||||
_click_timer = 0
|
||||
_anim = 0
|
||||
end
|
||||
|
||||
Reference in New Issue
Block a user