38 lines
844 B
GDScript
38 lines
844 B
GDScript
@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()
|