ExperimentalGear/scripts/titlescreen.lua

155 lines
4.8 KiB
Lua

require "common.globals"
local Common = require "common.util"
local Dim = require "scripts.graphics.dimensions"
local Wallpaper = require "components.wallpaper"
local PageView = require "api.page.pageview"
local PageManager = require "api.page.pagemanager"
local BootPage = require "titlescreen.boot"
local CheckUpdatePage = require "titlescreen.boot.checkupdatepage"
local SplashPage = require "titlescreen.splash"
local KShootManiaPage = require "titlescreen.splash.kshootmaniapage"
local USCPage = require "titlescreen.splash.uscpage"
local TeamExceedPage = require "titlescreen.splash.teamexceedpage"
local CreditsPage = require "titlescreen.splash.creditspage"
local TitlePage = require "titlescreen.title"
local MainMenuPage = require "titlescreen.mainmenu"
local ServiceMenuPage = require "titlescreen.service"
local InputCheckPage = require "titlescreen.service.inputcheckpage"
local ScreenCheckPage = require "titlescreen.service.screencheckpage"
local ColorCheckPage = require "titlescreen.service.colorcheckpage"
local VersionInfoPage = require "titlescreen.service.versioninfopage"
local pageView = PageView.new()
local pageManager = PageManager.get()
pageManager:storePage(CheckUpdatePage.new())
pageManager:storePage(BootPage.new())
pageManager:storePage(KShootManiaPage.new())
pageManager:storePage(USCPage.new())
pageManager:storePage(TeamExceedPage.new())
pageManager:storePage(CreditsPage.new())
pageManager:storePage(SplashPage.new())
pageManager:storePage(TitlePage.new())
pageManager:storePage(MainMenuPage.new())
pageManager:storePage(InputCheckPage.new())
pageManager:storePage(ScreenCheckPage.new())
pageManager:storePage(ColorCheckPage.new())
pageManager:storePage(VersionInfoPage.new())
pageManager:storePage(ServiceMenuPage.new())
pageView.onNavigated = function(self, back)
game.Log(tostring(self) .. " navigated " .. (back and "back " or "") .. "to: " .. tostring(pageView:get()),
game.LOGGER_INFO
)
end
pageView.onEmptied = function(self)
game.Log(tostring(self) .. " empty!", game.LOGGER_WARNING)
end
local pages = PageManager.get().pages
pageManager:getPage(BootPage).onInvalidation = function(self, toVersionPage)
if toVersionPage then
pageView:replace(pageManager:getPage(ServiceMenuPage))
pageView:get():init()
pageView:navigate(pageManager:getPage(VersionInfoPage))
pageView:get():init()
else
pageView:replace(pageManager:getPage(SplashPage))
pageView:get():init()
end
end
pageManager:getPage(SplashPage).onInvalidation = function(self)
pageView:replace(pageManager:getPage(TitlePage))
pageView:get():init()
end
pageManager:getPage(TitlePage).onInvalidation = function(self, toServiceMenu)
if toServiceMenu then
pageView:replace(pageManager:getPage(ServiceMenuPage))
pageView:get():init()
else
pageView:replace(pageManager:getPage(MainMenuPage))
pageView:get():init()
end
end
pageManager:getPage(ServiceMenuPage).onInvalidation = function(self)
pageView:replace(pageManager:getPage(SplashPage))
pageView:get():init()
end
--local currentScreen = game.GetSkinSetting("animations_skipIntro") and screens.title or screens.boot -- show boot screen if skipIntro is not set
pageView:replace(pages[BootPage.__name])
pageView:get():init()
local function deltaKnob(delta)
-- can someone tell me what the hell does this do? - Hersi
if math.abs(delta) > 1.5 * math.pi then
return delta + 2 * math.pi * Common.sign(delta) * -1
end
return delta
end
local lastKnobs = nil
local knobThreshold = (2 * math.pi) / 360
local function handleKnobs()
if lastKnobs == nil then
lastKnobs = {game.GetKnob(game.KNOB_LEFT), game.GetKnob(game.KNOB_RIGHT)}
else
local newKnobs = {game.GetKnob(game.KNOB_LEFT), game.GetKnob(game.KNOB_RIGHT)}
local knobProgress = {deltaKnob(lastKnobs[1] - newKnobs[1]), deltaKnob(lastKnobs[2] - newKnobs[2])}
lastKnobs = newKnobs
if math.abs(knobProgress[1]) > knobThreshold then
if pageView:get() then
pageView:get():handleKnobInput(game.KNOB_LEFT, knobProgress[1])
end
end
if math.abs(knobProgress[2]) > knobThreshold then
if pageView:get() then
pageView:get():handleKnobInput(game.KNOB_RIGHT, knobProgress[2])
end
end
end
end
function render(deltaTime)
handleKnobs()
Dim.updateResolution()
Wallpaper.render()
Dim.transformToScreenSpace()
pageView:render(deltaTime)
end
function mouse_pressed(button)
local mouseX, mouseY = game.GetMousePos()
if pageView:get() then
pageView:get():handleMouseInput(mouseX, mouseY, button)
end
return 0 --THIS '0' IS VERY IMPORTANT, IT WILL CRASH VERY HARD WITHOUT THIS
end
function button_pressed(button)
if pageView:get() then
pageView:get():handleButtonInput(button)
end
end