I need to randomly generate trees on a specific texture from a TileMap in a procedurally generated world.
You can do this using y sort, therefore you can learn the concept from this video
I use this Gaea godot. Is it possible to somehow do what I want using the tools built into this addon?
One possible solution of many would be to add a random chance for any grass tile to become a tree and then you can just add something like this pseudocode
if randf() < 0.25f: //twenty-five percent chance
setcell(tree)
else
setcell(grass)
How? And what node should I tie it to? Iβm new and donβt really understand
if you provide your code i can fix it for you
I use Godot Gaea. Unfortunately, I canβt post the link, but itβs on the Git Hub. And I use a noise generator
Unfortunately that is the drawback of not generating your own resources. It will be difficult to assist you with anything that your code is not directly responsible for.
Itβs a pity
This is the best i can do. attach this to your tilemap or tilemap layer depending on your version of godot and adjust the variables to match your tileset
extends TileMapLayer #You might need to extend TileMap instead if you are using an older version of Godot
var grass = Vector2i(0,0) #You would need to change these to whatver your atlas coordinate is
var tree = Vector2i(0,1) #You would need to change these to whatver your atlas coordinate is
func _ready() -> void:
var grass_tiles = get_used_cells_by_id(0,grass)
for tile in grass_tiles:
if randf() < 0.25: #You can change the 0.25 to any float between 0 and 1 to increase or decrease the chance of a grass tile becoming a tree
set_cell(tile,0,tree)
I have Godot 4 versions. What should be configured in variables depending on the version? And thank you very much for your time and help, I appreciate it
Godot 4.3 moves to TileMap Layers instead of Tilemaps so most likely you are still using tilemap so yours should start with βextends TileMapβ instead of βextends TileMapLayerβ. as for the variables without seeing your tileset its impossible to know how yours is configured but when you hover over the tile in the tileset it should give you a source id(usually 0) and an atlas coordinate. quite possibly yours is the first tile is Vector2(0,0) and the second one is Vector2(1,0) and add 1 to the x value for each subsequent tile in your tileset
As of your code, the middle parameter of set_cell is wrong, it will be set_cell(tile, Vector2i(x, y), tree)
nothing has changed, still the same error
Ahh i see now. You dont use a layer when using the new tilemap layers so i forgot to include that
set_cell(0,tile,0,tree)
There are no errors, but trees are not generated. Maybe I did something wrong or maybe I attached the script in the wrong place?
I would imagine it needs to run after the Gaea generation or else there wonβt be any tiles to get using get used cells by id