56 lines
1.9 KiB
GDScript
56 lines
1.9 KiB
GDScript
@tool
|
|
extends TileMapLayer
|
|
|
|
# ---------------------
|
|
# Definir les variables
|
|
# ---------------------
|
|
|
|
@export var Map : MapRessource # Non-natif, voir map_ressource.gd et map_ressource.tres
|
|
|
|
# Les boutons
|
|
@export_tool_button("Generate map") var generate_action = generate_map
|
|
|
|
|
|
func get_tile_mean(world_coords : Vector2i) -> float:
|
|
var height_mean := 0.0
|
|
for dx in range(tile_set.tile_size.x):
|
|
for dy in range(tile_set.tile_size.y):
|
|
height_mean += Map.NoiseTexture.noise.get_noise_2d(world_coords.x+dx, world_coords.y+dy)
|
|
|
|
#print(height_mean)
|
|
height_mean = height_mean / (tile_set.tile_size.x * tile_set.tile_size.y)
|
|
height_mean = (height_mean + 1) / 2
|
|
#print(height_mean)
|
|
return height_mean
|
|
|
|
func place_cell_from_height(coords : Vector2i, height : float) -> void:
|
|
if height < Map.DeepWater:
|
|
# Le 3 eme parametre de set_cell (atlas_coords) est un identificateur de la tile qu'on met
|
|
# 0, 0 et la tile en haut a gauche (coresspond a la tile bleu fonce de SpriteSheet.png)
|
|
set_cell(coords, 0, Vector2i(0, 0))
|
|
elif height < Map.Water:
|
|
set_cell(coords, 0, Vector2i(1, 0))
|
|
elif height < Map.Sand:
|
|
set_cell(coords, 0, Vector2i(2, 0))
|
|
elif height < Map.Grass:
|
|
set_cell(coords, 0, Vector2i(3, 0))
|
|
elif height < Map.Soil:
|
|
set_cell(coords, 0, Vector2i(4, 0))
|
|
elif height < Map.Mountain:
|
|
set_cell(coords, 0, Vector2i(5, 0))
|
|
elif height < Map.HighMountain:
|
|
set_cell(coords, 0, Vector2i(6, 0))
|
|
else:
|
|
set_cell(coords, 0, Vector2i(7, 0)) # Neige
|
|
|
|
|
|
func generate_map():
|
|
clear()
|
|
var nb_tile_x = Map.NoiseTexture.width / tile_set.tile_size.x
|
|
var nb_tile_y = Map.NoiseTexture.height / tile_set.tile_size.y
|
|
|
|
for tx in range(0, nb_tile_x):
|
|
for ty in range(0, nb_tile_y):
|
|
var world_coords = Vector2i(tx, ty) * tile_set.tile_size # Multiplication component par component
|
|
var tiles_coords = Vector2i(tx, ty)
|
|
place_cell_from_height(tiles_coords, get_tile_mean(world_coords))
|