From a1d3d14781565f226e7795e4d426c28614baab88 Mon Sep 17 00:00:00 2001 From: Aki Date: Wed, 24 Aug 2016 01:57:39 +0200 Subject: First steps in new selector --- selector.lua | 147 ++++++++++++++++++++++------------------------------------- 1 file changed, 55 insertions(+), 92 deletions(-) (limited to 'selector.lua') diff --git a/selector.lua b/selector.lua index afdfed7..9e2ad23 100644 --- a/selector.lua +++ b/selector.lua @@ -1,112 +1,75 @@ --- `Selector` --- Used in menu; selecting nauts? +-- `Selector` (Element) +-- Used in Menu for selecting various things from list. Works for each Controller set or globally. +--[[ +How to use `Selector` in `Menu` config file? +selector:new(menu) + :setPosition(x, y) + :set("list", require "file_with_list") + :set("global", true/false) -- true: single selector; false: selector for each controller set present +]] + Selector = { - naut = 1, + parent, x = 0, y = 0, - parent = nil, - controlset = nil, - locked = false + focused = false, + global = false, + list, + sets, + locks, + selections } -function Selector:new(menu) + +-- Constructor +function Selector:new(parent) local o = {} setmetatable(o, self) self.__index = self - o.parent = menu + o.parent = parent + o.list = {} + o.sets = {} + o.locks = {} + o.selections = {} return o end + -- Position -function Selector:setPosition(x,y) - self.x = x - self.y = y -end function Selector:getPosition() return self.x, self.y end --- Control Sets -function Selector:assignControlSet(set) - self.controlset = set - self.naut = 2 -end -function Selector:getControlSet() - if self.controlset ~= nil then - return self.controlset - end +function Selector:setPosition(x,y) + self.x, self.y = x, y + return self end --- States -function Selector:getState() - if self:getControlSet() ~= nil then - if self.locked then - return 2 -- has controls and locked - end - return 1 -- has controls but not locked + +-- General setter for Menu configuration files +function Selector:set(name, func) + if type(name) == "string" and func ~= nil then + self[name] = func end - return 0 -- no controls and not locked -end -function Selector:clear() - self.controlset = nil - self.naut = 1 - self.locked = false -end -function Selector:getSelectionName() - return self.parent.nauts[self.naut] + return self end +-- Selecting functions +function Selector:getSelection(n) end +function Selector:next(n) end +function Selector:previous(n) end + +-- Menu callbacks +function Selector:focus() -- Called when Element gains focus + self.focused = true + return true +end +function Selector:blur() -- Called when Element loses focus + self.focused = false +end + -- LÖVE2D callbacks -function Selector:draw() - -- portrait, sprite - local name = self.parent.nauts[self.naut] - local p = self.parent.portrait_sheet[name] - local sprite = self.parent.portrait_sprite - -- scale, position - local scale = self.parent.scale - local x,y = self:getPosition() - -- arrows - local arrowl = self.parent.portrait_sheet.arrow_left - local arrowr = self.parent.portrait_sheet.arrow_right - if not self.locked then - love.graphics.draw(sprite, p.normal, x*scale, y*scale, 0, scale, scale) - if self.controlset ~= nil then - love.graphics.draw(sprite, arrowl, (x-2)* scale, (y+13)*scale, 0, scale, scale) - love.graphics.draw(sprite, arrowr, (x+30)*scale, (y+13)*scale, 0, scale, scale) - end - else - love.graphics.draw(sprite, p.active, x*scale, y*scale, 0, scale, scale) - end - if self.naut ~= 1 then - love.graphics.printf(string.upper(name), (x-8)*scale, (y+33)*scale, 48, "center", 0, scale, scale) - end -end +function Selector:draw(scale) end +function Selector:update(dt) end -- Controller callbacks -function Selector:controlpressed(set, action, key) - -- locals - local n = #self.parent.nauts - if set == self:getControlSet() then - if action == "left" and not self.locked then - if self.naut == 2 or self.naut == 1 then - self.naut = n - else - self.naut = self.naut - 1 - end - elseif action == "right" and not self.locked then - if self.naut == n then - self.naut = 2 - else - self.naut = self.naut + 1 - end - elseif action == "attack" then - if self.naut ~= 1 then - self.locked = true - end - elseif action == "jump" then - if self.locked == true then - self.locked = false - else - self:clear() - end - end - end -end -function Selector:controlreleased(set, action, key) -end \ No newline at end of file +function Selector:controlpressed(set, action, key) end +function Selector:controlreleased(set, action, key) end + +return Selector \ No newline at end of file -- cgit v1.1 From e22d7b380513aec4d83dc06c59dfd461b5d3a8b2 Mon Sep 17 00:00:00 2001 From: Aki Date: Wed, 24 Aug 2016 04:12:07 +0200 Subject: locks, selections, init --- selector.lua | 53 +++++++++++++++++++++++++++++++++++++++++++++++------ 1 file changed, 47 insertions(+), 6 deletions(-) (limited to 'selector.lua') diff --git a/selector.lua b/selector.lua index 9e2ad23..96113df 100644 --- a/selector.lua +++ b/selector.lua @@ -6,6 +6,7 @@ selector:new(menu) :setPosition(x, y) :set("list", require "file_with_list") :set("global", true/false) -- true: single selector; false: selector for each controller set present + :init() ]] Selector = { @@ -26,10 +27,6 @@ function Selector:new(parent) setmetatable(o, self) self.__index = self o.parent = parent - o.list = {} - o.sets = {} - o.locks = {} - o.selections = {} return o end @@ -50,11 +47,55 @@ function Selector:set(name, func) return self end --- Selecting functions -function Selector:getSelection(n) end +-- Initialize Selector with current settings. +function Selector:init() + -- Make sure that there is list present + if self.list == nil then + self.list = {} + end + -- Initialize global Selector + if self.global then + self.locks = {false} + self.selections = {1} + -- Initialize Selector for Controllers + else + self.sets = Controller.getSets() + self.locks = {} + self.selections = {} + for i=1,#self.sets do + self.locks[i] = false + self.selections[i] = 1 + end + end +end + +-- Cycle through list on given number function Selector:next(n) end function Selector:previous(n) end +-- Get number associated with a given set +function Selector:checkNumber(set) + if self.global then return 1 end -- For global Selector + for n,check in pairs(self.sets) do + if check == set then return n end + end +end + +-- Check if given number is locked +function Selector:isLocked(n) + return self.locks[n] +end + +-- Get value of selection of given number +function Selector:getSelectionValue(n) + return self.selections[n] +end + +-- Get value from list by selection +function Selector:getListValue(i) + return self.list[i] +end + -- Menu callbacks function Selector:focus() -- Called when Element gains focus self.focused = true -- cgit v1.1 From 9fab96edd18260aaa2586901e7d28dfc387f17d2 Mon Sep 17 00:00:00 2001 From: Aki Date: Wed, 24 Aug 2016 04:57:23 +0200 Subject: Testing: next/prev --- selector.lua | 43 +++++++++++++++++++++++++++++++++++-------- 1 file changed, 35 insertions(+), 8 deletions(-) (limited to 'selector.lua') diff --git a/selector.lua b/selector.lua index 96113df..fb2decb 100644 --- a/selector.lua +++ b/selector.lua @@ -62,16 +62,35 @@ function Selector:init() self.sets = Controller.getSets() self.locks = {} self.selections = {} - for i=1,#self.sets do - self.locks[i] = false - self.selections[i] = 1 + for n=1,#self.sets do + self.locks[n] = false + self.selections[n] = 1 end end + return self end -- Cycle through list on given number -function Selector:next(n) end -function Selector:previous(n) end +function Selector:next(n) + local total = #self.list + local current = self.selections[n] + local locked = self:isLocked(n) + if not locked then + self.selections[n] = (current % total) + 1 + end +end +function Selector:previous(n) + local total = #self.list + local current = self.selections[n] + local locked = self:isLocked(n) + if not locked then + if current == 1 then + self.selections[n] = total + else + self.selections[n] = current - 1 + end + end +end -- Get number associated with a given set function Selector:checkNumber(set) @@ -87,7 +106,7 @@ function Selector:isLocked(n) end -- Get value of selection of given number -function Selector:getSelectionValue(n) +function Selector:getSelection(n) return self.selections[n] end @@ -106,11 +125,19 @@ function Selector:blur() -- Called when Element loses focus end -- LÖVE2D callbacks -function Selector:draw(scale) end +function Selector:draw(scale) + local x,y = self:getPosition() + local text = self:getListValue(self:getSelection(1)) + love.graphics.setFont(Font) + love.graphics.setColor(255, 255, 255, 255) + love.graphics.printf(text, (x)*scale, (y)*scale, 54, "center", 0, scale, scale) +end function Selector:update(dt) end -- Controller callbacks -function Selector:controlpressed(set, action, key) end +function Selector:controlpressed(set, action, key) + self:next(1) +end function Selector:controlreleased(set, action, key) end return Selector \ No newline at end of file -- cgit v1.1 From 2aef35b0bbb72595977cddc2c2bbb3f65beb6bc6 Mon Sep 17 00:00:00 2001 From: Aki Date: Wed, 24 Aug 2016 05:30:57 +0200 Subject: Draw me like one of your french girls --- selector.lua | 53 ++++++++++++++++++++++++++++++++++++++++++++++------- 1 file changed, 46 insertions(+), 7 deletions(-) (limited to 'selector.lua') diff --git a/selector.lua b/selector.lua index fb2decb..38e7eb9 100644 --- a/selector.lua +++ b/selector.lua @@ -4,8 +4,11 @@ How to use `Selector` in `Menu` config file? selector:new(menu) :setPosition(x, y) - :set("list", require "file_with_list") - :set("global", true/false) -- true: single selector; false: selector for each controller set present + :setSpacing(42, 0) + :set("list", require "nautslist") + :set("sprite", love.graphics.newImage("assets/portraits.png")) + :set("quads", require "portraits") + :set("global", false) -- true: single selector; false: selector for each controller set present :init() ]] @@ -13,12 +16,16 @@ Selector = { parent, x = 0, y = 0, + horizontal = 0, + height = 0, focused = false, global = false, list, sets, locks, - selections + selections, + sprite, + quads } -- Constructor @@ -39,6 +46,15 @@ function Selector:setPosition(x,y) return self end +-- Spacing between positions of two blocks +function Selector:getSpacing() + return self.horizontal, self.vertical +end +function Selector:setSpacing(horizontal, vertical) + self.horizontal, self.vertical = horizontal, vertical + return self +end + -- General setter for Menu configuration files function Selector:set(name, func) if type(name) == "string" and func ~= nil then @@ -115,6 +131,29 @@ function Selector:getListValue(i) return self.list[i] end +-- Draw single block of Selector +function Selector:drawBlock(n, x, y, scale) + local x, y = x or 0, y or 0 + if self.quads == nil or self.sprite == nil then return end + love.graphics.setFont(Font) + love.graphics.setColor(255, 255, 255, 255) + local name = self:getListValue(self:getSelection(n)) + local locked = self:isLocked(n) + local sprite = self.sprite + local quad = self.quads[name] + local arrowl = self.quads.arrow_left + local arrowr = self.quads.arrow_right + if not locked then + love.graphics.draw(sprite, quad.normal, x*scale, y*scale, 0, scale, scale) + if self.focused then + love.graphics.draw(sprite, arrowl, (x-2)* scale, (y+13)*scale, 0, scale, scale) + love.graphics.draw(sprite, arrowr, (x+30)*scale, (y+13)*scale, 0, scale, scale) + end + else + love.graphics.draw(sprite, quad.active, x*scale, y*scale, 0, scale, scale) + end +end + -- Menu callbacks function Selector:focus() -- Called when Element gains focus self.focused = true @@ -127,10 +166,10 @@ end -- LÖVE2D callbacks function Selector:draw(scale) local x,y = self:getPosition() - local text = self:getListValue(self:getSelection(1)) - love.graphics.setFont(Font) - love.graphics.setColor(255, 255, 255, 255) - love.graphics.printf(text, (x)*scale, (y)*scale, 54, "center", 0, scale, scale) + local h,v = self:getSpacing() + for n=1,#self.selections do + self:drawBlock(n, x+h*n, y+v*n, scale) + end end function Selector:update(dt) end -- cgit v1.1 From 4bb25bb6c752efba17ffbc97bd4de9b3f33a190b Mon Sep 17 00:00:00 2001 From: Aki Date: Wed, 24 Aug 2016 05:46:11 +0200 Subject: it's alive! (almost) --- selector.lua | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) (limited to 'selector.lua') diff --git a/selector.lua b/selector.lua index 38e7eb9..f07b9e7 100644 --- a/selector.lua +++ b/selector.lua @@ -152,6 +152,9 @@ function Selector:drawBlock(n, x, y, scale) else love.graphics.draw(sprite, quad.active, x*scale, y*scale, 0, scale, scale) end + if self:getSelection(n) ~= 1 then + love.graphics.printf(string.upper(name), (x-8)*scale, (y+33)*scale, 48, "center", 0, scale, scale) + end end -- Menu callbacks @@ -175,7 +178,12 @@ function Selector:update(dt) end -- Controller callbacks function Selector:controlpressed(set, action, key) - self:next(1) + if set and self.focused then + local n = self:checkNumber(set) + local locked = self:isLocked(n) + if action == "left" and not locked then self:previous(n) end + if action == "right" and not locked then self:next(n) end + end end function Selector:controlreleased(set, action, key) end -- cgit v1.1 From 53d8dde1eb82bfdf0e3513d288bdb295cd84873f Mon Sep 17 00:00:00 2001 From: Aki Date: Wed, 24 Aug 2016 06:51:22 +0200 Subject: centered draw --- selector.lua | 1 + 1 file changed, 1 insertion(+) (limited to 'selector.lua') diff --git a/selector.lua b/selector.lua index f07b9e7..f7f3474 100644 --- a/selector.lua +++ b/selector.lua @@ -170,6 +170,7 @@ end function Selector:draw(scale) local x,y = self:getPosition() local h,v = self:getSpacing() + x = #self.sets*h*0.5 for n=1,#self.selections do self:drawBlock(n, x+h*n, y+v*n, scale) end -- cgit v1.1 From 5c9146f74c1cd522c22a9affa403cf1f4b96921d Mon Sep 17 00:00:00 2001 From: Aki Date: Wed, 24 Aug 2016 07:10:02 +0200 Subject: Now it's fine --- selector.lua | 32 ++++++++++++++++++++++---------- 1 file changed, 22 insertions(+), 10 deletions(-) (limited to 'selector.lua') diff --git a/selector.lua b/selector.lua index f7f3474..240716e 100644 --- a/selector.lua +++ b/selector.lua @@ -4,7 +4,8 @@ How to use `Selector` in `Menu` config file? selector:new(menu) :setPosition(x, y) - :setSpacing(42, 0) + :setMargin(8) + :setSize(32, 32) :set("list", require "nautslist") :set("sprite", love.graphics.newImage("assets/portraits.png")) :set("quads", require "portraits") @@ -16,8 +17,9 @@ Selector = { parent, x = 0, y = 0, - horizontal = 0, + width = 0, height = 0, + margin = 0, focused = false, global = false, list, @@ -46,12 +48,21 @@ function Selector:setPosition(x,y) return self end --- Spacing between positions of two blocks -function Selector:getSpacing() - return self.horizontal, self.vertical +-- Size of single block +function Selector:getSize() + return self.width, self.height end -function Selector:setSpacing(horizontal, vertical) - self.horizontal, self.vertical = horizontal, vertical +function Selector:setSize(width, height) + self.width, self.height = width, height + return self +end + +-- Spacing between two blocks +function Selector:getMargin() + return self.margin +end +function Selector:setMargin(margin) + self.margin = margin return self end @@ -169,10 +180,11 @@ end -- LÖVE2D callbacks function Selector:draw(scale) local x,y = self:getPosition() - local h,v = self:getSpacing() - x = #self.sets*h*0.5 + local margin = self:getMargin() + local width = self:getSize() + x = x - #self.selections*0.5*(margin+margin+width) for n=1,#self.selections do - self:drawBlock(n, x+h*n, y+v*n, scale) + self:drawBlock(n, x+(margin+width)*(n-1)+margin*n, y, scale) end end function Selector:update(dt) end -- cgit v1.1 From 78cf905ac5fa190dbd8a84678330a0479747c0e7 Mon Sep 17 00:00:00 2001 From: Aki Date: Wed, 24 Aug 2016 12:23:01 +0200 Subject: More universal drawing --- selector.lua | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) (limited to 'selector.lua') diff --git a/selector.lua b/selector.lua index 240716e..043a08b 100644 --- a/selector.lua +++ b/selector.lua @@ -154,17 +154,19 @@ function Selector:drawBlock(n, x, y, scale) local quad = self.quads[name] local arrowl = self.quads.arrow_left local arrowr = self.quads.arrow_right + local w,h = self:getSize() if not locked then love.graphics.draw(sprite, quad.normal, x*scale, y*scale, 0, scale, scale) if self.focused then - love.graphics.draw(sprite, arrowl, (x-2)* scale, (y+13)*scale, 0, scale, scale) - love.graphics.draw(sprite, arrowr, (x+30)*scale, (y+13)*scale, 0, scale, scale) + local dy = (h-6)/2 + love.graphics.draw(sprite, arrowl, (x+0-2)* scale, (y+dy)*scale, 0, scale, scale) + love.graphics.draw(sprite, arrowr, (x+w-2)*scale, (y+dy)*scale, 0, scale, scale) end else love.graphics.draw(sprite, quad.active, x*scale, y*scale, 0, scale, scale) end if self:getSelection(n) ~= 1 then - love.graphics.printf(string.upper(name), (x-8)*scale, (y+33)*scale, 48, "center", 0, scale, scale) + love.graphics.printf(string.upper(name), (x-w)*scale, (y+h+1)*scale, w*3, "center", 0, scale, scale) end end -- cgit v1.1 From 1213e1e2831805ebb5d193702e02c59c2927e54a Mon Sep 17 00:00:00 2001 From: Aki Date: Wed, 24 Aug 2016 13:29:13 +0200 Subject: Almost the same functionality --- selector.lua | 28 ++++++++++++++++++++++++++-- 1 file changed, 26 insertions(+), 2 deletions(-) (limited to 'selector.lua') diff --git a/selector.lua b/selector.lua index 043a08b..0b3fe8a 100644 --- a/selector.lua +++ b/selector.lua @@ -4,8 +4,8 @@ How to use `Selector` in `Menu` config file? selector:new(menu) :setPosition(x, y) - :setMargin(8) - :setSize(32, 32) + :setMargin(8) -- each block has marigin on both sides; they do stack + :setSize(32, 32) -- size of single graphics frame :set("list", require "nautslist") :set("sprite", love.graphics.newImage("assets/portraits.png")) :set("quads", require "portraits") @@ -142,6 +142,20 @@ function Selector:getListValue(i) return self.list[i] end +-- Get list of selections, checks if not locked are allowed. +function Selector:getFullSelection(allowed) + local allowed = allowed or false + local t = {} + for n,v in ipairs(self.selections) do + local name = self:getListValue(self:getSelection(n)) + local locked = self:isLocked(n) + if not (not locked and not allow) then + table.insert(t, {name, self.sets[n], self:isLocked(n)}) + end + end + return t +end + -- Draw single block of Selector function Selector:drawBlock(n, x, y, scale) local x, y = x or 0, y or 0 @@ -198,6 +212,16 @@ function Selector:controlpressed(set, action, key) local locked = self:isLocked(n) if action == "left" and not locked then self:previous(n) end if action == "right" and not locked then self:next(n) end + if action == "attack" then + if self:getSelection(n) ~= 1 then + self.locks[n] = true + end + end + if action == "jump" then + if locked then + self.locks[n] = false + end + end end end function Selector:controlreleased(set, action, key) end -- cgit v1.1 From 8b0698abc1290cbdbfef3c8b48a2dc7a0388c9d1 Mon Sep 17 00:00:00 2001 From: Aki Date: Wed, 24 Aug 2016 14:19:18 +0200 Subject: Blink button, fix empty error --- selector.lua | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) (limited to 'selector.lua') diff --git a/selector.lua b/selector.lua index 0b3fe8a..cba01e6 100644 --- a/selector.lua +++ b/selector.lua @@ -144,13 +144,14 @@ end -- Get list of selections, checks if not locked are allowed. function Selector:getFullSelection(allowed) - local allowed = allowed or false + local allowed = allowed + if allowed == nil then allowed = false end local t = {} - for n,v in ipairs(self.selections) do + for n,v in pairs(self.selections) do local name = self:getListValue(self:getSelection(n)) local locked = self:isLocked(n) - if not (not locked and not allow) then - table.insert(t, {name, self.sets[n], self:isLocked(n)}) + if locked or allowed then + table.insert(t, {name, self.sets[n]}) end end return t -- cgit v1.1 From 2abd5e31214a14f7e090fe81985ddf2aeac32112 Mon Sep 17 00:00:00 2001 From: Aki Date: Wed, 24 Aug 2016 18:33:12 +0200 Subject: Only unique nauts --- selector.lua | 25 +++++++++++++++++++++---- 1 file changed, 21 insertions(+), 4 deletions(-) (limited to 'selector.lua') diff --git a/selector.lua b/selector.lua index cba01e6..a0e19f8 100644 --- a/selector.lua +++ b/selector.lua @@ -142,6 +142,17 @@ function Selector:getListValue(i) return self.list[i] end +-- Checks if selection of given number is unique within Selector scope. +function Selector:isUnique(n) + local selection = self:getSelection(n) + for fn,v in pairs(self.selections) do + if fn ~= n and self:isLocked(fn) and v == selection then + return false + end + end + return true +end + -- Get list of selections, checks if not locked are allowed. function Selector:getFullSelection(allowed) local allowed = allowed @@ -159,10 +170,8 @@ end -- Draw single block of Selector function Selector:drawBlock(n, x, y, scale) - local x, y = x or 0, y or 0 if self.quads == nil or self.sprite == nil then return end - love.graphics.setFont(Font) - love.graphics.setColor(255, 255, 255, 255) + local x, y = x or 0, y or 0 local name = self:getListValue(self:getSelection(n)) local locked = self:isLocked(n) local sprite = self.sprite @@ -170,6 +179,12 @@ function Selector:drawBlock(n, x, y, scale) local arrowl = self.quads.arrow_left local arrowr = self.quads.arrow_right local w,h = self:getSize() + local unique = self:isUnique(n) + if unique then + love.graphics.setColor(255, 255, 255, 255) + else + love.graphics.setColor(140, 140, 140, 255) + end if not locked then love.graphics.draw(sprite, quad.normal, x*scale, y*scale, 0, scale, scale) if self.focused then @@ -181,6 +196,8 @@ function Selector:drawBlock(n, x, y, scale) love.graphics.draw(sprite, quad.active, x*scale, y*scale, 0, scale, scale) end if self:getSelection(n) ~= 1 then + love.graphics.setFont(Font) + love.graphics.setColor(255, 255, 255, 255) love.graphics.printf(string.upper(name), (x-w)*scale, (y+h+1)*scale, w*3, "center", 0, scale, scale) end end @@ -214,7 +231,7 @@ function Selector:controlpressed(set, action, key) if action == "left" and not locked then self:previous(n) end if action == "right" and not locked then self:next(n) end if action == "attack" then - if self:getSelection(n) ~= 1 then + if self:getSelection(n) ~= 1 and self:isUnique(n) then self.locks[n] = true end end -- cgit v1.1 From 65e2f701a6c0cfbf53506678771839f7f6d12cbf Mon Sep 17 00:00:00 2001 From: Aki Date: Wed, 24 Aug 2016 22:14:10 +0200 Subject: map selection --- selector.lua | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) (limited to 'selector.lua') diff --git a/selector.lua b/selector.lua index a0e19f8..f2d7b16 100644 --- a/selector.lua +++ b/selector.lua @@ -82,6 +82,7 @@ function Selector:init() end -- Initialize global Selector if self.global then + self.sets = {} self.locks = {false} self.selections = {1} -- Initialize Selector for Controllers @@ -162,7 +163,9 @@ function Selector:getFullSelection(allowed) local name = self:getListValue(self:getSelection(n)) local locked = self:isLocked(n) if locked or allowed then - table.insert(t, {name, self.sets[n]}) + local a = {name} + if self.sets[n] then table.insert(a, self.sets[n]) end + table.insert(t, a) end end return t -- 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 --- selector.lua | 39 +++++++++++++++++++++++++-------------- 1 file changed, 25 insertions(+), 14 deletions(-) (limited to 'selector.lua') diff --git a/selector.lua b/selector.lua index f2d7b16..a4f9c03 100644 --- a/selector.lua +++ b/selector.lua @@ -7,8 +7,8 @@ selector:new(menu) :setMargin(8) -- each block has marigin on both sides; they do stack :setSize(32, 32) -- size of single graphics frame :set("list", require "nautslist") - :set("sprite", love.graphics.newImage("assets/portraits.png")) - :set("quads", require "portraits") + :set("icons_i", love.graphics.newImage("assets/portraits.png")) + :set("icons_q", require "portraits") :set("global", false) -- true: single selector; false: selector for each controller set present :init() ]] @@ -22,12 +22,16 @@ Selector = { margin = 0, focused = false, global = false, + delay = 2, list, sets, locks, selections, + shape = "portrait", sprite, - quads + quads, + icons_i, + icons_q } -- Constructor @@ -36,6 +40,7 @@ function Selector:new(parent) setmetatable(o, self) self.__index = self o.parent = parent + o.sprite, o.quads = parent:getSheet() return o end @@ -178,9 +183,9 @@ function Selector:drawBlock(n, x, y, scale) local name = self:getListValue(self:getSelection(n)) local locked = self:isLocked(n) local sprite = self.sprite - local quad = self.quads[name] - local arrowl = self.quads.arrow_left - local arrowr = self.quads.arrow_right + local quad = self.quads + local icon = self.icons_i + local iconq = self.icons_q[name] local w,h = self:getSize() local unique = self:isUnique(n) if unique then @@ -189,14 +194,15 @@ function Selector:drawBlock(n, x, y, scale) love.graphics.setColor(140, 140, 140, 255) end if not locked then - love.graphics.draw(sprite, quad.normal, x*scale, y*scale, 0, scale, scale) - if self.focused then - local dy = (h-6)/2 - love.graphics.draw(sprite, arrowl, (x+0-2)* scale, (y+dy)*scale, 0, scale, scale) - love.graphics.draw(sprite, arrowr, (x+w-2)*scale, (y+dy)*scale, 0, scale, scale) - end + love.graphics.draw(sprite, quad[self.shape].normal, x*scale, y*scale, 0, scale, scale) else - love.graphics.draw(sprite, quad.active, x*scale, y*scale, 0, scale, scale) + love.graphics.draw(sprite, quad[self.shape].active, x*scale, y*scale, 0, scale, scale) + end + love.graphics.draw(icon, iconq, (x+2)*scale, (y+3)*scale, 0, scale, scale) + if self.focused and not locked then + local dy = (h-6)/2 + love.graphics.draw(sprite, quad.arrow_l, (x+0-2-math.floor(self.delay))* scale, (y+dy)*scale, 0, scale, scale) + love.graphics.draw(sprite, quad.arrow_r, (x+w-4+math.floor(self.delay))*scale, (y+dy)*scale, 0, scale, scale) end if self:getSelection(n) ~= 1 then love.graphics.setFont(Font) @@ -224,7 +230,12 @@ function Selector:draw(scale) self:drawBlock(n, x+(margin+width)*(n-1)+margin*n, y, scale) end end -function Selector:update(dt) end +function Selector:update(dt) + self.delay = self.delay + dt + if self.delay > Selector.delay then -- Selector.delay is initial + self.delay = self.delay - Selector.delay + end +end -- Controller callbacks function Selector:controlpressed(set, action, key) -- cgit v1.1 From ab82b9f8ee76ef8327765ed59639c3f3c65fce8f Mon Sep 17 00:00:00 2001 From: Aki Date: Fri, 26 Aug 2016 15:52:25 +0200 Subject: allow first --- selector.lua | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) (limited to 'selector.lua') diff --git a/selector.lua b/selector.lua index a4f9c03..f382bbb 100644 --- a/selector.lua +++ b/selector.lua @@ -23,6 +23,7 @@ Selector = { focused = false, global = false, delay = 2, + first = false, list, sets, locks, @@ -204,7 +205,7 @@ function Selector:drawBlock(n, x, y, scale) love.graphics.draw(sprite, quad.arrow_l, (x+0-2-math.floor(self.delay))* scale, (y+dy)*scale, 0, scale, scale) love.graphics.draw(sprite, quad.arrow_r, (x+w-4+math.floor(self.delay))*scale, (y+dy)*scale, 0, scale, scale) end - if self:getSelection(n) ~= 1 then + if (self:getSelection(n) ~= 1 or self.first) then love.graphics.setFont(Font) love.graphics.setColor(255, 255, 255, 255) love.graphics.printf(string.upper(name), (x-w)*scale, (y+h+1)*scale, w*3, "center", 0, scale, scale) @@ -245,7 +246,7 @@ function Selector:controlpressed(set, action, key) if action == "left" and not locked then self:previous(n) end if action == "right" and not locked then self:next(n) end if action == "attack" then - if self:getSelection(n) ~= 1 and self:isUnique(n) then + if (self:getSelection(n) ~= 1 or self.first) and self:isUnique(n) then self.locks[n] = true end end -- cgit v1.1 From 96b4407ae6410affd0db1e6d6d657d4f65d32235 Mon Sep 17 00:00:00 2001 From: Aki Date: Sun, 28 Aug 2016 20:41:48 +0200 Subject: No blinking; buttons enabled/disabled --- selector.lua | 2 ++ 1 file changed, 2 insertions(+) (limited to 'selector.lua') diff --git a/selector.lua b/selector.lua index f382bbb..75c0190 100644 --- a/selector.lua +++ b/selector.lua @@ -136,11 +136,13 @@ end -- Check if given number is locked function Selector:isLocked(n) + local n = n or 1 return self.locks[n] end -- Get value of selection of given number function Selector:getSelection(n) + local n = n or 1 return self.selections[n] end -- cgit v1.1 From 7a1facacf70c37d6ed2b17c2979744ef2fe8375e Mon Sep 17 00:00:00 2001 From: Aki Date: Sun, 28 Aug 2016 21:15:57 +0200 Subject: readability improved --- selector.lua | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) (limited to 'selector.lua') diff --git a/selector.lua b/selector.lua index 75c0190..de20699 100644 --- a/selector.lua +++ b/selector.lua @@ -202,10 +202,15 @@ function Selector:drawBlock(n, x, y, scale) love.graphics.draw(sprite, quad[self.shape].active, x*scale, y*scale, 0, scale, scale) end love.graphics.draw(icon, iconq, (x+2)*scale, (y+3)*scale, 0, scale, scale) - if self.focused and not locked then + if self.focused then local dy = (h-6)/2 - love.graphics.draw(sprite, quad.arrow_l, (x+0-2-math.floor(self.delay))* scale, (y+dy)*scale, 0, scale, scale) - love.graphics.draw(sprite, quad.arrow_r, (x+w-4+math.floor(self.delay))*scale, (y+dy)*scale, 0, scale, scale) + if not locked then + love.graphics.draw(sprite, quad.arrow_l, (x+0-2-math.floor(self.delay))* scale, (y+dy)*scale, 0, scale, scale) + love.graphics.draw(sprite, quad.arrow_r, (x+w-4+math.floor(self.delay))*scale, (y+dy)*scale, 0, scale, scale) + else + love.graphics.draw(sprite, quad.arrow_r, (x+0-2-math.floor(self.delay))* scale, (y+dy)*scale, 0, scale, scale) + love.graphics.draw(sprite, quad.arrow_l, (x+w-4+math.floor(self.delay))*scale, (y+dy)*scale, 0, scale, scale) + end end if (self:getSelection(n) ~= 1 or self.first) then love.graphics.setFont(Font) -- cgit v1.1