Files
tromi_mobile/scene/title2.lua
2024-10-27 05:56:40 +07:00

165 lines
4.9 KiB
Lua

---@class SCENE
local Title2Scene = SCENE:extend()
Title2Scene.title = "Title"
local input_code = {}
local main_menu_title = {
"New game" ,
"Replay" ,
"Data management" ,
"Mobile port repository",
"About" ,
"Max gravity Training",
"Leaderboard" ,
"Settings" ,
"Official homepage" ,
"Exit game" ,
}
local half_pos = math.roundUnit(#main_menu_title / 2)
local main_menu_scenes = {
NameEntryScene,
ReplaySelectScene,
DataManagementScene,
function() love.system.openURL("https://gitea.com/SweetSea-ButImNotSweet/tromi_mobile") end,
AboutScene,
TrainingScene,
function() love.system.openURL("https://mycophobia.org/forums/viewtopic.php?t=29") end,
SettingsScene,
function() love.system.openURL("https://mycophobia.org/tromi") end,
ExitScene
}
local main_menu_icons = {
CHAR.icon.play,
CHAR.icon.rewind,
CHAR.icon.export,
CHAR.icon.home,
CHAR.icon.info,
CHAR.icon.toDown,
CHAR.icon.globe,
CHAR.icon.settings,
CHAR.icon.home,
CHAR.icon.back,
}
function Title2Scene:new()
if SOUNDS['bgm_firsthalf']:isPlaying() or SOUNDS['bgm_secondhalf']:isPlaying() or not SETTINGS["music"] then
love.audio.stop()
end
self.main_menu_state = 1
PENTO_MODE = false
input_code = {0,0,0,0,0,0,0,0}
end
function Title2Scene:changeOption(rel)
local len = #main_menu_title
self.main_menu_state = (self.main_menu_state + len + rel - 1) % len + 1
end
function Title2Scene: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("Tromi", 40, 65, 100, "left")
drawText("Mobile 1.4 - PC 2.3", 150, 78, 200, "left")
drawText("https://mycophobia.org\nhttps://github.com/SweetSea-ButImNotSweet/", 40, 100, 300, "left")
if PENTO_MODE then
drawBigText("PENTO MODE", 400, 85, 200, "right")
end
love.graphics.setColor(1, 1, 1, 0.5)
love.graphics.setLineWidth(1)
love.graphics.line(320, 175, 320, 375)
-- Selecting
love.graphics.setColor(0.4, 1, 1, 0.5)
if self.main_menu_state > half_pos then
love.graphics.rectangle("fill", 330, 135 + 40 * (self.main_menu_state - half_pos), 270, 40)
else
love.graphics.rectangle("fill", 40, 135 + 40 * self.main_menu_state, 270, 40)
end
-- Text
for i = 1, half_pos do
drawText(main_menu_title[i] , 45, 145 + 40 * i, 230, "right")
drawText(main_menu_icons[i] or '', 285, 145 + 40 * i, 20, "center")
end
for i = half_pos + 1, #main_menu_title do
drawText(main_menu_title[i] , 365, 145 + 40 * (i - half_pos), 230, "left")
drawText(main_menu_icons[i] or '', 335, 145 + 40 * (i - half_pos), 20, "center")
end
end
local function checkCode(c)
if not PENTO_MODE then
table.insert(input_code, c)
if #input_code > 8 then
table.remove(input_code, 1)
end
local code_string = table.concat(input_code, ',')
if (
code_string == "-1,-1,-1,-1,1,1,1,1" or
code_string == "2,2,2,2,2,2,2,2"
) then
PENTO_MODE = true
end
end
end
---@param e SCENE_onInput
function Title2Scene: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 = main_menu_scenes[self.main_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.input == "left" or e.scancode == "left" then
self:changeOption(-half_pos)
checkCode(-1)
elseif e.input == "right" or e.scancode == "right" then
self:changeOption(half_pos)
checkCode(1)
elseif e.type == "touch" or e.type == "mouse" then
local x, y = e.x, e.y
local testOption = function(sel)
if sel ~= self.main_menu_state then
self.main_menu_state = sel
else
self:onInputPress{input = "menu_decide"}
end
end
-- 40 175 320 375 320 175 600 375
if y >= 175 and y <= 375 then
local sel = math.floor((y - 175) / 40) + 1
if x >= 40 and x <= 310 and sel <= half_pos then
testOption(sel)
elseif (
x >= 330 and x <= 600 and
sel >= 1 and sel + half_pos <= #main_menu_scenes
) then
testOption(sel + half_pos)
end
elseif (
x >= 460 and y >= 85 and
x <= 600 and y <= 125
) then
checkCode(2)
end
end
end
return Title2Scene