@tool
extends GridMap
class_name TerrainGen

signal map_changed()

@export var region: Rect2i = Rect2i(0,0,200,200):
	set(value):
		region = value
		generate()
@export var noise: Noise:
	set(value):
		noise = value
		generate()
@export var max_height: int = 10:
	set(value):
		max_height = value
		generate()

func _ready() -> void:
	generate()
	
func generate() -> void:
	clear()
	if noise == null:
		return
	for x in range(region.position.x, region.size.x):
		for y in range(region.position.y, region.size.y):
			var point: Vector2i = Vector2i(x,y)
			var noise_point: Vector2 = Vector2(point)
			
			var val: float = noise.get_noise_2d(noise_point.x, noise_point.y)
			var height: int = floori(((val + 1)/2.0) * max_height)
			
			var point_3d: Vector3i = Vector3i(point.x, height, point.y)
			set_cell_item(point_3d, 0)
	map_changed.emit()