69 lines
2.4 KiB
GDScript
69 lines
2.4 KiB
GDScript
class_name World extends Node2D
|
|
|
|
@export var game_resources: Array[GameResource]
|
|
const PLAYER = preload("res://scene/player.tscn")
|
|
|
|
var terrain_noise := FastNoiseLite.new()
|
|
#var resource_noise: Noise = FastNoiseLite.new()
|
|
|
|
var temp_size = 150
|
|
var temp_noise_val = []
|
|
var temp_noise_reg = []
|
|
|
|
var noise_regions := [-999,0,999]
|
|
var atlas_regions := [Vector2i(0,1),Vector2i(0,0)]
|
|
|
|
@onready var world_grid: TileMap = $world_grid
|
|
@onready var resource_manager: Node2D = $ResourceManager
|
|
|
|
func get_noise_value(x: int, y: int):
|
|
return terrain_noise.get_noise_2d(x,y) * 500
|
|
|
|
#func is_resource_tile(x: int, y: int) -> GameResource:
|
|
#var dist = sqrt(x ^ 2 + y ^ 2)
|
|
#for res: GameResource in game_resources:
|
|
#var noise = resource_noise.get_noise_2d(x, y)
|
|
#if res.distance_probability(dist) > (noise + 1.0) / 2.0:
|
|
#return res
|
|
#return null
|
|
|
|
func get_noise_region(x,y):
|
|
var noise_val = get_noise_value(x,y)
|
|
for i in range(noise_regions.size()):
|
|
if noise_regions[i] <= noise_val and noise_val < noise_regions[i+1]:
|
|
return i
|
|
|
|
func _ready():
|
|
Grid.init(world_grid)
|
|
terrain_noise.seed = randi()
|
|
#resource_noise.seed = randi()
|
|
|
|
for x in range(-temp_size, temp_size):
|
|
for y in range(-temp_size, temp_size):
|
|
Grid.change_location_data(Vector2i(x,y), Constants.TilemapLayers.GROUND, atlas_regions[get_noise_region(x,y)])
|
|
#var tile_res := is_resource_tile(x,y)
|
|
#if tile_res:
|
|
#change_location_resource(Vector2i(x,y), tile_res)
|
|
#if not tile_res.gained_resource.is_connected(resource_manager._on_gained_resource):
|
|
#tile_res.gained_resource.connect(resource_manager._on_gained_resource)
|
|
temp_noise_val.append(get_noise_value(x,y))
|
|
temp_noise_reg.append(get_noise_region(x,y))
|
|
prints(temp_noise_val.min(), temp_noise_val.max())
|
|
for region in noise_regions.size():
|
|
prints(region, noise_regions[region], temp_noise_reg.count(region))
|
|
var player = PLAYER.instantiate()
|
|
add_child(player)
|
|
add_resources_to_map()
|
|
|
|
func corrupt_location(loc: Vector2i):
|
|
if Grid.corrupt_location(loc):
|
|
var corrupted_cells := Grid.get_corrupted_cells()
|
|
world_grid.set_cells_terrain_connect(Constants.TilemapLayers.CORRUPTION, corrupted_cells, 0, 0)
|
|
|
|
func add_resources_to_map() -> void:
|
|
for res: GameResource in game_resources:
|
|
res.gained_resource.connect(resource_manager._on_gained_resource)
|
|
var spawns = res.get_spawn_locations()
|
|
for spawn in spawns:
|
|
Grid.change_location_resource(spawn, res)
|