how does map collision work?
I've been meaning the practice more Lua with microstudio and I was curious on how map collisions work.
the code from the microstudio collisions library looks like this:
mapHit = function( x, y, map )
if map.type == "string" then map = maps[map] end
if not map then return 0 end
if not map.screen_position then return 0 end
local pos = map.screen_position
local mx = pos.x-pos.w/2
local my = pos.y-pos.h/2
local dx = floor((x-mx)/pos.wmap.width)
local dy = floor((y-my)/pos.hmap.height)
if dx >= 0 and dx < map.width and dy >= 0 and dy < map.height then
return map.get(dx,dy)
else
return 0
end
end
Can someone explain to me how this works? I wanna port it to Lua.
mapHit = function( x, y, map )
if map.type == "string" then map = maps[map] end
if not map then return 0 end
if not map.screen_position then return 0 end
local pos = map.screen_position
local mx = pos.x-pos.w/2
local my = pos.y-pos.h/2
local dx = floor((x-mx)/pos.w*map.width)
local dy = floor((y-my)/pos.h*map.height)
if dx >= 0 and dx < map.width and dy >= 0 and dy < map.height then
return map.get(dx,dy)
else
return 0
end
end
You call functions with the parameters of the x
and y
position you want to check and the name
of the ``MAP``` you created in the map editor.
If such a MAP
exists, a map object will be assigned to the map
variable.
MAP
has an internal 2-dimensional array.
The names of the tiles you added on the map are saved there.
Once you approximate x
and y
to the nearest integer, you can call the map.get()
function.
The map.get()
function returns the name of the tile in a given position (it retrieves this data from the internal table).
Empty space returns zero.
Thanks to this, you know that there is a tile in this place.
the map.screen_position variable keeps returning as undefined, do you know why that is?
Any query for a non-existent field in an object or for a non-existent variable will return 0 in the response.
the "Map" class does not have a method that converts the mouse position into coordinates on the map - so you get zero.
Use this library to convert screen coordinates to a local reference.
https://microstudio.dev/i/osterberg/screentools/
would it be fairly straightforward to port this to lua? or should I just stick to microscript for now