YoYoGames / GameMaker-Bugs

Public tracking for GameMaker bugs
26 stars 8 forks source link

Tile Data for Tile Collisions #5584

Open scrubware opened 7 months ago

scrubware commented 7 months ago

Is your feature request related to a problem?

Currently no way to access specific tile data for tiles in collisions. Collisions with tiles currently return the Tilemap Element ID, which is not useful for getting the approximate position of the collision.

Describe the solution you'd like

I'd like to be able to use the collision functions (collision_circle, collision_line, etc.) and get the positions of all tiles in the collisions, similar to how I can access positions of collided objects.

Describe alternatives you've considered

I've considered doing a brute force raycast in a circle (narrowing in on the point; for a collision_circle type collision) to try and get the position of the collisions but this could have a significant impact on performance and would not be able to find some collided tiles when using collision_circle_list in the event that those collided tiles are hidden behind others. This solution is also not practical for newer users who may want this functionality.

You could also spawn a collidable instance at every tile position but that's quite a bit of overhead creating and managing those instances for performance when Tile Data should just be returned for a collision.

Additional context

May be what is described in: https://github.com/YoYoGames/GameMaker-Bugs/issues/4199#event-129f961e-3dbf-5644-bba1-40468466575b

Additionally getting the position of all collisions returned by collision functions would be useful but I'm not certain that would be easy to implement.

stuckie commented 7 months ago

Just to clarify if this is a duplicate of #4199

scrubware commented 7 months ago

I'm just requesting some way to access Tile Data from regular collisions. I don't think that ticket specified returning the specific Tile Data of the collisions but if that would be the implementation then yes, that would be excellent.