Extracted mouse code to another file
This commit is contained in:
parent
8a8db93ac1
commit
362a4e39ee
2 changed files with 77 additions and 61 deletions
64
main.lua
64
main.lua
|
@ -1,6 +1,7 @@
|
|||
require 'grid'
|
||||
require 'point'
|
||||
require 'line'
|
||||
require 'mouse'
|
||||
|
||||
function love.load()
|
||||
love.graphics.setLineStyle( Config.lineStyle )
|
||||
|
@ -26,71 +27,12 @@ function love.load()
|
|||
)
|
||||
GameGrid:push( line2 )
|
||||
|
||||
---@class Mouse
|
||||
---@field lastLine Line?
|
||||
---@field lastPoint Point?
|
||||
Mouse = {
|
||||
x = 0,
|
||||
y = 0,
|
||||
pressed = false,
|
||||
lastPressed = false,
|
||||
startX = -1,
|
||||
startY = -1,
|
||||
dragged = false,
|
||||
lastLine = nil,
|
||||
lastPoint = nil,
|
||||
point = Point:new( 0, 0 )
|
||||
}
|
||||
end
|
||||
end
|
||||
|
||||
-- TODO: move input interactions into module
|
||||
-- TODO: fix collision with other line's endpoint
|
||||
function love.update( dt )
|
||||
Mouse.x, Mouse.y = love.mouse.getPosition()
|
||||
Mouse.x = Mouse.x + 1
|
||||
Mouse.y = Mouse.y + 1
|
||||
Mouse.lastPoint = Mouse.point
|
||||
Mouse.lastPressed = Mouse.pressed
|
||||
Mouse.pressed = love.mouse.isDown( 1 )
|
||||
Mouse.point = GridPoint.snapCoords( Point:new( Mouse.x, Mouse.y ) )
|
||||
if Mouse.lastLine ~= nil then
|
||||
local pointsLen = #Mouse.lastLine.points
|
||||
local lastLinePoint = Mouse.lastLine.points[pointsLen]
|
||||
if Mouse.point:distanceTo( lastLinePoint ) == 1
|
||||
and GameGrid:inBounds( Mouse.point )
|
||||
and GameGrid:matchesLine( Mouse.point, true ) == nil
|
||||
and not lastLinePoint:equals( Mouse.lastLine.endpoint )
|
||||
and not GameGrid:isOtherEndpoint( Mouse.lastLine, Mouse.point ) then
|
||||
Mouse.lastLine:push( Mouse.point )
|
||||
elseif Mouse.lastLine:has( Mouse.point )
|
||||
and not Mouse.point:equals( lastLinePoint ) then
|
||||
while not Mouse.lastLine.points[#Mouse.lastLine.points]:equals( Mouse.point ) do
|
||||
Mouse.lastLine:pop()
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
Mouse.dragged = Mouse.pressed
|
||||
and Mouse.startX > 0
|
||||
and Point.distanceTo (
|
||||
Point:new( Mouse.x, Mouse.y ),
|
||||
Point:new( Mouse.startX, Mouse.startY )
|
||||
) > Config.dragSensivity
|
||||
|
||||
if not Mouse.pressed and Mouse.startX > 0 then
|
||||
Mouse.startX = -1
|
||||
Mouse.startY = -1
|
||||
Mouse.lastLine = nil
|
||||
end
|
||||
|
||||
if not Mouse.lastPressed
|
||||
and Mouse.pressed
|
||||
and Mouse.startX < 0 then
|
||||
Mouse.startX = Mouse.x
|
||||
Mouse.startY = Mouse.y
|
||||
Mouse.lastLine = GameGrid:matchesLine( Mouse.point, false )
|
||||
end
|
||||
Mouse:update()
|
||||
end
|
||||
|
||||
function love.draw()
|
||||
|
|
74
mouse.lua
Normal file
74
mouse.lua
Normal file
|
@ -0,0 +1,74 @@
|
|||
-- TODO: rewrite
|
||||
---@class Mouse
|
||||
---@field x integer
|
||||
---@field y integer
|
||||
---@field pressed boolean
|
||||
---@field lastPressed boolean
|
||||
---@field startX integer
|
||||
---@field startY integer
|
||||
---@field dragged boolean
|
||||
---@field lastLine Line?
|
||||
---@field lastPoint GridPoint?
|
||||
---@field point GridPoint
|
||||
Mouse = {
|
||||
x = 0,
|
||||
y = 0,
|
||||
pressed = false,
|
||||
lastPressed = false,
|
||||
startX = -1,
|
||||
startY = -1,
|
||||
dragged = false,
|
||||
lastLine = nil,
|
||||
lastPoint = nil,
|
||||
point = GridPoint:new( 0, 0 )
|
||||
}
|
||||
|
||||
-- TODO: fix collision with other line's endpoint
|
||||
function Mouse:update()
|
||||
Mouse.x, Mouse.y = love.mouse.getPosition()
|
||||
Mouse.x = Mouse.x + 1
|
||||
Mouse.y = Mouse.y + 1
|
||||
Mouse.lastPoint = Mouse.point
|
||||
Mouse.lastPressed = Mouse.pressed
|
||||
Mouse.pressed = love.mouse.isDown( 1 )
|
||||
Mouse.point = GridPoint.snapCoords( Point:new( Mouse.x, Mouse.y ) )
|
||||
if Mouse.lastLine ~= nil then
|
||||
local pointsLen = #Mouse.lastLine.points
|
||||
local lastLinePoint = Mouse.lastLine.points[pointsLen]
|
||||
if Mouse.point:distanceTo( lastLinePoint ) == 1
|
||||
and GameGrid:inBounds( Mouse.point )
|
||||
and GameGrid:matchesLine( Mouse.point, true ) == nil
|
||||
and not lastLinePoint:equals( Mouse.lastLine.endpoint )
|
||||
and not GameGrid:isOtherEndpoint( Mouse.lastLine, Mouse.point ) then
|
||||
Mouse.lastLine:push( Mouse.point )
|
||||
elseif Mouse.lastLine:has( Mouse.point )
|
||||
and not Mouse.point:equals( lastLinePoint ) then
|
||||
while not Mouse.lastLine.points[#Mouse.lastLine.points]:equals( Mouse.point ) do
|
||||
Mouse.lastLine:pop()
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
Mouse.dragged = Mouse.pressed
|
||||
and Mouse.startX > 0
|
||||
and Point.distanceTo (
|
||||
Point:new( Mouse.x, Mouse.y ),
|
||||
Point:new( Mouse.startX, Mouse.startY )
|
||||
) > Config.dragSensivity
|
||||
|
||||
if not Mouse.pressed and Mouse.startX > 0 then
|
||||
Mouse.startX = -1
|
||||
Mouse.startY = -1
|
||||
Mouse.lastLine = nil
|
||||
end
|
||||
|
||||
if not Mouse.lastPressed
|
||||
and Mouse.pressed
|
||||
and Mouse.startX < 0 then
|
||||
Mouse.startX = Mouse.x
|
||||
Mouse.startY = Mouse.y
|
||||
Mouse.lastLine = GameGrid:matchesLine( Mouse.point, false )
|
||||
end
|
||||
|
||||
end
|
Loading…
Add table
Add a link
Reference in a new issue