local window = require("window") local room = require("room") local edge = require("edge") local button = require("button") local m = room:from{ code = 45100, key_size = 25, key_gap = 10, } local oldfrom = m.from function m:from(t) local kp = oldfrom(m, t) local ks = self.key_size local kg = self.key_gap local kd = ks + kg local kw = kd*3 - kg local kh = kd*5 - kg local sx = (320 - kw)/2 local sy = (240 - kh)/2 kp.number = 0 kp.keys = {} kp.padx = sx kp.pady = sy kp.indicator_width = kw for i = 1, 9 do local x = sx + kd * ((i-1)%3) local y = sy + kd * math.floor(1 + (i-1) / 3) kp.keys[i] = button.new(tostring(i), function () kp:input(i) end, x, y, ks, ks) end local br = sy + kd*4 kp.keys['C'] = button.new('C', function () kp:clear() end, sx, br, ks, ks) kp.keys[0] = button.new('0', function () kp:input(0) end, sx+kd, br, ks, ks) kp.keys['A'] = button.new('A', function () kp:accept() end, sx+kd*2, br, ks, ks) edge:set(m, "down", kp.room) return kp end function m:clear() self.number = 0 end function m:input(n) if self.number < 100000 then self.number = self.number * 10 + n end end function m:accept() if self.number == self.code then log:log("correct!") else log:log("it seeems that the number does not match.") end end m.draw = window.draw(function (self) love.graphics.setLineWidth(3) love.graphics.rectangle('line', self.padx, self.pady, self.indicator_width, self.key_size) love.graphics.printf(tostring(self.number), self.padx + 5, self.pady + 5, self.indicator_width - 8, 'right') for i, v in pairs(self.keys) do v:draw() end self.edges[1]:draw() end) m.mousepressed = function (self, x, y, button) local x, y = x - self.x, y - self.y for i, v in pairs(self.keys) do if v:mousepressed(x, y, button) then return end end return self.edges[1]:mousepressed(x, y, button) end return m