Extracted mouse code to another file

This commit is contained in:
Alexey 2025-06-25 14:12:57 +03:00
commit 362a4e39ee
2 changed files with 77 additions and 61 deletions

View file

@ -1,6 +1,7 @@
require 'grid' require 'grid'
require 'point' require 'point'
require 'line' require 'line'
require 'mouse'
function love.load() function love.load()
love.graphics.setLineStyle( Config.lineStyle ) love.graphics.setLineStyle( Config.lineStyle )
@ -26,71 +27,12 @@ function love.load()
) )
GameGrid:push( line2 ) 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: move input interactions into module
-- TODO: fix collision with other line's endpoint -- TODO: fix collision with other line's endpoint
function love.update( dt ) function love.update( dt )
Mouse.x, Mouse.y = love.mouse.getPosition() Mouse:update()
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 end
function love.draw() function love.draw()

74
mouse.lua Normal file
View 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