diff options
Diffstat (limited to 'main.lua')
-rw-r--r-- | main.lua | 48 |
1 files changed, 21 insertions, 27 deletions
@@ -1,20 +1,17 @@ local class = require 'class' local hsluv = require 'hsluv' local catenary = require 'catenary' +local util = require 'util' +local texts = require 'texts' local tau = 2*math.pi local ZOOM = 200 local G = love.graphics -local function mouse_pos() - -- in world space - return G.inverseTransformPoint(love.mouse.getPosition()) -end - local function hovered(set) -- returns which of the things in set is hovered over -- or nil if no such thing - local mx,my = mouse_pos() + local mx,my = util.mouse_pos() for s in pairs(set) do if s:contains(mx,my) then return s @@ -23,20 +20,6 @@ local function hovered(set) return nil end -local function write_at(text,x,y) - local tx,ty = G.transformPoint(x,y) - G.push() - G.origin() - G.print(text,tx,ty) - G.pop() -end - -local function phi_color(n) - local phi = (1+math.sqrt(5))/2 - local h = (360*phi*n)%360 - return hsluv.hsluv_to_rgb({h, 80, 60}) -end - local Port = class() Port.R = 0.1 function Port.make(cls, x,y, num) @@ -52,10 +35,12 @@ function Port.draw(self, istate) c[1] = 1 elseif istate == 'selected' then c[2] = 1 + elseif istate == 'editing' then + c[3] = 1 end love.graphics.setColor(c) G.circle('line',self.x,self.y,self.R) - write_at(self.n, self.x, self.y) + util.write_at(self.n, self.x, self.y) end function Port.contains(self, px,py) local d = math.sqrt((self.x - px)^2 + (self.y - py)^2) @@ -109,7 +94,9 @@ end function PortGraph.istate_of_port(self,port) if self.state == 'joining' and self.selected == port then return 'selected' - elseif port:contains(mouse_pos()) then + elseif self.state == 'editing' and self.selected == port then + return 'editing' + elseif port:contains(util.mouse_pos()) then return 'hover' else return 'normal' @@ -130,8 +117,8 @@ function PortGraph.draw(self) if self.state == 'joining' then local p = self.selected - G.setColor(phi_color(self.wire_n)) - local mx,my = mouse_pos() + G.setColor(util.phi_color(self.wire_n)) + local mx,my = util.mouse_pos() G.line(catenary.catenary(p.x,p.y,mx,my)) end @@ -159,7 +146,6 @@ function PortGraph.make_edit_handles(self) color = w.color, here = p, there = q, - w = w, pg = self, },EditHandle) hs[h] = true @@ -237,7 +223,7 @@ function PortGraph.add_conn(self, p1,p2) assert(not self:connection(p1,p2), string.format("%s and %s already connected!", p1,p2)) - local wire = Wire:make(p1, p2, phi_color(self.wire_n)) + local wire = Wire:make(p1, p2, util.phi_color(self.wire_n)) self.wires[wire] = true p1.conns[p2] = wire p2.conns[p1] = wire @@ -259,7 +245,10 @@ for i = 1,n do end function love.mousepressed(x,y,b) - pg:click(b) + local ok, err = pcall(pg.click, pg, b) + if not ok then + texts.add(err,util.mouse_pos()) + end end function love.draw() @@ -273,5 +262,10 @@ function love.draw() pg:draw() + texts.draw() + end +function love.update(dt) + texts.update(dt) +end |