Discord Community
DARK THEME

# Mouse hovering

Is there anyway to track mouse hovering? I would like for objects within my game to "light up" when the mouse is over it.

Yep! You can use mouse.x and mouse.y to get the mouse position. Using this, you can have an if statement that toggles a variable like so:

``````if mouse.x >= -40 and mouse.x <= 70 and mouse.y >= -50 and mouse.y <= -30 then
hover = 1
else
hover = 0
end
``````

Now this works fine for if you want to detect a mouse hovering over a rectangle, but what about a circle? Well, that's a bit more tricky. I'll be using a custom-made distance function for this, just to make the code look a bit nicer. Here is the code for it:

``````dist = function(x, y, x2, y2)
return sqrt((x-x2)^2 + (y-y2)^2)
end
``````

Now to detect a circle, you need to find the distance from the center of the circle to the mouse position, and find out if it's less than the circle's radius. Basically, if the mouse is close to the middle of the circle this will activate.

``````if dist(10, 0, mouse.x, mouse.y) then
hover = 1
else
hover = 0
end
``````

(10,0 is just the center of the circle in my example, it can really be anything you want)

I'm not sure how to get triangles and other polygons though, sorry. Also, you * might * be able to use a 2d physics engine (you can enable them in settings) and use a collision function or something.

I made an example, if you want to play around with it: https://microstudio.dev/i/JmeJuniper/hoverexample/ (Just clone it :D)

With polygons you either need to be able to create a distance function for different shapes - this is a reference I like to use: https://iquilezles.org/www/articles/distfunctions2d/distfunctions2d.htm. You can then check if the distance between the mouse and the shapes is <0 to determine if the mouse is inside the object. You can create any 2d shape with lines and triangles, which should both be included in the above website.

Also, expanding on what JmeJuniper said, you can replicate the rectangle hover with a function like this:

``````checkmousehover = function(x,y,width,height)
local rx = abs(x-mouse.x) // get distance in xy dimensions between centre of rectangle and mouse
local ry = abs(y-mouse.y)
if rx < width/2 and ry < height/2 then // check if each distance is below the dimensions of the cube
return true
else
return false
end
end
``````

Then you can use it like this in the draw function for a 'lighting up rectangle':

``````draw = function()
screen.clear()
if checkmousehover(0,0,100,100) then
// mouse is hovering over rectangle
screen.fillRect(0,0,100,100,"rgb(0,255,0)")
else
// mouse is not hovering over rectangle
screen.fillRect(0,0,100,100,"rgb(255,0,0)")
end
end
``````