diff --git a/inc/init/init.config.lua b/inc/init/init.config.lua index ff2ef0d..9bf0fd0 100644 --- a/inc/init/init.config.lua +++ b/inc/init/init.config.lua @@ -20,7 +20,8 @@ function Config.initial_data() meter_bg = 1 }, timing = { - splash_duration = 120 + splash_duration = 120, + minigame_win_duration = 180 } } end diff --git a/inc/init/init.minigame.lua b/inc/init/init.minigame.lua index b7e4fe0..3c40bdd 100644 --- a/inc/init/init.minigame.lua +++ b/inc/init/init.minigame.lua @@ -78,7 +78,8 @@ function Minigame.get_default_ddr() current_song = nil, pattern_index = 1, use_pattern = false, - return_window = nil + return_window = nil, + win_timer = 0 } end @@ -101,6 +102,7 @@ end --- * button_x (number) Button indicator X position.
--- * button_y (number) Button indicator Y position.
--- * button_size (number) Button indicator size.
+--- * win_timer (number) Timer for the win message overlay.
function Minigame.get_default_button_mash() return { bar_fill = 0, @@ -120,7 +122,8 @@ function Minigame.get_default_button_mash() button_size = 12, focus_center_x = nil, focus_center_y = nil, - focus_initial_radius = 0 + focus_initial_radius = 0, + win_timer = 0 } end @@ -150,6 +153,7 @@ end --- * button_size (number) Button indicator size.
--- * press_cooldown (number) Current cooldown timer.
--- * press_cooldown_duration (number) Frames of press cooldown.
+--- * win_timer (number) Timer for the win message overlay.
function Minigame.get_default_rhythm() return { line_position = 0, @@ -176,10 +180,28 @@ function Minigame.get_default_rhythm() press_cooldown_duration = 15, focus_center_x = nil, focus_center_y = nil, - focus_initial_radius = 0 + focus_initial_radius = 0, + win_timer = 0 } end +--- Draws a unified win message overlay. +--- @within Minigame +function Minigame.draw_win_overlay() + local text = "WELL DONE!" + local tw = #text * 4 + local th = 6 + local padding = 4 + local box_w = tw + padding * 2 + local box_h = th + padding * 2 + local box_x = (Config.screen.width - box_w) / 2 + local box_y = (Config.screen.height - box_h) / 2 + + rect(box_x, box_y, box_w, box_h, Config.colors.dark_grey) + rectb(box_x, box_y, box_w, box_h, Config.colors.white) + Print.text_center(text, Config.screen.width / 2, box_y + padding, Config.colors.white) +end + --- Configures DDR minigame. --- @within Minigame --- @param params table Optional parameters to override defaults (see Minigame.get_default_ddr). diff --git a/inc/window/window.minigame.ddr.lua b/inc/window/window.minigame.ddr.lua index 3caa3bd..de7af3e 100644 --- a/inc/window/window.minigame.ddr.lua +++ b/inc/window/window.minigame.ddr.lua @@ -108,18 +108,25 @@ end --- @within MinigameDDRWindow function MinigameDDRWindow.update() local mg = Context.minigame_ddr + + if mg.win_timer > 0 then + mg.win_timer = mg.win_timer - 1 + if mg.win_timer == 0 then + Meter.on_minigame_complete() + Meter.show() + Window.set_current(mg.return_window) + end + return + end + if mg.bar_fill >= mg.max_fill then - Meter.on_minigame_complete() - Meter.show() - Window.set_current(mg.return_window) + mg.win_timer = Config.timing.minigame_win_duration return end mg.frame_counter = mg.frame_counter + 1 if mg.use_pattern and mg.current_song and mg.current_song.end_frame then if mg.frame_counter > mg.current_song.end_frame and #mg.arrows == 0 then - Meter.on_minigame_complete() - Meter.show() - Window.set_current(mg.return_window) + mg.win_timer = Config.timing.minigame_win_duration return end end @@ -265,4 +272,7 @@ function MinigameDDRWindow.draw() else Print.text_center("RANDOM MODE", Config.screen.width / 2, debug_y, Config.colors.blue) end +if mg.win_timer > 0 then + Minigame.draw_win_overlay() +end end \ No newline at end of file diff --git a/inc/window/window.minigame.mash.lua b/inc/window/window.minigame.mash.lua index f001753..fa9e8ff 100644 --- a/inc/window/window.minigame.mash.lua +++ b/inc/window/window.minigame.mash.lua @@ -25,6 +25,18 @@ end --- @within MinigameButtonMashWindow function MinigameButtonMashWindow.update() local mg = Context.minigame_button_mash + + if mg.win_timer > 0 then + mg.win_timer = mg.win_timer - 1 + if mg.win_timer == 0 then + Meter.on_minigame_complete() + Meter.show() + if mg.focus_center_x then Focus.stop() end + Window.set_current(mg.return_window) + end + return + end + if Input.select() then mg.bar_fill = mg.bar_fill + mg.fill_per_press mg.button_pressed_timer = mg.button_press_duration @@ -33,10 +45,7 @@ function MinigameButtonMashWindow.update() end end if mg.bar_fill >= mg.max_fill then - Meter.on_minigame_complete() - Meter.show() - if mg.focus_center_x then Focus.stop() end - Window.set_current(mg.return_window) + mg.win_timer = Config.timing.minigame_win_duration return end local degradation = mg.base_degradation + (mg.bar_fill * mg.degradation_multiplier) @@ -86,4 +95,8 @@ function MinigameButtonMashWindow.draw() Print.text_center("MASH Z!", Config.screen.width / 2, mg.bar_y + mg.bar_height + 10, Config.colors.light_grey) local percentage = math.floor((mg.bar_fill / mg.max_fill) * 100) Print.text_center(percentage .. "%", mg.bar_x + mg.bar_width / 2, mg.bar_y + 2, Config.colors.black) + + if mg.win_timer > 0 then + Minigame.draw_win_overlay() + end end diff --git a/inc/window/window.minigame.rhythm.lua b/inc/window/window.minigame.rhythm.lua index 0690f05..ff43d8f 100644 --- a/inc/window/window.minigame.rhythm.lua +++ b/inc/window/window.minigame.rhythm.lua @@ -27,6 +27,18 @@ end --- @within MinigameRhythmWindow function MinigameRhythmWindow.update() local mg = Context.minigame_rhythm + + if mg.win_timer > 0 then + mg.win_timer = mg.win_timer - 1 + if mg.win_timer == 0 then + Meter.on_minigame_complete() + Meter.show() + if mg.focus_center_x then Focus.stop() end + Window.set_current(mg.return_window) + end + return + end + mg.line_position = mg.line_position + (mg.line_speed * mg.line_direction) if mg.line_position > 1 then mg.line_position = 1 @@ -57,10 +69,7 @@ function MinigameRhythmWindow.update() end end if mg.score >= mg.max_score then - Meter.on_minigame_complete() - Meter.show() - if mg.focus_center_x then Focus.stop() end - Window.set_current(mg.return_window) + mg.win_timer = Config.timing.minigame_win_duration return end if mg.button_pressed_timer > 0 then @@ -107,4 +116,8 @@ function MinigameRhythmWindow.draw() circ(mg.button_x, mg.button_y, mg.button_size - 2, button_color) end Print.text_center("Z", mg.button_x - 2, mg.button_y - 3, button_color) + + if mg.win_timer > 0 then + Minigame.draw_win_overlay() + end end