godotengine / godot-proposals

Godot Improvement Proposals (GIPs)
MIT License
1.16k stars 97 forks source link

Add support for isometric grid snapping in the 2D editor #8944

Open 2fd5 opened 9 months ago

2fd5 commented 9 months ago

Describe the project you are working on

2D Isometric Fungi City builder - Mycelium Guardians

Describe the problem or limitation you are having in your project

I need to align some scenes on a level with TileMaps, but not using TileMaps. Grid snapping does not support isometric or hexagonal grids. I need to convert tilemap grid coordinates to pixels on the scene manually to place the scene in the center of desired tile. That is limiting using scene as a level editor.

Describe the feature / enhancement and how it helps to overcome the problem or limitation

Allow grid snap to have isometric and hexagonal options. They could be defined in same manner as we define TileSets.

When having TileMap selected, there is an "Toggle Grid Visibility". What I am asking in this proposal to have the same but accessible in editor so that Scenes can be placed with snapping to center of the tile.

There could be additional options to snap to corners of a tile grid.

Describe how your proposal will work, with code, pseudo-code, mock-ups, and/or diagrams

Some of the current grid presentation code from TileMap could be potentially reused for that.

If this enhancement will not be used often, can it be worked around with a few lines of script?

Maybe a plugin could achieve that. But that that goes into the core of scene editor. Alternatives are using special tilemap, placing placeholder tiles in the desired positions and then replacing them with corresponding scenes and spawning them with code at runtime.

Is there a reason why this should be core and not an add-on in the asset library?

Since TileMaps / TileSets do support Isometric and Hexagonal grids, having grid snapping in the scene editor only seems reasonable and part of full support of these.

2fd5 commented 9 months ago

Related issue https://github.com/godotengine/godot-proposals/issues/6280