class_name World extends Node2D @export var resoure_quantity = 0.4 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,10,150,200,999] var atlas_regions = [Vector2i(0,1),Vector2i(0,0),Vector2i(2,0),Vector2i(0,2)] var world_data: Dictionary = {} @onready var world_grid: TileMap = $world_grid 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) -> bool: return resource_noise.get_noise_2d(x, y) > resoure_quantity 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(): terrain_noise.seed = randi() resource_noise.seed = randi() for x in range(-temp_size, temp_size): for y in range(-temp_size, temp_size): change_location_data(Vector2i(x,y), Constants.TilemapLayers.GROUND, atlas_regions[get_noise_region(x,y)]) if is_resource_tile(x,y): change_location_data(Vector2i(x,y), Constants.TilemapLayers.ENVIRONMENT, Vector2i(5,6)) 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)) func _process(delta): var mouse_pos = world_grid.local_to_map(get_local_mouse_position()) world_grid.clear_layer(Constants.TilemapLayers.CURSOR) world_grid.set_cell(Constants.TilemapLayers.CURSOR, mouse_pos,0,Vector2i(0,7)) func corrupt_location(loc: Vector2i): world_data[loc].change_layer(Constants.TilemapLayers.CORRUPTION, true) var corrupted_cells := world_data.values().filter(func(cell: CellData): return cell.is_corrupted()).map(func(cell: CellData) -> Vector2i: return cell._pos) world_grid.set_cells_terrain_connect(Constants.TilemapLayers.CORRUPTION, corrupted_cells, 0, 0) func grid_location(global_pos: Vector2) -> Vector2i: return world_grid.local_to_map(global_pos) func change_location_data(pos: Vector2i, layer: int, data: Vector2i) -> void: if not world_data.has(pos): world_data[pos] = CellData.new(pos) world_data[pos].change_layer(layer, data) world_grid.set_cell(layer, pos, 0, data)