From bc865e29d15d15ba31e4d43c6272ad31a4e28244 Mon Sep 17 00:00:00 2001 From: Aki Date: Sat, 20 Aug 2016 19:02:17 +0200 Subject: Start for new menu --- menu.lua | 221 ++++++++++----------------------------------------------------- 1 file changed, 35 insertions(+), 186 deletions(-) (limited to 'menu.lua') diff --git a/menu.lua b/menu.lua index e41e7a1..34cb539 100644 --- a/menu.lua +++ b/menu.lua @@ -1,215 +1,64 @@ --- `Menu` --- It is one of the last things I will need to mess around with. I'm happy and surprised everything works so far. --- For sure I have learnt a lot about lua during this journey. Still a lot ahead. I will continue writing in the same style though, to not make it even worse. - --- WHOLE CODE HAS FLAG OF "need a cleanup" +-- `Menu` (Scene) +-- It creates single screen of a menu require "selector" +require "button" --- Metatable of `Menu` +-- Here it begins Menu = { - -- move selectors to one table; make functions to retrieve selectors w or w/o controller - selectors = nil, - nauts = require "nautslist", - portrait_sprite = nil, - portrait_sheet = require "portraits", scale = getScale(), - countdown = 10, - maplist = require "maplist", - map = 1, - header_move = 0 + elements, --table + active = 1 } - --- Constructor of `Menu` -function Menu:new() - -- Meta +function Menu:new(name) local o = {} setmetatable(o, self) self.__index = self - -- initialize - o.selectors = {} - o.portrait_sprite = love.graphics.newImage("assets/portraits.png") - -- selectors - for i=0,3 do - o:newSelector() - end - -- music - o.music = Music:new("ROFLmenu.ogg") + o.elements = {} + o:load(name) return o end +function Menu:delete() end --- Destructor -function Menu:delete() - self.music:delete() -end - --- Naut selector -function Menu:newSelector() - local selector = Selector:new(self) - local w, h = love.graphics.getWidth()/self.scale, love.graphics.getHeight()/self.scale - local n = #self.selectors - 1 - table.insert(self.selectors, selector) - local x = (w-76)/2+n*44 - local y = h/2-8 - selector:setPosition(x, y) -end - --- Selectors tables getters --- all of them -function Menu:getSelectors() - return self.selectors -end --- with control set -function Menu:getSelectorsActive() - local t = {} - for _,selector in pairs(self.selectors) do - if selector:getState() ~= 0 then - table.insert(t, selector) - end - end - return t -end --- without control set -function Menu:getSelectorsInactive() - local t = {} - for _,selector in pairs(self.selectors) do - if selector:getState() == 0 then - table.insert(t, selector) - end - end - return t -end --- with locked character -function Menu:getSelectorsLocked() - local t = {} - for _,selector in pairs(self.selectors) do - if selector:getState() == 2 then - table.insert(t, selector) - end - end - return t -end - --- Tests if Control set is assigned to any selector (1.) and if it is locked (2.) -function Menu:isSetUsed(set) - for k,selector in pairs(self:getSelectorsActive()) do - if selector:getControlSet() == set then - if selector:getState() == 2 then - return true, true - else - return true, false - end - end - end - return false, false +-- Load menu from file +function Menu:load(name) + local name = "config/" .. (name or "menumain") .. ".lua" + print(name) + local menu = love.filesystem.load(name) + self.elements = menu() end --- Header get bounce move -function Menu:getBounce(f) - local f = f or 1 - return math.sin(self.header_move*f*math.pi) -end - --- Speed up countdown -function Menu:countdownJump() - if self.countdown ~= Menu.countdown then -- Menu.countdown is initial - self.countdown = self.countdown - 1 - end -end - --- Get table of nauts currently selected by locked selectors -function Menu:getNauts() - local nauts = {} - for _,selector in pairs(self:getSelectorsLocked()) do - table.insert(nauts, {selector:getSelectionName(), selector:getControlSet()}) - end - return nauts -end - --- WARUDO -function Menu:startGame() - local world = World:new(self.maplist[self.map], self:getNauts()) - changeScene(world) +-- Creators +function Menu:newButton() + local button = Button:new() end -- LÖVE2D callbacks --- Update -function Menu:update(dt) - if #self:getSelectorsLocked() > 1 then - self.countdown = self.countdown - dt - else - self.countdown = Menu.countdown -- Menu.countdown is initial - end - if self.countdown < 0 then - self:startGame() - end - -- Bounce header - self.header_move = self.header_move + dt - if self.header_move > 2 then - self.header_move = self.header_move - 2 - end -end --- Draw +function Menu:update(dt) end function Menu:draw() - -- locals - local w, h = love.graphics.getWidth()/self.scale, love.graphics.getHeight()/self.scale local scale = self.scale - -- map selection love.graphics.setFont(Font) - love.graphics.printf("Map: " .. self.maplist[self.map], (w/2)*scale, (h/2-22)*scale, 150, "center", 0, scale, scale, 75, 4) - -- character selection - for _,selector in pairs(self:getSelectors()) do - selector:draw() - end - -- header - love.graphics.setFont(Bold) - local angle = self:getBounce(2) - local dy = self:getBounce()*4 - love.graphics.printf("ROFLNAUTS2",(w/2)*scale,(32+dy)*scale,336,"center",(angle*5)*math.pi/180,scale,scale,168,12) - -- footer - love.graphics.setFont(Font) - love.graphics.printf("Use W,S,A,D,G,H or Arrows,Enter,Rshift or Gamepad\n\nA game by the Awesomenauts community\nSeltzy, PlasmaWisp, ParaDoX, MilkingChicken, Burningdillo, Bronkey, Aki, 04font\nBased on a game by Jan Willem Nijman, Paul Veer and Bits_Beats XOXO", (w/2)*scale, (h-42)*scale, 336, "center", 0, scale, scale, 168, 4) - -- countdown - local countdown = math.floor(self.countdown) - if self.countdown < Menu.countdown then -- Menu.countdown is initial - love.graphics.setFont(Bold) - love.graphics.print(countdown,(w/2-6.5)*self.scale,(h/2+30)*self.scale,0,self.scale,self.scale) + for i,v in ipairs(self.elements) do + if self.active == i then + love.graphics.setColor(255, 128, 0, 255) + else + love.graphics.setColor(255, 255, 255, 255) + end + love.graphics.print(v, 10, (80-5*#self.elements+10*i)*scale, 0, scale, scale) end end -- Controller callbacks function Menu:controlpressed(set, action, key) - local used, locked = self:isSetUsed(set) - -- Pass to active selectors - for k,selector in pairs(self:getSelectorsActive()) do - selector:controlpressed(set, action, key) - end - if not used then - if action == "attack" then - self:getSelectorsInactive()[1]:assignControlSet(set) - end - -- map selection chaos! - if action == "left" then - if self.map ~= 1 then - self.map = self.map - 1 - else - self.map = #self.maplist - end - end - if action == "right" then - if self.map ~= #self.maplist then - self.map = self.map + 1 - else - self.map = 1 - end - end + if action == "down" then + self.active = (self.active%#self.elements)+1 end - -- speed up the countdown - if action ~= "jump" then - if set == nil or locked then - self:countdownJump() -- that's funny isn't it? if not jump then jump + if action == "up" then + if self.active == 1 then + self.active = #self.elements + else + self.active = self.active - 1 end end end -function Menu:controlreleased(set, action, key) -end \ No newline at end of file +function Menu:controlreleased(set, action, key) end \ No newline at end of file -- cgit v1.1 From 6e9aa28e70ec842db643a06609454fff54b5d86a Mon Sep 17 00:00:00 2001 From: Aki Date: Mon, 22 Aug 2016 02:24:32 +0200 Subject: Werking! --- menu.lua | 25 +++++++++++-------------- 1 file changed, 11 insertions(+), 14 deletions(-) (limited to 'menu.lua') diff --git a/menu.lua b/menu.lua index 34cb539..87369da 100644 --- a/menu.lua +++ b/menu.lua @@ -1,8 +1,8 @@ -- `Menu` (Scene) -- It creates single screen of a menu +-- I do know that model I used here and in `World` loading configuration files is not flawless but I did not want to rewrite `World`s one but wanted to keep things similar at least in project scope. require "selector" -require "button" -- Here it begins Menu = { @@ -23,14 +23,9 @@ function Menu:delete() end -- Load menu from file function Menu:load(name) local name = "config/" .. (name or "menumain") .. ".lua" - print(name) local menu = love.filesystem.load(name) self.elements = menu() -end - --- Creators -function Menu:newButton() - local button = Button:new() + self.elements[self.active]:focus() end -- LÖVE2D callbacks @@ -38,27 +33,29 @@ function Menu:update(dt) end function Menu:draw() local scale = self.scale love.graphics.setFont(Font) - for i,v in ipairs(self.elements) do - if self.active == i then - love.graphics.setColor(255, 128, 0, 255) - else - love.graphics.setColor(255, 255, 255, 255) - end - love.graphics.print(v, 10, (80-5*#self.elements+10*i)*scale, 0, scale, scale) + for _,element in pairs(self.elements) do + element:draw(scale) end end -- Controller callbacks function Menu:controlpressed(set, action, key) if action == "down" then + self.elements[self.active]:blur() self.active = (self.active%#self.elements)+1 + self.elements[self.active]:focus() end if action == "up" then + self.elements[self.active]:blur() if self.active == 1 then self.active = #self.elements else self.active = self.active - 1 end + self.elements[self.active]:focus() + end + for _,element in pairs(self.elements) do + element:controlpressed(set, action, key) end end function Menu:controlreleased(set, action, key) end \ No newline at end of file -- cgit v1.1 From e57a5b0b77c1ba3a2f05371c551d0e61fc9ce709 Mon Sep 17 00:00:00 2001 From: Aki Date: Mon, 22 Aug 2016 17:10:20 +0200 Subject: Graphics, animation, general improvements --- menu.lua | 36 ++++++++++++++++++++++++------------ 1 file changed, 24 insertions(+), 12 deletions(-) (limited to 'menu.lua') diff --git a/menu.lua b/menu.lua index 87369da..9c7481b 100644 --- a/menu.lua +++ b/menu.lua @@ -24,12 +24,32 @@ function Menu:delete() end function Menu:load(name) local name = "config/" .. (name or "menumain") .. ".lua" local menu = love.filesystem.load(name) - self.elements = menu() + self.elements = menu(self) + self.elements[self.active]:focus() +end + +-- Cycle elements +function Menu:next() + self.elements[self.active]:blur() + self.active = (self.active%#self.elements)+1 + self.elements[self.active]:focus(true) +end +function Menu:previous() + self.elements[self.active]:blur() + if self.active == 1 then + self.active = #self.elements + else + self.active = self.active - 1 + end self.elements[self.active]:focus() end -- LÖVE2D callbacks -function Menu:update(dt) end +function Menu:update(dt) + for _,element in pairs(self.elements) do + element:update(dt) + end +end function Menu:draw() local scale = self.scale love.graphics.setFont(Font) @@ -41,18 +61,10 @@ end -- Controller callbacks function Menu:controlpressed(set, action, key) if action == "down" then - self.elements[self.active]:blur() - self.active = (self.active%#self.elements)+1 - self.elements[self.active]:focus() + self:next() end if action == "up" then - self.elements[self.active]:blur() - if self.active == 1 then - self.active = #self.elements - else - self.active = self.active - 1 - end - self.elements[self.active]:focus() + self:previous() end for _,element in pairs(self.elements) do element:controlpressed(set, action, key) -- cgit v1.1 From dd32c9c620918a3b0da59e42ff343cdd78a12a39 Mon Sep 17 00:00:00 2001 From: Aki Date: Mon, 22 Aug 2016 17:22:49 +0200 Subject: added music --- menu.lua | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) (limited to 'menu.lua') diff --git a/menu.lua b/menu.lua index 9c7481b..49c067d 100644 --- a/menu.lua +++ b/menu.lua @@ -3,12 +3,14 @@ -- I do know that model I used here and in `World` loading configuration files is not flawless but I did not want to rewrite `World`s one but wanted to keep things similar at least in project scope. require "selector" +require "music" -- Here it begins Menu = { scale = getScale(), elements, --table - active = 1 + active = 1, + music } function Menu:new(name) local o = {} @@ -16,6 +18,7 @@ function Menu:new(name) self.__index = self o.elements = {} o:load(name) + o.music = Music:new("menu.ogg") return o end function Menu:delete() end -- cgit v1.1 From f6c593d02271bbbea839ac9c0b0ae5543b29dfab Mon Sep 17 00:00:00 2001 From: Aki Date: Tue, 23 Aug 2016 18:16:06 +0200 Subject: cleanup --- menu.lua | 1 - 1 file changed, 1 deletion(-) (limited to 'menu.lua') diff --git a/menu.lua b/menu.lua index 49c067d..3ef477d 100644 --- a/menu.lua +++ b/menu.lua @@ -2,7 +2,6 @@ -- It creates single screen of a menu -- I do know that model I used here and in `World` loading configuration files is not flawless but I did not want to rewrite `World`s one but wanted to keep things similar at least in project scope. -require "selector" require "music" -- Here it begins -- cgit v1.1 From cd72b080bd949d9ec0b42c29e0ea31e300464dad Mon Sep 17 00:00:00 2001 From: Aki Date: Wed, 24 Aug 2016 00:10:33 +0200 Subject: Focus() return bool --- menu.lua | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) (limited to 'menu.lua') diff --git a/menu.lua b/menu.lua index 3ef477d..95e764b 100644 --- a/menu.lua +++ b/menu.lua @@ -34,7 +34,9 @@ end function Menu:next() self.elements[self.active]:blur() self.active = (self.active%#self.elements)+1 - self.elements[self.active]:focus(true) + if not self.elements[self.active]:focus() then + self:next() + end end function Menu:previous() self.elements[self.active]:blur() @@ -43,7 +45,9 @@ function Menu:previous() else self.active = self.active - 1 end - self.elements[self.active]:focus() + if not self.elements[self.active]:focus() then + self:previous() + end end -- LÖVE2D callbacks -- cgit v1.1 From bf9ad0478e6b72f0e19af9cb7e65337521721e77 Mon Sep 17 00:00:00 2001 From: Aki Date: Wed, 24 Aug 2016 05:32:21 +0200 Subject: reset active element --- menu.lua | 1 + 1 file changed, 1 insertion(+) (limited to 'menu.lua') diff --git a/menu.lua b/menu.lua index 95e764b..206c45e 100644 --- a/menu.lua +++ b/menu.lua @@ -26,6 +26,7 @@ function Menu:delete() end function Menu:load(name) local name = "config/" .. (name or "menumain") .. ".lua" local menu = love.filesystem.load(name) + self.active = 1 self.elements = menu(self) self.elements[self.active]:focus() end -- cgit v1.1 From ac6d4307fc9f7713b996eb8d36a8d0d3756efc00 Mon Sep 17 00:00:00 2001 From: Aki Date: Thu, 25 Aug 2016 16:44:13 +0200 Subject: THIS NEED REAL CLEANUP --- menu.lua | 25 ++++++++++++++++++++++++- 1 file changed, 24 insertions(+), 1 deletion(-) (limited to 'menu.lua') diff --git a/menu.lua b/menu.lua index 206c45e..29f5b2a 100644 --- a/menu.lua +++ b/menu.lua @@ -9,12 +9,30 @@ Menu = { scale = getScale(), elements, --table active = 1, - music + music, + sprite, + quads = { + button = { + normal = love.graphics.newQuad(0, 0, 58,15, 80,130), + active = love.graphics.newQuad(0, 0, 58,15, 80,130) + }, + portrait = { + normal = love.graphics.newQuad( 0, 15, 32,32, 80,130), + active = love.graphics.newQuad(32, 15, 32,32, 80,130) + }, + panorama = { + normal = love.graphics.newQuad(0,47, 80,42, 80,130), + active = love.graphics.newQuad(0,88, 80,42, 80,130) + }, + arrow_l = love.graphics.newQuad(68, 0, 6, 6, 80,130), + arrow_r = love.graphics.newQuad(74, 0, 6, 6, 80,130), + } } function Menu:new(name) local o = {} setmetatable(o, self) self.__index = self + self.sprite = love.graphics.newImage("assets/menu.png") o.elements = {} o:load(name) o.music = Music:new("menu.ogg") @@ -31,6 +49,11 @@ function Menu:load(name) self.elements[self.active]:focus() end +-- Return reference to quads table and menu sprite +function Menu:getSheet() + return self.sprite, self.quads +end + -- Cycle elements function Menu:next() self.elements[self.active]:blur() -- cgit v1.1 From ba478157bd634e60469d8ca1091a69a8a614e1bd Mon Sep 17 00:00:00 2001 From: Aki Date: Sun, 28 Aug 2016 03:42:31 +0200 Subject: temp background --- menu.lua | 3 +++ 1 file changed, 3 insertions(+) (limited to 'menu.lua') diff --git a/menu.lua b/menu.lua index 29f5b2a..bd04215 100644 --- a/menu.lua +++ b/menu.lua @@ -11,6 +11,7 @@ Menu = { active = 1, music, sprite, + background, quads = { button = { normal = love.graphics.newQuad(0, 0, 58,15, 80,130), @@ -33,6 +34,7 @@ function Menu:new(name) setmetatable(o, self) self.__index = self self.sprite = love.graphics.newImage("assets/menu.png") + self.background = love.graphics.newImage("assets/backgrounds/menu.png") o.elements = {} o:load(name) o.music = Music:new("menu.ogg") @@ -82,6 +84,7 @@ function Menu:update(dt) end function Menu:draw() local scale = self.scale + love.graphics.draw(self.background, 0, 0, 0, scale, scale) love.graphics.setFont(Font) for _,element in pairs(self.elements) do element:draw(scale) -- cgit v1.1 From 39a4c99468b5f02730f02fb910af12d66e156c67 Mon Sep 17 00:00:00 2001 From: nthirtyone Date: Thu, 6 Oct 2016 13:58:42 +0200 Subject: Fixed music deletion on menu deletion --- menu.lua | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) (limited to 'menu.lua') diff --git a/menu.lua b/menu.lua index bd04215..7771f39 100644 --- a/menu.lua +++ b/menu.lua @@ -40,7 +40,9 @@ function Menu:new(name) o.music = Music:new("menu.ogg") return o end -function Menu:delete() end +function Menu:delete() + self.music:delete() +end -- Load menu from file function Menu:load(name) -- cgit v1.1 From 35262a7245bcd9ebf937d07ab3326655d96e5d2e Mon Sep 17 00:00:00 2001 From: Aki Date: Thu, 6 Oct 2016 14:43:11 +0200 Subject: Fixed scaling of fullscreen menu in different ratios --- menu.lua | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'menu.lua') diff --git a/menu.lua b/menu.lua index 7771f39..e24bc64 100644 --- a/menu.lua +++ b/menu.lua @@ -86,7 +86,7 @@ function Menu:update(dt) end function Menu:draw() local scale = self.scale - love.graphics.draw(self.background, 0, 0, 0, scale, scale) + love.graphics.draw(self.background, 0, 0, 0, getRealScale(), getRealScale()) love.graphics.setFont(Font) for _,element in pairs(self.elements) do element:draw(scale) -- cgit v1.1 From 73bcd524906c51d43b22b3ea68c64b38f130bea6 Mon Sep 17 00:00:00 2001 From: Aki Date: Tue, 20 Dec 2016 06:02:05 +0100 Subject: I have no idea why I have put everything in one commit --- menu.lua | 19 +++++++++++++------ 1 file changed, 13 insertions(+), 6 deletions(-) (limited to 'menu.lua') diff --git a/menu.lua b/menu.lua index e24bc64..b72ea09 100644 --- a/menu.lua +++ b/menu.lua @@ -12,6 +12,7 @@ Menu = { music, sprite, background, + allowMove = true, quads = { button = { normal = love.graphics.newQuad(0, 0, 58,15, 80,130), @@ -95,14 +96,20 @@ end -- Controller callbacks function Menu:controlpressed(set, action, key) - if action == "down" then - self:next() - end - if action == "up" then - self:previous() + if self.allowMove then + if action == "down" then + self:next() + end + if action == "up" then + self:previous() + end end for _,element in pairs(self.elements) do element:controlpressed(set, action, key) end end -function Menu:controlreleased(set, action, key) end \ No newline at end of file +function Menu:controlreleased(set, action, key) + for _,element in pairs(self.elements) do + element:controlreleased(set, action, key) + end +end \ No newline at end of file -- cgit v1.1