From 8190d59e7bbac7835e9cecf5229247900b21f84a Mon Sep 17 00:00:00 2001 From: Aki Date: Thu, 6 Apr 2017 19:29:33 +0200 Subject: Added todos from Discord --- selector.lua | 1 + 1 file changed, 1 insertion(+) (limited to 'selector.lua') diff --git a/selector.lua b/selector.lua index 61401e7..03be918 100644 --- a/selector.lua +++ b/selector.lua @@ -275,6 +275,7 @@ function Selector:update(dt) end -- Controller callbacks +-- TODO: Add action to perform when key is pressed and selector is locked in e.g. to move into character selection from map selection. function Selector:controlpressed(set, action, key) if set and self.focused then local n = self:checkNumber(set) -- cgit v1.1 From 20770db3aba953585495d21bfe0a2e430485b038 Mon Sep 17 00:00:00 2001 From: Aki Date: Thu, 6 Apr 2017 23:03:50 +0200 Subject: First steps in cleaning-up menu. Selector, Button and Header extend Element now. --- selector.lua | 78 ++++++++++++++++++++++++------------------------------------ 1 file changed, 31 insertions(+), 47 deletions(-) (limited to 'selector.lua') diff --git a/selector.lua b/selector.lua index 03be918..1a449ed 100644 --- a/selector.lua +++ b/selector.lua @@ -1,4 +1,4 @@ --- `Selector` (Element) +--- `Selector` -- Used in Menu for selecting various things from list. Works for each Controller set or globally. --[[ How to use `Selector` in `Menu` config file? @@ -12,9 +12,8 @@ selector:new(menu) :set("global", false) -- true: single selector; false: selector for each controller set present :init() ]] - Selector = { - parent, + parent = --[[not.Menu]]nil, x = 0, y = 0, width = 0, @@ -35,53 +34,39 @@ Selector = { icons_q } +-- `Selector` is a child of `Element`. +require "element" +Selector.__index = Selector +setmetatable(Selector, Element) + -- Constructor -function Selector:new(parent) - local o = {} - setmetatable(o, self) - self.__index = self +function Selector:new (parent) + local o = setmetatable({}, self) o.parent = parent o.sprite, o.quads = parent:getSheet() return o end --- Position -function Selector:getPosition() - return self.x, self.y -end -function Selector:setPosition(x,y) - self.x, self.y = x, y - return self -end - -- Size of single block -function Selector:getSize() +function Selector:getSize () return self.width, self.height end -function Selector:setSize(width, height) +function Selector:setSize (width, height) self.width, self.height = width, height return self end -- Spacing between two blocks -function Selector:getMargin() +function Selector:getMargin () return self.margin end -function Selector:setMargin(margin) +function Selector:setMargin (margin) self.margin = margin return self end --- General setter for Menu configuration files -function Selector:set(name, func) - if type(name) == "string" and func ~= nil then - self[name] = func - end - return self -end - -- Initialize Selector with current settings. -function Selector:init() +function Selector:init () -- Make sure that there is list present if self.list == nil then self.list = {} @@ -105,17 +90,17 @@ function Selector:init() end -- Cycle through list on given number -function Selector:next(n) +function Selector:next (n) local current = self.selections[n] self:setSelection(n, current + 1) end -function Selector:previous(n) +function Selector:previous (n) local current = self.selections[n] self:setSelection(n, current - 1) end -- Get number associated with a given set -function Selector:checkNumber(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 @@ -123,13 +108,13 @@ function Selector:checkNumber(set) end -- Check if given number is locked -function Selector:isLocked(n) +function Selector:isLocked (n) local n = n or 1 return self.locks[n] end -- Sets value of selection of given number. Returns old. -function Selector:setSelection(n, new) +function Selector:setSelection (n, new) -- Functception. It sounds like fun but it isn't. local function limit(new, total) if new > total then @@ -147,18 +132,18 @@ function Selector:setSelection(n, new) end -- Get value of selection of given number -function Selector:getSelection(n) +function Selector:getSelection (n) local n = n or 1 return self.selections[n] end -- Get value from list by selection -function Selector:getListValue(i) +function Selector:getListValue (i) return self.list[i] end -- Checks if selection of given number is unique within Selector scope. -function Selector:isUnique(n) +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 @@ -169,7 +154,7 @@ function Selector:isUnique(n) end -- Get list of selections, checks if not locked are allowed. -function Selector:getFullSelection(allowed) +function Selector:getFullSelection (allowed) local allowed = allowed if allowed == nil then allowed = false end local t = {} @@ -186,7 +171,7 @@ function Selector:getFullSelection(allowed) end -- Rolls and returns random selection from list that is not locked. -function Selector:rollRandom(avoids) +function Selector:rollRandom (avoids) -- Me: You should make it simpler. -- Inner me: Nah, it works. Leave it. -- Me: Ok, let's leave it as it is. @@ -209,7 +194,7 @@ function Selector:rollRandom(avoids) end -- Draw single block of Selector -function Selector:drawBlock(n, x, y, scale) +function Selector:drawBlock (n, x, y, scale) if self.quads == nil or self.sprite == nil then return end local x, y = x or 0, y or 0 local name = self:getListValue(self:getSelection(n)) @@ -249,16 +234,16 @@ function Selector:drawBlock(n, x, y, scale) end -- Menu callbacks -function Selector:focus() -- Called when Element gains focus +function Selector:focus () -- Called when Element gains focus self.focused = true return true end -function Selector:blur() -- Called when Element loses focus +function Selector:blur () -- Called when Element loses focus self.focused = false end -- LÖVE2D callbacks -function Selector:draw(scale) +function Selector:draw (scale) local x,y = self:getPosition() local margin = self:getMargin() local width = self:getSize() @@ -267,7 +252,7 @@ function Selector:draw(scale) self:drawBlock(n, x+(margin+width)*(n-1)+margin*n, y, scale) end end -function Selector:update(dt) +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 @@ -276,7 +261,7 @@ end -- Controller callbacks -- TODO: Add action to perform when key is pressed and selector is locked in e.g. to move into character selection from map selection. -function Selector:controlpressed(set, action, key) +function Selector:controlpressed (set, action, key) if set and self.focused then local n = self:checkNumber(set) local locked = self:isLocked(n) @@ -301,6 +286,5 @@ function Selector:controlpressed(set, action, key) end end end -function Selector:controlreleased(set, action, key) end -return Selector \ No newline at end of file +return Selector -- cgit v1.1 From d1a19fea50aefc9d7fb52568a5bdcfb56d75eccf Mon Sep 17 00:00:00 2001 From: Aki Date: Fri, 7 Apr 2017 03:24:40 +0200 Subject: Moved menu elements to /not/ --- selector.lua | 290 ----------------------------------------------------------- 1 file changed, 290 deletions(-) delete mode 100644 selector.lua (limited to 'selector.lua') diff --git a/selector.lua b/selector.lua deleted file mode 100644 index 1a449ed..0000000 --- a/selector.lua +++ /dev/null @@ -1,290 +0,0 @@ ---- `Selector` --- 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) - :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("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() -]] -Selector = { - parent = --[[not.Menu]]nil, - x = 0, - y = 0, - width = 0, - height = 0, - margin = 0, - focused = false, - global = false, - delay = 2, - first = false, - list, - sets, - locks, - selections, - shape = "portrait", - sprite, - quads, - icons_i, - icons_q -} - --- `Selector` is a child of `Element`. -require "element" -Selector.__index = Selector -setmetatable(Selector, Element) - --- Constructor -function Selector:new (parent) - local o = setmetatable({}, self) - o.parent = parent - o.sprite, o.quads = parent:getSheet() - return o -end - --- Size of single block -function Selector:getSize () - return self.width, self.height -end -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 - --- 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.sets = {} - self.locks = {false} - self.selections = {1} - -- Initialize Selector for Controllers - else - self.sets = Controller.getSets() - self.locks = {} - self.selections = {} - 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) - local current = self.selections[n] - self:setSelection(n, current + 1) -end -function Selector:previous (n) - local current = self.selections[n] - self:setSelection(n, current - 1) -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) - local n = n or 1 - return self.locks[n] -end - --- Sets value of selection of given number. Returns old. -function Selector:setSelection (n, new) - -- Functception. It sounds like fun but it isn't. - local function limit(new, total) - if new > total then - return limit(new - total, total) - elseif new < 1 then - return limit(total + new, total) - else - return new - end - end - local n = n or 1 - local old = self.selections[n] - self.selections[n] = limit(new, #self.list) - return old -end - --- Get value of selection of given number -function Selector:getSelection (n) - local n = n or 1 - return self.selections[n] -end - --- Get value from list by selection -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 - if allowed == nil then allowed = false end - local t = {} - for n,v in pairs(self.selections) do - local name = self:getListValue(self:getSelection(n)) - local locked = self:isLocked(n) - if locked or allowed then - local a = {name} - if self.sets[n] then table.insert(a, self.sets[n]) end - table.insert(t, a) - end - end - return t -end - --- Rolls and returns random selection from list that is not locked. -function Selector:rollRandom (avoids) - -- Me: You should make it simpler. - -- Inner me: Nah, it works. Leave it. - -- Me: Ok, let's leave it as it is. - local avoids = avoids or {} - local total = #self.list - local random = love.math.random(1, total) - local eligible = true - for _,avoid in ipairs(avoids) do - if random == avoid then - eligible = false - break - end - end - if not eligible or self:isLocked(random) then - table.insert(avoids, random) - return self:rollRandom(avoid) - else - return random - end -end - --- Draw single block of Selector -function Selector:drawBlock (n, x, y, scale) - if self.quads == nil or self.sprite == nil then return end - 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 - 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 - 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[self.shape].normal, x*scale, y*scale, 0, scale, scale) - else - 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 then - local dy = (h-6)/2 - 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) - 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 - --- 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 (scale) - local x,y = self:getPosition() - 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+(margin+width)*(n-1)+margin*n, y, scale) - end -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 --- TODO: Add action to perform when key is pressed and selector is locked in e.g. to move into character selection from map selection. -function Selector:controlpressed (set, action, key) - 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 - if action == "attack" then - local name = self:getListValue(self:getSelection(n)) - if name == "random" then - self:setSelection(n, self:rollRandom({1,2})) -- avoid empty naut - self.locks[n] = true - else - -- If not empty or if first is allowed. Additionaly must be unique selection. - if (self:getSelection(n) ~= 1 or self.first) and self:isUnique(n) then - self.locks[n] = true - end - end - end - if action == "jump" then - if locked then - self.locks[n] = false - end - end - end -end - -return Selector -- cgit v1.1