feature/imp-x-implement-standard-day-cycle #30
@@ -30,6 +30,7 @@ globals = {
|
||||
"MinigameButtonMashWindow",
|
||||
"MinigameRhythmWindow",
|
||||
"MinigameDDRWindow",
|
||||
"MysteriousManWindow",
|
||||
"mset",
|
||||
"mget",
|
||||
"btnp",
|
||||
|
||||
@@ -25,9 +25,8 @@ decision/decision.go_to_toilet.lua
|
||||
decision/decision.go_to_walking_to_office.lua
|
||||
decision/decision.go_to_office.lua
|
||||
decision/decision.go_to_walking_to_home.lua
|
||||
decision/decision.play_button_mash.lua
|
||||
decision/decision.play_rhythm.lua
|
||||
decision/decision.play_ddr.lua
|
||||
decision/decision.go_to_sleep.lua
|
||||
decision/decision.do_work.lua
|
||||
map/map.manager.lua
|
||||
map/map.bedroom.lua
|
||||
map/map.street.lua
|
||||
@@ -38,6 +37,7 @@ screen/screen.toilet.lua
|
||||
screen/screen.walking_to_office.lua
|
||||
screen/screen.office.lua
|
||||
screen/screen.walking_to_home.lua
|
||||
screen/screen.work.lua
|
||||
window/window.manager.lua
|
||||
window/window.register.lua
|
||||
window/window.splash.lua
|
||||
@@ -49,6 +49,7 @@ window/window.popup.lua
|
||||
window/window.minigame.mash.lua
|
||||
window/window.minigame.rhythm.lua
|
||||
window/window.minigame.ddr.lua
|
||||
window/window.mysterious_man.lua
|
||||
window/window.game.lua
|
||||
system/system.main.lua
|
||||
meta/meta.assets.lua
|
||||
|
||||
15
inc/decision/decision.do_work.lua
Normal file
15
inc/decision/decision.do_work.lua
Normal file
@@ -0,0 +1,15 @@
|
||||
Decision.register({
|
||||
id = "do_work",
|
||||
label = "Do Work",
|
||||
handle = function()
|
||||
Meter.hide()
|
||||
Util.go_to_screen_by_id("work")
|
||||
MinigameDDRWindow.start("game", nil, {
|
||||
on_win = function()
|
||||
Meter.show()
|
||||
Util.go_to_screen_by_id("office")
|
||||
Window.set_current("game")
|
||||
end,
|
||||
})
|
||||
end,
|
||||
})
|
||||
16
inc/decision/decision.go_to_sleep.lua
Normal file
16
inc/decision/decision.go_to_sleep.lua
Normal file
@@ -0,0 +1,16 @@
|
||||
Decision.register({
|
||||
id = "go_to_sleep",
|
||||
label = "Go to Sleep",
|
||||
handle = function()
|
||||
Meter.hide()
|
||||
Day.increase()
|
||||
MinigameRhythmWindow.start("game", {
|
||||
focus_center_x = Config.screen.width / 2,
|
||||
focus_center_y = Config.screen.height / 2,
|
||||
focus_initial_radius = 0,
|
||||
on_win = function()
|
||||
MysteriousManWindow.start()
|
||||
end,
|
||||
})
|
||||
end,
|
||||
})
|
||||
@@ -4,7 +4,7 @@
|
||||
--- Draws a unified win message overlay.
|
||||
--- @within Minigame
|
||||
function Minigame.draw_win_overlay()
|
||||
local text = "WELL DONE!"
|
||||
local text = "SUCCESS"
|
||||
local tw = #text * 4
|
||||
local th = 6
|
||||
local padding = 4
|
||||
|
||||
@@ -50,7 +50,7 @@ function Timer.draw()
|
||||
|
||||
local fg_color
|
||||
if progress <= 0.25 then
|
||||
fg_color = Config.colors.white
|
||||
fg_color = Config.colors.dark_grey
|
||||
elseif progress <= 0.5 then
|
||||
fg_color = Config.colors.light_blue
|
||||
elseif progress <= 0.75 then
|
||||
@@ -59,7 +59,7 @@ function Timer.draw()
|
||||
fg_color = Config.colors.red
|
||||
end
|
||||
|
||||
local bg_color = Config.colors.dark_grey
|
||||
local bg_color = Config.colors.white
|
||||
local start_angle = -math.pi * 0.5
|
||||
local progress_angle = progress * 2 * math.pi
|
||||
local r_outer_sq = r_outer * r_outer
|
||||
|
||||
@@ -4,6 +4,7 @@ Screen.register({
|
||||
decisions = {
|
||||
"go_to_toilet",
|
||||
"go_to_walking_to_office",
|
||||
"go_to_sleep",
|
||||
},
|
||||
background = "bedroom"
|
||||
})
|
||||
|
||||
@@ -2,9 +2,7 @@ Screen.register({
|
||||
id = "office",
|
||||
name = "Office",
|
||||
decisions = {
|
||||
"play_button_mash",
|
||||
"play_rhythm",
|
||||
"play_ddr",
|
||||
"do_work",
|
||||
"go_to_walking_to_home",
|
||||
"have_a_coffee",
|
||||
},
|
||||
|
||||
6
inc/screen/screen.work.lua
Normal file
6
inc/screen/screen.work.lua
Normal file
@@ -0,0 +1,6 @@
|
||||
Screen.register({
|
||||
id = "work",
|
||||
name = "Work",
|
||||
decisions = {},
|
||||
background_color = Config.colors.blue,
|
||||
})
|
||||
@@ -39,7 +39,8 @@ function MinigameDDRWindow.init_context()
|
||||
pattern_index = 1,
|
||||
use_pattern = false,
|
||||
return_window = nil,
|
||||
win_timer = 0
|
||||
win_timer = 0,
|
||||
on_win = nil
|
||||
}
|
||||
end
|
||||
|
||||
@@ -162,9 +163,13 @@ function MinigameDDRWindow.update()
|
||||
mg.win_timer = mg.win_timer - 1
|
||||
if mg.win_timer == 0 then
|
||||
Meter.on_minigame_complete()
|
||||
if mg.on_win then
|
||||
mg.on_win()
|
||||
else
|
||||
Meter.show()
|
||||
Window.set_current(mg.return_window)
|
||||
end
|
||||
end
|
||||
return
|
||||
end
|
||||
|
||||
|
||||
@@ -21,7 +21,8 @@ function MinigameButtonMashWindow.init_context()
|
||||
focus_center_x = nil,
|
||||
focus_center_y = nil,
|
||||
focus_initial_radius = 0,
|
||||
win_timer = 0
|
||||
win_timer = 0,
|
||||
on_win = nil
|
||||
}
|
||||
end
|
||||
|
||||
@@ -63,10 +64,14 @@ function MinigameButtonMashWindow.update()
|
||||
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
|
||||
if mg.on_win then
|
||||
mg.on_win()
|
||||
else
|
||||
Meter.show()
|
||||
Window.set_current(mg.return_window)
|
||||
end
|
||||
end
|
||||
return
|
||||
end
|
||||
|
||||
|
||||
@@ -30,7 +30,8 @@ function MinigameRhythmWindow.init_context()
|
||||
focus_center_x = nil,
|
||||
focus_center_y = nil,
|
||||
focus_initial_radius = 0,
|
||||
win_timer = 0
|
||||
win_timer = 0,
|
||||
on_win = nil
|
||||
}
|
||||
end
|
||||
|
||||
@@ -72,10 +73,14 @@ function MinigameRhythmWindow.update()
|
||||
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
|
||||
if mg.on_win then
|
||||
mg.on_win()
|
||||
else
|
||||
Meter.show()
|
||||
Window.set_current(mg.return_window)
|
||||
end
|
||||
end
|
||||
return
|
||||
end
|
||||
|
||||
|
||||
132
inc/window/window.mysterious_man.lua
Normal file
132
inc/window/window.mysterious_man.lua
Normal file
@@ -0,0 +1,132 @@
|
||||
--- @section MysteriousManWindow
|
||||
|
||||
local STATE_TEXT = "text"
|
||||
local STATE_DAY = "day"
|
||||
local STATE_CHOICE = "choice"
|
||||
|
||||
local state = STATE_TEXT
|
||||
local text_y = Config.screen.height
|
||||
local text_speed = 0.4
|
||||
local day_timer = 0
|
||||
local day_display_frames = 120
|
||||
local selected_choice = 1
|
||||
|
||||
local choices = {
|
||||
{
|
||||
label = "Wake Up",
|
||||
},
|
||||
{
|
||||
label = "Stay in Bed",
|
||||
},
|
||||
}
|
||||
|
||||
local text = [[
|
||||
Misterious man appears
|
||||
during your sleep.
|
||||
|
||||
He says nothing.
|
||||
He doesn't need to.
|
||||
|
||||
He says nothing.
|
||||
]]
|
||||
|
||||
--- Sets the scrolling text content.
|
||||
--- @within MysteriousManWindow
|
||||
--- @param new_text string The text to display.
|
||||
function MysteriousManWindow.set_text(new_text)
|
||||
text = new_text
|
||||
end
|
||||
|
||||
--- Starts the mysterious man window.
|
||||
--- @within MysteriousManWindow
|
||||
function MysteriousManWindow.start()
|
||||
state = STATE_TEXT
|
||||
text_y = Config.screen.height
|
||||
day_timer = 0
|
||||
selected_choice = 1
|
||||
Meter.hide()
|
||||
Window.set_current("mysterious_man")
|
||||
end
|
||||
|
||||
local function wake_up()
|
||||
Util.go_to_screen_by_id("home")
|
||||
MinigameButtonMashWindow.start("game", {
|
||||
focus_center_x = Config.screen.width / 2,
|
||||
focus_center_y = Config.screen.height / 2,
|
||||
focus_initial_radius = 0,
|
||||
on_win = function()
|
||||
Meter.show()
|
||||
Window.set_current("game")
|
||||
end,
|
||||
})
|
||||
end
|
||||
|
||||
local function stay_in_bed()
|
||||
Day.increase()
|
||||
state = STATE_DAY
|
||||
day_timer = day_display_frames
|
||||
end
|
||||
|
||||
--- Updates the mysterious man window logic.
|
||||
--- @within MysteriousManWindow
|
||||
function MysteriousManWindow.update()
|
||||
if state == STATE_TEXT then
|
||||
text_y = text_y - text_speed
|
||||
|
||||
local lines = 1
|
||||
for _ in string.gmatch(text, "\n") do
|
||||
lines = lines + 1
|
||||
end
|
||||
|
||||
if text_y < -lines * 8 then
|
||||
state = STATE_DAY
|
||||
day_timer = day_display_frames
|
||||
end
|
||||
|
||||
if Input.select() then
|
||||
state = STATE_DAY
|
||||
day_timer = day_display_frames
|
||||
end
|
||||
elseif state == STATE_DAY then
|
||||
day_timer = day_timer - 1
|
||||
|
||||
if day_timer <= 0 or Input.select() then
|
||||
state = STATE_CHOICE
|
||||
selected_choice = 1
|
||||
end
|
||||
elseif state == STATE_CHOICE then
|
||||
selected_choice = UI.update_menu(choices, selected_choice)
|
||||
|
||||
if Input.select() then
|
||||
Audio.sfx_select()
|
||||
if selected_choice == 1 then
|
||||
wake_up()
|
||||
else
|
||||
stay_in_bed()
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
--- Draws the mysterious man window.
|
||||
--- @within MysteriousManWindow
|
||||
function MysteriousManWindow.draw()
|
||||
rect(0, 0, Config.screen.width, Config.screen.height, Config.colors.black)
|
||||
|
||||
if state == STATE_TEXT then
|
||||
local x = (Config.screen.width - 132) / 2
|
||||
Print.text(text, x, text_y, Config.colors.light_grey)
|
||||
elseif state == STATE_DAY then
|
||||
local day_text = "Day " .. Context.day_count
|
||||
Print.text_center(
|
||||
day_text,
|
||||
Config.screen.width / 2,
|
||||
Config.screen.height / 2 - 3,
|
||||
Config.colors.white
|
||||
)
|
||||
elseif state == STATE_CHOICE then
|
||||
local menu_x = (Config.screen.width - 60) / 2
|
||||
local menu_y = (Config.screen.height - 20) / 2
|
||||
UI.draw_menu(choices, selected_choice, menu_x, menu_y)
|
||||
end
|
||||
end
|
||||
@@ -27,3 +27,6 @@ Window.register("minigame_rhythm", MinigameRhythmWindow)
|
||||
|
||||
MinigameDDRWindow = {}
|
||||
Window.register("minigame_ddr", MinigameDDRWindow)
|
||||
|
||||
MysteriousManWindow = {}
|
||||
Window.register("mysterious_man", MysteriousManWindow)
|
||||
|
||||
Reference in New Issue
Block a user