From 973596cf93b4ff6ae56d02d1040271340f5ee114 Mon Sep 17 00:00:00 2001 From: Kazhnuz Date: Thu, 16 Sep 2021 20:42:34 +0200 Subject: [PATCH] improvement: port titlescreen to gui --- .../scenes/menus/titlescreen/init.lua | 97 +++---------------- .../scenes/menus/titlescreen/menu.lua | 28 +++--- .../scenes/menus/titlescreen/pressStart.lua | 30 ++++++ .../scenes/menus/titlescreen/screen.lua | 59 +++++++++++ 4 files changed, 116 insertions(+), 98 deletions(-) create mode 100644 sonic-radiance.love/scenes/menus/titlescreen/pressStart.lua create mode 100644 sonic-radiance.love/scenes/menus/titlescreen/screen.lua diff --git a/sonic-radiance.love/scenes/menus/titlescreen/init.lua b/sonic-radiance.love/scenes/menus/titlescreen/init.lua index f5ee9de..ff6954b 100644 --- a/sonic-radiance.love/scenes/menus/titlescreen/init.lua +++ b/sonic-radiance.love/scenes/menus/titlescreen/init.lua @@ -22,98 +22,23 @@ ]] local Scene = require "game.scenes" -local TitleScreen = Scene:extend() -local gui = require "game.modules.gui" +local Title = Scene:extend() +local TitleScreen = require "scenes.menus.titlescreen.screen" -local TweenManager = require "birb.classes.time" -local Menu = require "scenes.menus.titlescreen.menu" +function Title:new(fromMenu) + Title.super.new(self, true, true) -function TitleScreen:new(fromMenu) - TitleScreen.super.new(self) - - local fromMenu = (fromMenu == true) - - self.borders = gui.newBorder(424, 30, 8) self.assets:addImage("logo", "assets/artworks/logo.png") self.assets:addTileset("charicons", "assets/sprites/characters/charicons") - self.tweens = TweenManager(self) - self:initBackground() - - self.haveMenu = false - self.flashOpacity = 0 - self.showPressStart = true - self.showPressStartTimer = 0.5 - - if (fromMenu) then - self.darkenOpacity = 0 - self.canShowPressStart = true - self.borderY = 30 - self.logoX = 0 - else - self.darkenOpacity = 1 - self.canShowPressStart = false - self.borderY = 0 - self.logoX = 270 - - self.tweens:newTween(0.2, 0.5, {borderY = 30}, "inOutQuart") - self.tweens:newTween(0.5, 0.4, {darkenOpacity = 0}, "outExpo") - self.tweens:newTween(0.7, 0.6, {logoX = 0}, "inOutQuart") - self.tweens:newTween(1.3, 0.03, {flashOpacity = 1}, "inQuart") - self.tweens:newTween(1.45, 0.2, {flashOpacity = 0}, "outExpo") - self.tweens:newSwitch(1.4, { "canShowPressStart" }) - end + TitleScreen(fromMenu) end -function TitleScreen:initBackground() - self.background = love.graphics.newImage("datas/gamedata/maps/sti/stuff/tilescreen.png") +function Title:startPressed() + self.assets:playSFX("mSelect") + self.menusystem:setSoundFromSceneAssets("mBeep") + self.gui.focusedElement = nil + self.gui:playScreenTransform("titleScreen", "showMenu") end -function TitleScreen:update(dt) - self.tweens:update(dt) - if (self.canShowPressStart) then - self.showPressStartTimer = self.showPressStartTimer - dt - if self.showPressStartTimer < 0 then - self.showPressStart = (self.showPressStart == false) - self.showPressStartTimer = 0.5 - end - - local keys = self:getKeys(1) - if (keys["start"].isPressed and (self.haveMenu == false)) then - self.assets:playSFX("mSelect") - Menu(self) - self.haveMenu = true - self.menusystem:setSoundFromSceneAssets("mBeep") - end - - end -end - -function TitleScreen:draw() - utils.graphics.resetColor() - local w, h = self.background:getDimensions() - love.graphics.draw(self.background,424/2,240/2,0,1,1,w/2,h/2) - - love.graphics.setColor(0, 0, 0, self.darkenOpacity) - love.graphics.rectangle("fill", 0, 0, 424, 240) - utils.graphics.resetColor( ) - - local w, h = self.assets.images["logo"]:getDimensions() - self.assets:drawImage("logo", 240 - 32, 80 - self.logoX, 0, 1, 1, w/2, h/2) - - if (self.canShowPressStart) and (self.showPressStart) then - self.assets.fonts["SA2font"]:print("PRESS START", 424/2, 240/1.33, "center", 0, 1, 1) - end - - love.graphics.setColor(1, 1, 1, self.flashOpacity) - love.graphics.rectangle("fill", 0, 0, 424, 240) - utils.graphics.resetColor( ) -end - -function TitleScreen:drawOverTransition() - love.graphics.draw(self.borders, 0, self.borderY, 0, 1, -1) - love.graphics.draw(self.borders, 424, 240 - self.borderY, 0, -1, 1) - self.assets.fonts["small"]:draw("v" .. game.version, 424 - 44, 240 + 10 - self.borderY) -end - -return TitleScreen +return Title diff --git a/sonic-radiance.love/scenes/menus/titlescreen/menu.lua b/sonic-radiance.love/scenes/menus/titlescreen/menu.lua index f6b0afe..5fe321b 100644 --- a/sonic-radiance.love/scenes/menus/titlescreen/menu.lua +++ b/sonic-radiance.love/scenes/menus/titlescreen/menu.lua @@ -1,5 +1,5 @@ -local RadianceMenu = require "game.modules.menus.parents.menu" -local RadianceWidget = require "game.modules.menus.parents.widget" +local RadianceMenu = require "birb.modules.gui.menus.listbox" +local RadianceWidget = require "birb.modules.gui.menus.widgets.base" local SaveMenu = RadianceMenu:extend() local SaveWidget = RadianceWidget:extend() @@ -11,26 +11,31 @@ local radTransitions = require "game.modules.transitions" local HPADDING = 68 local VPADDING = 28 -function SaveMenu:new(scene) +function SaveMenu:new() local w, h = 424 - (HPADDING * 2), 240 - (VPADDING * 2) - SaveMenu.super.new(self, scene, "save", HPADDING, VPADDING + 1, w, h, 3) + SaveMenu.super.new(self, "save", 424/2, 240/2, w, h, 3) + self.ox = w/2 + self.oy = h/2 + self.sx = 0.8 + self.sy = 0.8 + self.opacity = 0 local metadata = game:getMetadata() for i, save in ipairs(metadata) do SaveWidget(self.scene, i, save) end self.textBox = gui.newTextBox("assets/gui/dialogbox.png", w - 8, (h / 3)) + self.isVisible = true end function SaveMenu:cancelAction() - self.scene.assets:playSFX("mBack") - self.scene.menusystem:reset() - self.scene.haveMenu = false + self:playSFX("back") + self.gui:playScreenTransform("titleScreen", "hideMenu") + self:looseFocus() end function SaveWidget:new(scene, saveid, savedata) - SaveWidget.super.new(self, scene, "save") - self.scene.menusystem:switchMenu("save") + SaveWidget.super.new(self, "save") self.saveid = saveid self.savedata = savedata self.emeralds = gui.getEmeraldsTexture(self.savedata.emeralds) @@ -46,7 +51,7 @@ function SaveWidget:drawCanvas() str = str .. "\n" str = str .. self.savedata.location .. "\n" str = str .. "Rings: " .. self.savedata.rings - self.font:draw(str, basex + 8, basey + 4) + self.assets.fonts["small"]:draw(str, basex + 8, basey + 4) for i, charName in ipairs(self.savedata.team) do local data = core.datas:get("characters", charName) @@ -56,12 +61,11 @@ function SaveWidget:drawCanvas() love.graphics.draw(self.emeralds, basex + 168, basey + 21) else - self.font:draw("New save", basex + 8, basey + 4) + self.assets.fonts["small"]:draw("New save", basex + 8, basey + 4) end end function SaveWidget:action() - self.scene.assets:playSFX("mSelect") game:read(self.saveid) core.screen:startTransition(radTransitions.borders, defTransitions.circle, function() scenes.menus.main() end, 424/2, 240/2) end diff --git a/sonic-radiance.love/scenes/menus/titlescreen/pressStart.lua b/sonic-radiance.love/scenes/menus/titlescreen/pressStart.lua new file mode 100644 index 0000000..532b21c --- /dev/null +++ b/sonic-radiance.love/scenes/menus/titlescreen/pressStart.lua @@ -0,0 +1,30 @@ +local TextElement = require "birb.modules.gui.elements.text" +local PressStart = TextElement:extend() + +function PressStart:new(isVisible) + PressStart.super.new(self, "pressStart", "SA2font", "PRESS START", 424/2, 240/1.33, "center") + self.isVisible = isVisible or false + self.showPressStartTimer = 0 +end + +function PressStart:update(dt) + self.showPressStartTimer = self.showPressStartTimer - dt + if self.showPressStartTimer < 0 then + self.showPressStart = (self.showPressStart == false) + self.showPressStartTimer = 0.5 + end +end + +function PressStart:draw() + if (self.showPressStart) then + PressStart.super.draw(self) + end +end + +function PressStart:keypressed(key) + if (key == "start") then + self.scene:startPressed() + end +end + +return PressStart \ No newline at end of file diff --git a/sonic-radiance.love/scenes/menus/titlescreen/screen.lua b/sonic-radiance.love/scenes/menus/titlescreen/screen.lua new file mode 100644 index 0000000..0f587c9 --- /dev/null +++ b/sonic-radiance.love/scenes/menus/titlescreen/screen.lua @@ -0,0 +1,59 @@ +local Screen = require "birb.modules.gui.screen" +local TitleScreen = Screen:extend() + +local AssetElement = require "birb.modules.gui.elements.assets" +local TextureElement = require "birb.modules.gui.elements.drawable" +local PressStart = require "scenes.menus.titlescreen.pressStart" +local ColorElement = require "birb.modules.gui.elements.color" + +local Menu = require "scenes.menus.titlescreen.menu" + +local either = utils.math.either + +local show = { + {"fade", "tween", 0.3, 0.4, {opacity = 0}, "outExpo"}, + {"logo", "movement", 0.5, 0.6, 424/2, 80, "inOutQuart"}, + {"flash", "tween", 1.1, 0.03, {opacity = 1}, "inQuart"}, + {"flash", "tween", 1.25, 0.2, {opacity = 0}, "outExpo"}, + --{"pressStart", "switch", 1.2, {"isVisible"}}, + --{"pressStart", "delayFocus", 1.2}, + } +local showMenu = { + {"save", "tween", 0, 0.25, {sx = 1, sy = 1, opacity = 1}, "inExpo"}, + {"save", "delayFocus", 0.25}, +} +local hideMenu = { + {"save", "tween", 0, 0.25, {sx = 0.8, sy = 0.8, opacity = 0}, "outExpo"}, + {"pressStart", "delayFocus", 0.25}, +} + +function TitleScreen:new(fromMenu) + self.fromMenu = (fromMenu == true) + TitleScreen.super.new(self, "titleScreen") + self:addTransform("show", show) + self:addTransform("showMenu", showMenu) + self:addTransform("hideMenu", hideMenu) + if (not self.fromMenu) then + self:show() + else + self.isVisible = true + end +end + +function TitleScreen:createElements() + local background = love.graphics.newImage("datas/gamedata/maps/sti/stuff/tilescreen.png") + local o = either(self.fromMenu, 0, 1) + local y = either(self.fromMenu, 80, -190) + local d = either(self.fromMenu, 0, 1.2) + return { + {TextureElement("background", background, 0, 0, 0, 1, 1, 0, 0, 1), 0, 200}, + {ColorElement("fade", 0, 0, 0, o), 0, 5}, + {AssetElement("logo", "images", "logo", 424/2, y, 0, 1, 1, "center", "center", 1, 0), 0, 4}, + {ColorElement("flash", 1, 1, 1, 0), 0, 1}, + {PressStart(self.fromMenu), d, 10, true}, + {Menu(self), 0, 4}, + } +end + + +return TitleScreen \ No newline at end of file