ExperimentalGear/scripts/titlescreen.lua

103 lines
2.6 KiB
Lua
Raw Normal View History

local Common = require("common.util")
local splashScreen = require('titlescreen.splash')
local titleScreen = require('titlescreen.title')
local modeSelectScreen = require('titlescreen.mode_select')
local serviceScreen = require('titlescreen.service')
2021-12-19 23:16:19 +01:00
local screens = {
splash = {
screen = splashScreen
},
2021-12-21 19:39:34 +01:00
title = {
screen = titleScreen
},
2021-12-19 23:16:19 +01:00
mode_select = {
screen = modeSelectScreen
2021-12-20 00:39:38 +01:00
},
service = {
screen = serviceScreen
}
2021-12-19 23:16:19 +01:00
}
2021-07-25 20:10:06 +02:00
local url, version = game.UpdateAvailable()
2021-07-25 20:10:06 +02:00
local currentScreen = (
url and screens.service or ( -- if update available, show service screen,
game.GetSkinSetting("animations_skipIntro") and screens.title or screens.splash -- else show splash screen, if skipIntro is not set.
)
)
2021-07-25 20:10:06 +02:00
local function deltaKnob(delta)
if math.abs(delta) > 1.5 * math.pi then
return delta + 2 * math.pi * Common.sign(delta) * -1
end
return delta
2021-07-25 20:10:06 +02:00
end
local lastKnobs = nil
local knobProgress = 0
local function handle_controller()
2021-12-19 23:16:19 +01:00
if (not currentScreen.screen.onKnobsChange) then
return
end
if lastKnobs == nil then
lastKnobs = {game.GetKnob(0), game.GetKnob(1)}
else
local newKnobs = {game.GetKnob(0), game.GetKnob(1)}
knobProgress = knobProgress - deltaKnob(lastKnobs[1] - newKnobs[1]) * 1.2
knobProgress = knobProgress - deltaKnob(lastKnobs[2] - newKnobs[2]) * 1.2
lastKnobs = newKnobs
if math.abs(knobProgress) > 1 then
2021-12-19 23:16:19 +01:00
if (knobProgress < 0) then
-- Negative
currentScreen.screen.onKnobsChange(-1)
else
-- Positive
currentScreen.screen.onKnobsChange(1)
end
knobProgress = knobProgress - Common.roundToZero(knobProgress)
end
end
2021-07-25 20:10:06 +02:00
end
local function handleScreenResponse(res)
if (res.eventType == 'switch') then
if (not screens[res.toScreen]) then
game.Log('Undefined screen ' .. res.toScreen, game.LOGGER_ERROR)
return
end
currentScreen = screens[res.toScreen]
if currentScreen.screen.reset then
currentScreen.screen.reset()
end
end
end
function render(deltaTime)
handle_controller()
local res = currentScreen.screen.render(deltaTime)
if res then
handleScreenResponse(res)
end
end
function mouse_pressed(button)
if (currentScreen.screen.onMousePressed) then
currentScreen.screen.onMousePressed(button)
end
return 0
end
function button_pressed(button)
if (currentScreen.screen.onButtonPressed) then
currentScreen.screen.onButtonPressed(button)
end
end