V1 update (#1)

This commit is contained in:
Nguyễn Quốc Hưng
2024-06-06 16:01:24 +07:00
committed by Squishy (C6H12O6+NaCl+H2O)
parent 3343d8711b
commit 1d6643448e
30 changed files with 1000 additions and 228 deletions

95
scene/settings.lua Normal file
View File

@@ -0,0 +1,95 @@
local SettingsScene = SCENE:extend()
SettingsScene.title = "Settings"
local settings_title = {
"Music",
"Lines",
"Fullscreen (F4)",
"Input configuration (F2)",
"Back",
}
local settings_explaination = {
"Enable music?\nThis does not apply to sound effects.",
"Show level and lines counter?\nThis setting is ignored when replaying.",
"Enter or leave fullscreen\nYou can press F4 key at any screen to do this quick.",
"This is where you can re-configure your keybinds.\nYou can press F2 on the keyboard to open this quick\n\nTip for TV:\n\t88663366: enable TV mode.\n\t........: disable TV mode",
"Back to main menu"
}
local settings_func = {
function()
SETTINGS["music"] = not SETTINGS["music"]
love.audio.stop()
end,
function() SETTINGS["lines"] = not SETTINGS["lines"] end,
function() love.keypressed("f4", "f4") end,
InputConfigScene,
function() return TitleScene() end,
}
function SettingsScene:new()
self.settings_menu_state = 1
end
function SettingsScene:changeOption(rel)
local len = #settings_title
self.settings_menu_state = (self.settings_menu_state + len + rel - 1) % len + 1
end
function SettingsScene:render()
MainBackground()
love.graphics.setColor(0, 0, 0, 0.7)
love.graphics.rectangle("fill", 30, 60, 580, 85, 10, 10) -- Tromi
love.graphics.rectangle("fill", 30, 165, 580, 225, 10, 10) -- Menu
drawBigText(CHAR.icon.settings.." SETTINGS", 40, 85, 200, "left")
-- Selecting
love.graphics.setColor(0.4, 1, 1, 0.5)
love.graphics.rectangle("fill", 40, 135 + 40 * self.settings_menu_state, 270, 40)
-- Text
for i = 1, #settings_title do
drawText(settings_title[i], 45, 145 + 40 * i, 230, "left")
end
drawBigText(SETTINGS["music"] and CHAR.icon.checkMark or CHAR.icon.crossMark, 260, 175, 50, "center")
drawBigText(SETTINGS["lines"] and CHAR.icon.checkMark or CHAR.icon.crossMark, 260, 215, 50, "center")
drawBigText(love.window.getFullscreen() and CHAR.icon.checkMark or CHAR.icon.crossMark, 260, 255, 50, "center")
drawBigText(CHAR.key.keyboard , 260, 295, 50, "center")
drawBigText(CHAR.icon.home , 260, 335, 50, "center")
drawText(settings_explaination[self.settings_menu_state], 330, 175, 610 - 15 - 330, "left")
end
---@param e SCENE_onInput
function SettingsScene:onInputPress(e)
if e.input == "menu_back" or e.scancode == "escape" then SCENE = TitleScene()
elseif e.input == "menu_decide" or e.key == "return" then
local s = settings_func[self.settings_menu_state]()
if s then SCENE = s end
elseif e.input == "down" or e.scancode == "down" then
self:changeOption(1)
elseif e.input == "up" or e.scancode == "up" then
self:changeOption(-1)
elseif e.type == "touch" or e.type == "mouse" then
local x, y = e.x, e.y
local testOption = function(sel)
if sel ~= self.settings_menu_state then
self.settings_menu_state = sel
else
self:onInputPress{input = "menu_decide"}
end
end
if (
x >= 40 and x <= 310 and
y >= 175 and y <= 375
) then
local sel = math.floor((y - 175) / 40) + 1
if sel <= #settings_func then
testOption(sel)
end
end
end
end
return SettingsScene