new mode: manhattan
This commit is contained in:
parent
06daa49723
commit
db1780d12a
43
main.lua
43
main.lua
|
@ -147,6 +147,18 @@ function love.mousereleased(x,y, button)
|
||||||
elseif lines.current.pending.mode == 'line' then
|
elseif lines.current.pending.mode == 'line' then
|
||||||
local j = insert_point(lines.current.points, coord(x-16), coord(y-lines.current.y))
|
local j = insert_point(lines.current.points, coord(x-16), coord(y-lines.current.y))
|
||||||
lines.current.pending.p2 = j
|
lines.current.pending.p2 = j
|
||||||
|
elseif lines.current.pending.mode == 'manhattan' then
|
||||||
|
local p1 = lines.current.points[lines.current.pending.p1]
|
||||||
|
local mx,my = coord(x-16), coord(y-lines.current.y)
|
||||||
|
if math.abs(mx-p1.x) > math.abs(my-p1.y) then
|
||||||
|
local j = insert_point(lines.current.points, mx, p1.y)
|
||||||
|
lines.current.pending.p2 = j
|
||||||
|
else
|
||||||
|
local j = insert_point(lines.current.points, p1.x, my)
|
||||||
|
lines.current.pending.p2 = j
|
||||||
|
end
|
||||||
|
local p2 = lines.current.points[lines.current.pending.p2]
|
||||||
|
love.mouse.setPosition(16+pixels(p2.x), lines.current.y+pixels(p2.y))
|
||||||
end
|
end
|
||||||
table.insert(lines.current.shapes, lines.current.pending)
|
table.insert(lines.current.shapes, lines.current.pending)
|
||||||
lines.current.pending = {}
|
lines.current.pending = {}
|
||||||
|
@ -162,7 +174,7 @@ function propagate_to_drawings(x,y, button)
|
||||||
if y >= drawing.y and y < drawing.y + pixels(drawing.h) and x >= 16 and x < 16+drawingw then
|
if y >= drawing.y and y < drawing.y + pixels(drawing.h) and x >= 16 and x < 16+drawingw then
|
||||||
if current_mode == 'freehand' then
|
if current_mode == 'freehand' then
|
||||||
drawing.pending = {mode=current_mode, points={x=coord(x-16), y=coord(y-drawing.y)}}
|
drawing.pending = {mode=current_mode, points={x=coord(x-16), y=coord(y-drawing.y)}}
|
||||||
elseif current_mode == 'line' then
|
elseif current_mode == 'line' or current_mode == 'manhattan' then
|
||||||
local j = insert_point(drawing.points, coord(x-16), coord(y-drawing.y))
|
local j = insert_point(drawing.points, coord(x-16), coord(y-drawing.y))
|
||||||
drawing.pending = {mode=current_mode, p1=j}
|
drawing.pending = {mode=current_mode, p1=j}
|
||||||
end
|
end
|
||||||
|
@ -197,7 +209,7 @@ function draw_shape(left,top, drawing, shape)
|
||||||
end
|
end
|
||||||
prev = point
|
prev = point
|
||||||
end
|
end
|
||||||
elseif shape.mode == 'line' then
|
elseif shape.mode == 'line' or shape.mode == 'manhattan' then
|
||||||
local p1 = drawing.points[shape.p1]
|
local p1 = drawing.points[shape.p1]
|
||||||
local p2 = drawing.points[shape.p2]
|
local p2 = drawing.points[shape.p2]
|
||||||
love.graphics.line(pixels(p1.x)+left,pixels(p1.y)+top, pixels(p2.x)+left,pixels(p2.y)+top)
|
love.graphics.line(pixels(p1.x)+left,pixels(p1.y)+top, pixels(p2.x)+left,pixels(p2.y)+top)
|
||||||
|
@ -211,6 +223,14 @@ function draw_pending_shape(left,top, drawing)
|
||||||
elseif shape.mode == 'line' then
|
elseif shape.mode == 'line' then
|
||||||
local p1 = drawing.points[shape.p1]
|
local p1 = drawing.points[shape.p1]
|
||||||
love.graphics.line(pixels(p1.x)+left,pixels(p1.y)+top, love.mouse.getX(),love.mouse.getY())
|
love.graphics.line(pixels(p1.x)+left,pixels(p1.y)+top, love.mouse.getX(),love.mouse.getY())
|
||||||
|
elseif shape.mode == 'manhattan' then
|
||||||
|
local p1 = drawing.points[shape.p1]
|
||||||
|
local mx,my = coord(love.mouse.getX()-16), coord(love.mouse.getY()-drawing.y)
|
||||||
|
if math.abs(mx-p1.x) > math.abs(my-p1.y) then
|
||||||
|
love.graphics.line(pixels(p1.x)+left,pixels(p1.y)+top, pixels(mx)+left,pixels(p1.y)+top)
|
||||||
|
else
|
||||||
|
love.graphics.line(pixels(p1.x)+left,pixels(p1.y)+top, pixels(p1.x)+left,pixels(my)+top)
|
||||||
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -219,7 +239,10 @@ function on_shape(x,y, drawing, shape)
|
||||||
return on_freehand(x,y, drawing, shape)
|
return on_freehand(x,y, drawing, shape)
|
||||||
elseif shape.mode == 'line' then
|
elseif shape.mode == 'line' then
|
||||||
return on_line(x,y, drawing, shape)
|
return on_line(x,y, drawing, shape)
|
||||||
|
elseif shape.mode == 'manhattan' then
|
||||||
|
return x == drawing.points[shape.p1].x or y == drawing.points[shape.p1].y
|
||||||
else
|
else
|
||||||
|
print(shape.mode)
|
||||||
assert(false)
|
assert(false)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
@ -305,7 +328,12 @@ function keychord_pressed(chord)
|
||||||
if drawing then
|
if drawing then
|
||||||
convert_line(drawing, shape)
|
convert_line(drawing, shape)
|
||||||
end
|
end
|
||||||
|
elseif love.mouse.isDown('1') and chord == 'm' then
|
||||||
|
current_mode = 'manhattan'
|
||||||
|
local drawing = select_drawing_at_mouse()
|
||||||
|
drawing.pending.mode = 'manhattan'
|
||||||
elseif chord == 'C-m' then
|
elseif chord == 'C-m' then
|
||||||
|
current_mode = 'manhattan'
|
||||||
local drawing,i,shape = select_shape_at_mouse()
|
local drawing,i,shape = select_shape_at_mouse()
|
||||||
if drawing then
|
if drawing then
|
||||||
convert_horvert(drawing, shape)
|
convert_horvert(drawing, shape)
|
||||||
|
@ -358,6 +386,17 @@ function select_shape_at_mouse()
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
function select_drawing_at_mouse()
|
||||||
|
for _,drawing in ipairs(lines) do
|
||||||
|
if type(drawing) == 'table' then
|
||||||
|
local x, y = love.mouse.getX(), love.mouse.getY()
|
||||||
|
if y >= drawing.y and y < drawing.y + pixels(drawing.h) and x >= 16 and x < 16+drawingw then
|
||||||
|
return drawing
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
function convert_line(drawing, shape)
|
function convert_line(drawing, shape)
|
||||||
-- Perhaps we should do a more sophisticated "simple linear regression"
|
-- Perhaps we should do a more sophisticated "simple linear regression"
|
||||||
-- here:
|
-- here:
|
||||||
|
|
Loading…
Reference in New Issue