From 37cd8a54ddd49aff9573cf9a5ae9d283eda1cd3c Mon Sep 17 00:00:00 2001 From: Zacharie Guet Date: Sun, 1 Mar 2026 18:24:46 +0100 Subject: [PATCH] =?UTF-8?q?refonte=20du=20syst=C3=A8me=20de=20chunk=20et?= =?UTF-8?q?=20correction=20de=20bug/traduction?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- common/game_data/scripts/run/run_data.gd | 22 +- common/game_info/game_info.gd | 1 + .../vfx/materials/shaders/chunk_mask.gdshader | 8 + .../materials/shaders/chunk_mask.gdshader.uid | 1 + entities/interactable_3d/phone/phone.tscn | 1 + .../player/inventory/scripts/items/seed.gd | 7 +- .../player/inventory/scripts/items/shovel.gd | 9 +- gui/pointer/scripts/pointer.gd | 2 +- .../ship_garage/assets/3d/ship_garage.blend | Bin 554775 -> 554839 bytes .../ship_garage/assets/3d/ship_garage.blend1 | Bin 555399 -> 554775 bytes .../ship_garage/scripts/ship_garage.gd | 5 +- stages/3d_scenes/ship_garage/ship_garage.tscn | 97 ++++++++- stages/terrain/region/scripts/chunk.gd | 194 +++++++++++------- stages/terrain/region/scripts/chunk_data.gd | 62 ------ .../terrain/region/scripts/chunk_data.gd.uid | 1 - stages/terrain/region/scripts/region.gd | 174 ++++++++-------- stages/terrain/region/scripts/region_data.gd | 69 ++++--- .../tile_map_layers/decontamination_layer.gd | 14 +- .../scripts/tile_map_layers/ground_layer.gd | 5 +- .../scripts/tile_map_layers/region_layer.gd | 51 ++--- .../scripts/tile_map_layers/rock_layer.gd | 45 +--- .../terrain/region/scripts/tiles_diff_data.gd | 46 +++++ .../region/scripts/tiles_diff_data.gd.uid | 1 + stages/terrain/region/test_chunk.tscn | 26 +++ translation/game/gui.csv | 4 +- 25 files changed, 470 insertions(+), 375 deletions(-) create mode 100644 common/vfx/materials/shaders/chunk_mask.gdshader create mode 100644 common/vfx/materials/shaders/chunk_mask.gdshader.uid delete mode 100644 stages/terrain/region/scripts/chunk_data.gd delete mode 100644 stages/terrain/region/scripts/chunk_data.gd.uid create mode 100644 stages/terrain/region/scripts/tiles_diff_data.gd create mode 100644 stages/terrain/region/scripts/tiles_diff_data.gd.uid create mode 100644 stages/terrain/region/test_chunk.tscn diff --git a/common/game_data/scripts/run/run_data.gd b/common/game_data/scripts/run/run_data.gd index 55ccc54..289afac 100644 --- a/common/game_data/scripts/run/run_data.gd +++ b/common/game_data/scripts/run/run_data.gd @@ -37,6 +37,7 @@ func generate_next_run_point(level = 0) -> RunPoint: region_parameter.level = level region_parameter.region_flags = get_region_flags(region_parameter) + return RunPoint.new( level, region_parameter @@ -72,24 +73,3 @@ func get_region_flags(region_parameter : RegionParameter) -> Array[String]: flags.append("borea") return flags - -class DifficultyModifier: - func modify(_region_parameter : RegionParameter): - pass - - func can_modifiy(_region_parameter : RegionParameter) -> bool: - return true - - func get_difficulty_cost() -> int: - return 1 - -class DifficultyIncreaseObjective extends DifficultyModifier: - func modify(region_parameter : RegionParameter): - region_parameter.objective += 1 - -class DifficultyDecreaseCharge extends DifficultyModifier: - func modify(region_parameter : RegionParameter): - region_parameter.charges -= 1 - - func can_modifiy(region_parameter : RegionParameter) -> bool: - return region_parameter.charges >= 3 diff --git a/common/game_info/game_info.gd b/common/game_info/game_info.gd index ec1cf3c..321bcb4 100644 --- a/common/game_info/game_info.gd +++ b/common/game_info/game_info.gd @@ -17,6 +17,7 @@ var settings_data : SettingsData func load_game_data() -> GameData: if ResourceLoader.exists(SAVE_GAME_LOCATION): game_loaded = true + game_data = ResourceLoader.load(SAVE_GAME_LOCATION).duplicate_deep() else : game_data = GameData.new() diff --git a/common/vfx/materials/shaders/chunk_mask.gdshader b/common/vfx/materials/shaders/chunk_mask.gdshader new file mode 100644 index 0000000..254b014 --- /dev/null +++ b/common/vfx/materials/shaders/chunk_mask.gdshader @@ -0,0 +1,8 @@ +shader_type canvas_item; + +uniform sampler2D screen_texture: hint_screen_texture; + +void fragment() { + + COLOR = texture(screen_texture, SCREEN_UV); +} \ No newline at end of file diff --git a/common/vfx/materials/shaders/chunk_mask.gdshader.uid b/common/vfx/materials/shaders/chunk_mask.gdshader.uid new file mode 100644 index 0000000..ea79994 --- /dev/null +++ b/common/vfx/materials/shaders/chunk_mask.gdshader.uid @@ -0,0 +1 @@ +uid://bc65ssv7bgy5d diff --git a/entities/interactable_3d/phone/phone.tscn b/entities/interactable_3d/phone/phone.tscn index b743206..0f9bcb4 100644 --- a/entities/interactable_3d/phone/phone.tscn +++ b/entities/interactable_3d/phone/phone.tscn @@ -59,6 +59,7 @@ shape = SubResource("CapsuleShape3D_mwti2") [node name="AudioStreamPlayer3D" type="AudioStreamPlayer3D" parent="." unique_id=73991663] stream = ExtResource("2_w00q2") +bus = &"Sfx" [node name="Model" parent="." unique_id=178278867 instance=ExtResource("3_lp5jo")] transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.000101934645, 0) diff --git a/entities/player/inventory/scripts/items/seed.gd b/entities/player/inventory/scripts/items/seed.gd index f9afa55..8d190aa 100644 --- a/entities/player/inventory/scripts/items/seed.gd +++ b/entities/player/inventory/scripts/items/seed.gd @@ -88,13 +88,8 @@ func can_use(player : Player, zone : Player.ActionZone) -> bool: for area in zone.get_affected_areas(): if area is Plant: is_there_a_plant_here = true - - var is_there_contamination_in_zone = false - for tile in zone.get_tiles(): - if not player.region.decontamination_layer.is_decontamined(tile): - is_there_contamination_in_zone = true - return not is_there_a_plant_here and not is_there_contamination_in_zone + return not is_there_a_plant_here and player.region.is_coords_decontaminated(zone.get_tiles()) func use(player : Player, zone : Player.ActionZone) -> bool: if player.region == null: diff --git a/entities/player/inventory/scripts/items/shovel.gd b/entities/player/inventory/scripts/items/shovel.gd index 37d693b..30c8d97 100644 --- a/entities/player/inventory/scripts/items/shovel.gd +++ b/entities/player/inventory/scripts/items/shovel.gd @@ -41,12 +41,9 @@ func use(player : Player, zone : Player.ActionZone) -> bool: await player.get_tree().create_timer(USE_INTERVAL).timeout var bodies = zone.area.get_overlapping_bodies() - var rock_layer_id = bodies.find_custom(func (b) : return b is RockLayer) - if rock_layer_id != -1: - var rock_layer : RockLayer = bodies[rock_layer_id] - - rock_layer.dig_rocks(zone.get_tiles()) - + var rock_layers = bodies.filter(func (b) : return b is RockLayer) + for rock_layer in rock_layers: + player.region.dig_rocks(zone.get_tiles()) var particles := (DIG_PARTICLES.instantiate() as DigParticleEmmitter) player.region.add_child(particles) diff --git a/gui/pointer/scripts/pointer.gd b/gui/pointer/scripts/pointer.gd index 91b55a0..402d9e0 100644 --- a/gui/pointer/scripts/pointer.gd +++ b/gui/pointer/scripts/pointer.gd @@ -165,7 +165,7 @@ func update_card(): func update_inspector(): - if player and not get_tree().paused: + if player and (get_tree() and not get_tree().paused): if can_interact and current_inspect and current_inspect is Interactable: %Action.visible = true %ActionText.text = current_inspect.interact_text() diff --git a/stages/3d_scenes/ship_garage/assets/3d/ship_garage.blend b/stages/3d_scenes/ship_garage/assets/3d/ship_garage.blend index fe21204afeda3922d622899b1671387b33316a97..b1138c4f6c8f6a1e88399d1bffaece0248100e3a 100644 GIT binary patch delta 90263 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 diff --git a/stages/3d_scenes/ship_garage/assets/3d/ship_garage.blend1 b/stages/3d_scenes/ship_garage/assets/3d/ship_garage.blend1 index 120fd4888b96998312e73d825c5b1821e39f1d88..fe21204afeda3922d622899b1671387b33316a97 100644 GIT binary patch delta 79766 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 delta 79914 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 vjikOeWz+ZCS*q>4`S1Qk6B=t%roJBv= GENERATION_NUMBER: - is_generated = true + generation_semaphore.wait() -func unload(): - for x in range(Region.CHUNK_TILE_SIZE): - for y in range(Region.CHUNK_TILE_SIZE): - var global_coord = Vector2i(x, y) + Region.CHUNK_TILE_SIZE * data.chunk_coord - region.rock_layer.erase_cell(global_coord) - region.ground_layer.erase_cell(global_coord) - region.decontamination_layer.erase_cell(global_coord) + generate_rocks(rock_layer) + generate_ground(ground_layer) + generate_decontamination(decontamination_layer) + + generation_semaphore.post() + + # clear_padding_cells(rock_layer) + + add_child.call_deferred(rock_layer) + add_child.call_deferred(ground_layer) + add_child.call_deferred(decontamination_layer) + + is_generated = true + +# func unload(): +# for x in range(Region.CHUNK_TILE_SIZE): +# for y in range(Region.CHUNK_TILE_SIZE): +# var global_coord = Vector2i(x, y) + Region.CHUNK_TILE_SIZE * chunk_coord +# region.rock_layer.erase_cell(global_coord) +# region.ground_layer.erase_cell(global_coord) +# region.decontamination_layer.erase_cell(global_coord) # Debug # func _draw(): @@ -94,8 +122,8 @@ func generate_noise( noise.fractal_type = FastNoiseLite.FRACTAL_NONE noise.fractal_weighted_strength = 1.0 noise.offset = Vector3( - noise_image_size.x * data.chunk_coord.x, - noise_image_size.y * data.chunk_coord.y, + noise_image_size.x * chunk_coord.x, + noise_image_size.y * chunk_coord.y, 1 ) @@ -108,62 +136,80 @@ func get_tile_value_from_noise(tile_position : Vector2i, noise : Noise) -> float ) return (val + 1)/2 -func generate_rocks(): +func generate_rocks(layer : RockLayer): var cristals : Array[Vector2i] = [] var rocks : Array[Vector2i] = [] - for x in range(Region.CHUNK_TILE_SIZE): - for y in range(Region.CHUNK_TILE_SIZE): + for x in range(0, Region.CHUNK_TILE_SIZE): + for y in range(0, Region.CHUNK_TILE_SIZE): var tile_type := get_generated_rock_type(Vector2i(x, y)) - var global_coord = Vector2i(x, y) + Region.CHUNK_TILE_SIZE * data.chunk_coord + var coord = Vector2i(x, y) if tile_type == RockLayer.TileType.CRISTAL: - cristals.append(global_coord) + cristals.append(coord) elif tile_type == RockLayer.TileType.ROCK: - rocks.append(global_coord) + rocks.append(coord) - region.rock_layer.place_rocks(cristals, RockLayer.TileType.CRISTAL, func(): finish_one_generation("rock")) - region.rock_layer.place_rocks(rocks, RockLayer.TileType.ROCK, func(): finish_one_generation("cristal")) + layer.place_rocks(cristals, RockLayer.TileType.CRISTAL) + layer.place_rocks(rocks, RockLayer.TileType.ROCK) func get_generated_rock_type(coord : Vector2i) -> RockLayer.TileType: - var tile_value : float = get_tile_value_from_noise(coord, rock_noise_image) - var saved_diff := data.get_rock_tile_diff(coord) + var rock_tile_value : float = get_tile_value_from_noise(coord, rock_noise_image) + var cristal_tile_value : float = get_tile_value_from_noise(coord, cristal_noise_image) + var saved_diff := region_data.rock_tiles_data.get_tile_diff_for_local_coord(coord, chunk_coord) - if ( - (saved_diff == ChunkData.TileDiff.PRESENT or tile_value < region.data.rock_threshold) - and saved_diff != ChunkData.TileDiff.ABSENT + if saved_diff == TilesDiffData.TileDiff.ABSENT: + return RockLayer.TileType.EMPTY + elif saved_diff == TilesDiffData.TileDiff.PRESENT: + return RockLayer.TileType.ROCK + elif ( + rock_tile_value < region_data.rock_threshold ): - return RockLayer.TileType.CRISTAL if tile_value < region.data.cristal_threshold else RockLayer.TileType.ROCK - return RockLayer.TileType.EMPTY + return RockLayer.TileType.CRISTAL if cristal_tile_value < region_data.cristal_threshold else RockLayer.TileType.ROCK + else : + return RockLayer.TileType.EMPTY -func generate_ground(): +func generate_ground(layer : GroundLayer): var coords : Array[Vector2i] = [] - for x in range(Region.CHUNK_TILE_SIZE): - for y in range(Region.CHUNK_TILE_SIZE): - coords.append(Vector2i(x,y) + Region.CHUNK_TILE_SIZE * data.chunk_coord) + for x in range(0, Region.CHUNK_TILE_SIZE): + for y in range(0,Region.CHUNK_TILE_SIZE): + coords.append(Vector2i(x,y)) - region.ground_layer.place_ground(coords, func(): finish_one_generation("ground")) + layer.place_ground(coords) -func generate_decontamination(): +func generate_decontamination(layer : DecontaminationLayer): var decontamination_tiles : Array[Vector2i] = [] - for x in range(Region.CHUNK_TILE_SIZE): - for y in range(Region.CHUNK_TILE_SIZE): + for x in range(0, Region.CHUNK_TILE_SIZE): + for y in range(0, Region.CHUNK_TILE_SIZE): var coord = Vector2i(x,y) var tile_value : float = ( - 1. if data.chunk_coord.distance_to(Vector2i.ZERO) > MAX_DECONTAMINATION_DISTANCE + 1. if chunk_coord.distance_to(Vector2i.ZERO) > MAX_DECONTAMINATION_DISTANCE else get_tile_value_from_noise(coord, decontamination_noise_image) ) - var saved_diff := data.get_decontamination_tile_diff(coord) + var saved_diff : TilesDiffData.TileDiff = region_data.decontamination_tiles_data.get_tile_diff_for_local_coord(coord, chunk_coord) if ( ( - saved_diff == ChunkData.TileDiff.PRESENT - or (tile_value < region.data.decontamination_threshold) + (tile_value < region_data.decontamination_threshold) + or saved_diff == TilesDiffData.TileDiff.PRESENT ) - and saved_diff != ChunkData.TileDiff.ABSENT + and saved_diff != TilesDiffData.TileDiff.ABSENT ): - decontamination_tiles.append(Vector2i(x,y) + Region.CHUNK_TILE_SIZE * data.chunk_coord) + decontamination_tiles.append(Vector2i(x,y)) - region.decontamination_layer.place_decontaminations( + layer.place_decontaminations( decontamination_tiles, false, - func(): - finish_one_generation("decontamination") ) + + +func clear_padding_cells(layer : RegionLayer): + var coords : Array[Vector2i] = [] + for x in [-1, Region.CHUNK_TILE_SIZE + 1]: + for y in range(-1, Region.CHUNK_TILE_SIZE + 1): + coords.append(Vector2i(x,y)) + + for y in [-1, Region.CHUNK_TILE_SIZE + 1]: + for x in range(0, Region.CHUNK_TILE_SIZE + 1): + coords.append(Vector2i(x,y)) + layer.set_cells_terrain_connect(coords, 0, -1) + +func _exit_tree(): + generation_thread.wait_to_finish() diff --git a/stages/terrain/region/scripts/chunk_data.gd b/stages/terrain/region/scripts/chunk_data.gd deleted file mode 100644 index 4041bc0..0000000 --- a/stages/terrain/region/scripts/chunk_data.gd +++ /dev/null @@ -1,62 +0,0 @@ -extends Resource -class_name ChunkData - -enum TileDiff { NO_DIFF,PRESENT,ABSENT } - -@export var chunk_coord : Vector2i -@export var rock_tiles_diff : Dictionary[String, TileDiff] -@export var decontamination_tiles_diff : Dictionary[String, TileDiff] - -func _init( - _chunk_coord : Vector2i = Vector2i.ZERO -): - chunk_coord = _chunk_coord - -#region ------------------ Generic Tile ------------------ - -func get_coord_key(coord : Vector2i) -> String: - return "%d:%d" % [coord.x, coord.y] - -func get_tile_diff( - coord : Vector2i, - tiles_diff : Dictionary[String, TileDiff] -) -> TileDiff: - if not has_diff(coord, tiles_diff): - return TileDiff.NO_DIFF - return tiles_diff[get_coord_key(coord)] - -func update_tile_diff( - coord : Vector2i, - diff : TileDiff, - tiles_diff : Dictionary[String, TileDiff] -): - tiles_diff[get_coord_key(coord)] = diff - -func has_diff( - coord : Vector2i, - tiles_diff : Dictionary[String, TileDiff] -): - return tiles_diff.has(get_coord_key(coord)) - -#region ------------------ Rock ------------------ - -func get_rock_tile_diff(coord : Vector2i) -> TileDiff: - return get_tile_diff(coord, rock_tiles_diff) - -func update_rock_tile_diff(coord : Vector2i, diff : TileDiff): - update_tile_diff(coord, diff, rock_tiles_diff) - -func has_rock_tile_diff(coord : Vector2i): - return has_diff(coord, rock_tiles_diff) - - -#region ------------------ Decontamination ------------------ - -func get_decontamination_tile_diff(coord : Vector2i) -> TileDiff: - return get_tile_diff(coord, decontamination_tiles_diff) - -func update_decontamination_tile_diff(coord : Vector2i, diff : TileDiff): - update_tile_diff(coord, diff, decontamination_tiles_diff) - -func has_decontamination_tile_diff(coord : Vector2i): - return has_diff(coord, decontamination_tiles_diff) \ No newline at end of file diff --git a/stages/terrain/region/scripts/chunk_data.gd.uid b/stages/terrain/region/scripts/chunk_data.gd.uid deleted file mode 100644 index 1367907..0000000 --- a/stages/terrain/region/scripts/chunk_data.gd.uid +++ /dev/null @@ -1 +0,0 @@ -uid://clqa88okc325t diff --git a/stages/terrain/region/scripts/region.gd b/stages/terrain/region/scripts/region.gd index 4f744fc..27b12d4 100644 --- a/stages/terrain/region/scripts/region.gd +++ b/stages/terrain/region/scripts/region.gd @@ -8,8 +8,6 @@ const TUTORIAL_SCENE : PackedScene = preload("res://gui/game/tutorial/tutorial.t const TILE_SET : TileSet = preload("res://stages/terrain/region/resources/moss_biome.tres") const TILE_SCALE = 1 const TILE_SIZE : int = roundi(TILE_SET.tile_size.x * TILE_SCALE) -const START_ROCK_HOLE_RADIUS = 5 -const PLAYER_ROCK_HOLE_RADIUS = 5 const SPAWN_OBJECT_RANDOM_MOVEMENT = 200 const CHUNK_TILE_SIZE : int = 20 @@ -17,6 +15,8 @@ const CHUNK_SIZE = CHUNK_TILE_SIZE * TILE_SIZE const CHUNK_LOAD_DISTANCE : int = 1 const CHUNK_UNLOAD_DISTANCE : int = 2 +const MAX_GENERATION_THREAD = 1 # Crash when superior to 1 + @export var first_loot_number : int = 3 @export var loot_item_number : Array[int] = [1,2] @@ -28,23 +28,20 @@ var data : RegionData var in_passing_day_animation = false var contamination_texture : ImageTexture -var rock_layer : RockLayer -var ground_layer : GroundLayer -var decontamination_layer : DecontaminationLayer + +var creating_new_layer_pack = false var score_by_plant : Dictionary[PlantData, int] = {} -var tile_set = Region.TILE_SET - -var generated_chunks : Dictionary[String,Chunk] = {} -var generation_semaphore: Semaphore +var generated_chunks : Array[Chunk] = [] +var generation_semaphore : Semaphore # Cheat Code func _input(_e): if ( Input.is_action_pressed("drop") and Input.is_action_pressed("move_right") - and Input.is_action_pressed("move_left") + and Input.is_action_pressed("move_left") and Input.is_action_just_pressed("action") ): %Tutorial.finish_tutorial() @@ -55,7 +52,7 @@ func _input(_e): if ( Input.is_action_pressed("drop") and Input.is_action_pressed("move_right") - and Input.is_action_pressed("move_left") + and Input.is_action_pressed("move_left") and Input.is_action_just_pressed("move_pointer") ): data.charges = 0 @@ -66,7 +63,7 @@ func _init(): func _ready(): generation_semaphore = Semaphore.new() - generation_semaphore.post() + generation_semaphore.post(MAX_GENERATION_THREAD) entity_container.position = TILE_SIZE * CHUNK_TILE_SIZE * Vector2.ONE / 2 load_entities(data.entities_saved_data) @@ -75,16 +72,6 @@ func _ready(): if e is Plant: data.add_plant_data(e.data, false) - ground_layer = GroundLayer.new(self) - ground_layer.name = "GroundLayer" - add_child(ground_layer) - rock_layer = RockLayer.new(self) - rock_layer.name = "RockLayer" - add_child(rock_layer) - decontamination_layer = DecontaminationLayer.new(self) - decontamination_layer.name = "DecontaminationLayer" - add_child(decontamination_layer) - %AstraDoor.global_position = data.player_spawn player.global_position = data.player_position @@ -92,8 +79,6 @@ func _ready(): generate_near_chunks(player) - edit_map_origin() - spawn_object_random_move(%RechargeStation) %RechargeStation.update() spawn_object_random_move(%BoreaDoor) @@ -108,94 +93,60 @@ func _process(_d): func get_chunk_key(coord) -> String: return "%d:%d" % [coord.x, coord.y] - -func generate_near_chunks(p : Player): + +func generate_near_chunks(p : Player) -> bool: + var new_chunk_created = false var player_chunk_coord = Math.get_chunk_from_pos(p.global_position) for x in range(-CHUNK_LOAD_DISTANCE, CHUNK_LOAD_DISTANCE+1): for y in range(-CHUNK_LOAD_DISTANCE, CHUNK_LOAD_DISTANCE+1): var coord : Vector2i = Vector2i(x,y) + player_chunk_coord - if not generated_chunks.has(get_chunk_key(coord)): + if (not is_chunk_generated(coord)): generate_chunk(coord) + new_chunk_created = true + + return new_chunk_created -func remove_far_chunks(p : Player): +func remove_far_chunks(p : Player) -> bool: + var chunk_deleted = false var player_chunk_coord = Vector2i( floor(p.global_position.x / (CHUNK_TILE_SIZE * TILE_SIZE)), floor(p.global_position.y / (CHUNK_TILE_SIZE * TILE_SIZE)) ) - for chunk in generated_chunks.values(): - var chunk_coord = chunk.data.chunk_coord + for chunk in generated_chunks: + var chunk_coord = chunk.chunk_coord if player_chunk_coord.distance_to(chunk_coord) > CHUNK_UNLOAD_DISTANCE: remove_chunk(chunk) + chunk_deleted = true + return chunk_deleted func generate_chunk(coord : Vector2i): - var chunk_data := data.get_or_create_chunk_data(coord) - - var chunk_key = get_chunk_key(coord) - if not generated_chunks.has(chunk_key): + if not is_chunk_generated(coord): var new_chunk = Chunk.new( - chunk_data, - self + coord, + data, + generation_semaphore ) - generated_chunks[chunk_key] = new_chunk add_child(new_chunk) - data.generated_chunk_entities.append(coord) - new_chunk.generate() - -func edit_map_origin(): - # Dig a hole in map origin - var chunk_center = Vector2i.ONE * floori(CHUNK_TILE_SIZE/2.) - var hole_tiles : Array[Vector2i] = [] - var decontamination_tiles : Array[Vector2i] = [] - for x in range(CHUNK_TILE_SIZE): - for y in range(CHUNK_TILE_SIZE): - var coord = Vector2i(x,y) - if coord.distance_to(chunk_center) < START_ROCK_HOLE_RADIUS: - hole_tiles.append(coord) - if coord.distance_to(chunk_center) < data.start_decontamination_hole_radius: - decontamination_tiles.append(coord) - - rock_layer.remove_rocks(hole_tiles, true) - decontamination_layer.place_decontaminations(decontamination_tiles, true) - - # Dig a hole in player spawn - var player_hole_tiles : Array[Vector2i] = [] - var player_tile_position := Vector2i( - roundi(data.player_spawn.x/float(TILE_SIZE)), - roundi(data.player_spawn.y/float(TILE_SIZE)) - ) - for x in range(-PLAYER_ROCK_HOLE_RADIUS, PLAYER_ROCK_HOLE_RADIUS): - for y in range(-PLAYER_ROCK_HOLE_RADIUS, PLAYER_ROCK_HOLE_RADIUS): - var coord = Vector2i(x,y) - if coord.distance_to(Vector2.ZERO) < PLAYER_ROCK_HOLE_RADIUS: - player_hole_tiles.append(coord + player_tile_position) - rock_layer.remove_rocks(player_hole_tiles, true) + generated_chunks.append(new_chunk) func remove_chunk(chunk : Chunk): - generated_chunks.erase(get_chunk_key(chunk.data.chunk_coord)) - chunk.unload() + generated_chunks.erase(chunk) chunk.queue_free() func check_is_generated() -> bool: - if len(generated_chunks.keys()) == 0: - return false - return get_chunk_generation_count() == float(get_full_chunk_generation_count()) + var ret = true + for c in generated_chunks: + if not c.is_generated: + ret = false + return ret -func get_generated_value(): - return get_chunk_generation_count() / float(get_full_chunk_generation_count()) - -func get_full_chunk_generation_count() -> int: - return len(generated_chunks.keys()) * Chunk.GENERATION_NUMBER - -func get_chunk_generation_count() -> int: - var generation_count = 0 - - for key in generated_chunks.keys(): - generation_count += len(generated_chunks[key].generation_finished) - - return generation_count +func get_generated_value() -> float: + # if layer_pack: + # return layer_pack.generated_value + return 1. func save(): data.entities_saved_data = save_entities() @@ -232,6 +183,10 @@ func setup_flagged_properties(): %BoreaDoor.visible = true %RechargeStation.visible = false +func is_chunk_generated(coord : Vector2i): + return generated_chunks.find_custom( + func (c: Chunk) : return get_chunk_key(c.chunk_coord) == get_chunk_key(coord) + ) != -1 #endregion #region ------------------ Usage ------------------ @@ -269,4 +224,51 @@ func pass_day(): data.end_pass_day() save() + +func get_chunk_for_coord(tiles_coord : Vector2i) -> Chunk: + var chunk_coord = Vector2i( + floori(float(tiles_coord.x)/Region.CHUNK_TILE_SIZE), + floori(float(tiles_coord.y)/Region.CHUNK_TILE_SIZE), + ) + + var id = generated_chunks.find_custom( + func (c: Chunk): return c.chunk_coord.x == chunk_coord.x and c.chunk_coord.y == chunk_coord.y + ) + + if id == -1 or not generated_chunks[id].is_generated: + return null + return generated_chunks[id] + +func is_coords_decontaminated(tiles_coords : Array[Vector2i]): + for coord in tiles_coords: + var chunk : Chunk = get_chunk_for_coord(coord) + if chunk: + var local_coord := TilesDiffData.get_local_coord(coord, chunk.chunk_coord) + if not chunk.decontamination_layer.is_decontamined(local_coord): + return false + return true + + +func dig_rocks(tiles_coords : Array[Vector2i], save_tiles_diff := true, loot := true): + if save_tiles_diff : + data.rock_tiles_data.update_tiles_diff(tiles_coords, TilesDiffData.TileDiff.ABSENT) + + for coord in tiles_coords: + var chunk : Chunk = get_chunk_for_coord(coord) + if chunk: + var local_coord := TilesDiffData.get_local_coord(coord, chunk.chunk_coord) + + if loot and chunk.rock_layer.get_tile_type(local_coord) == RockLayer.TileType.CRISTAL: + loot_talion(coord) + + chunk.rock_layer.remove_rocks([local_coord]) + +func loot_talion(coord : Vector2i): + var new_seed = Seed.generate_random() + drop_item( + new_seed, + coord * TILE_SIZE, + 10 + ) + #endregion diff --git a/stages/terrain/region/scripts/region_data.gd b/stages/terrain/region/scripts/region_data.gd index 00a7bdc..1a62f5d 100644 --- a/stages/terrain/region/scripts/region_data.gd +++ b/stages/terrain/region/scripts/region_data.gd @@ -14,6 +14,8 @@ signal pass_day_ended(region_data : RegionData) const DEFAULT_START_CHARGE := 10 const DEFAULT_OBJECTIVE := 10 const MAX_RANDOM_SPAWN_DISTANCE = 3000 +const START_ROCK_HOLE_RADIUS = 5 +const PLAYER_ROCK_HOLE_RADIUS = 5 @export var region_seed : int @export var region_name : String @@ -26,14 +28,11 @@ const MAX_RANDOM_SPAWN_DISTANCE = 3000 @export var day : int = 1 @export var entities_saved_data : Array[EntityData] = [] -@export var generated_chunk_entities : Array[Vector2i] @export var flags : Array[String] = [] @export var plants : Array[PlantData] @export var state : State = State.IN_PROGRESS -@export var chunks_data : Dictionary[String, ChunkData] - @export var player_position : Vector2 @export var player_spawn : Vector2 @@ -47,6 +46,8 @@ const MAX_RANDOM_SPAWN_DISTANCE = 3000 objective = v update() +@export var rock_tiles_data : TilesDiffData +@export var decontamination_tiles_data : TilesDiffData var in_passing_day_animation := false @@ -67,6 +68,11 @@ func _init( player_spawn = get_random_spawn_position() player_position = player_spawn + rock_tiles_data = TilesDiffData.new() + decontamination_tiles_data = TilesDiffData.new() + + edit_map_origin() + func update(): if objective > 0 and get_score() >= objective and not "tutorial" in flags: if state != State.SUCCEEDED: @@ -78,30 +84,6 @@ func update(): state = State.FAILED updated.emit(self) -#region ------------------ Chunks ------------------ - -func get_coord_id(coord): - return "%d:%d" % [coord.x, coord.y] - -func has_chunk_data(coord : Vector2i) -> bool: - return chunks_data.has(get_coord_id(coord)) - -func add_chunk_data(coord : Vector2i, data : ChunkData): - chunks_data[get_coord_id(coord)] = data - -func get_chunk_data(coord : Vector2i) -> ChunkData: - if get_coord_id(coord) in chunks_data: - return chunks_data[get_coord_id(coord)] - return null - -func get_or_create_chunk_data(coord : Vector2i) -> ChunkData: - if has_chunk_data(coord): - return get_chunk_data(coord) - else: - var new_chunk_data = ChunkData.new(coord) - add_chunk_data(coord, new_chunk_data) - return new_chunk_data - #endregion #region ------------------ Score ------------------ @@ -159,3 +141,36 @@ func get_random_spawn_position(): return rand_pos #endregion + +#region ------------------ Tiles ------------------ + +func edit_map_origin(): + # Dig a hole in map origin + var chunk_center = Vector2i.ONE * floori(Region.CHUNK_TILE_SIZE/2.) + var hole_tiles : Array[Vector2i] = [] + var decontamination_tiles : Array[Vector2i] = [] + for x in range(Region.CHUNK_TILE_SIZE): + for y in range(Region.CHUNK_TILE_SIZE): + var coord = Vector2i(x,y) + if coord.distance_to(chunk_center) < START_ROCK_HOLE_RADIUS: + hole_tiles.append(coord) + if coord.distance_to(chunk_center) < start_decontamination_hole_radius: + decontamination_tiles.append(coord) + + rock_tiles_data.update_tiles_diff(hole_tiles, TilesDiffData.TileDiff.ABSENT) + + # Dig a hole in player spawn + var player_hole_tiles : Array[Vector2i] = [] + var player_tile_position := Vector2i( + roundi(player_spawn.x/float(Region.TILE_SIZE)), + roundi(player_spawn.y/float(Region.TILE_SIZE)) + ) + for x in range(-PLAYER_ROCK_HOLE_RADIUS, PLAYER_ROCK_HOLE_RADIUS): + for y in range(-PLAYER_ROCK_HOLE_RADIUS, PLAYER_ROCK_HOLE_RADIUS): + var coord = Vector2i(x,y) + if coord.distance_to(Vector2.ZERO) < PLAYER_ROCK_HOLE_RADIUS: + player_hole_tiles.append(coord + player_tile_position) + + rock_tiles_data.update_tiles_diff(player_hole_tiles, TilesDiffData.TileDiff.ABSENT) + +#endregion \ No newline at end of file diff --git a/stages/terrain/region/scripts/tile_map_layers/decontamination_layer.gd b/stages/terrain/region/scripts/tile_map_layers/decontamination_layer.gd index 2bff6bd..26b91a2 100644 --- a/stages/terrain/region/scripts/tile_map_layers/decontamination_layer.gd +++ b/stages/terrain/region/scripts/tile_map_layers/decontamination_layer.gd @@ -11,22 +11,12 @@ func setup(): func place_decontamination(coord : Vector2i, save = false): place_decontaminations([coord], save) -func place_decontaminations(coords : Array[Vector2i], save := false, on_finished : Callable = (func(): pass)): - async_place_terrain_cells( +func place_decontaminations(coords : Array[Vector2i], save := false): + place_terrain_cells( coords, DECONTAMINATION_TILE_TERRAIN_SET, DECONTAMINATION_TILE_TERRAIN, - on_finished ) - if save: - for coord in coords: - var chunk_coord = Vector2i( - floori(coord.x / float(Region.CHUNK_TILE_SIZE)), - floori(coord.y / float(Region.CHUNK_TILE_SIZE)), - ) - (region.data - .get_or_create_chunk_data(chunk_coord) - .update_decontamination_tile_diff(coord, ChunkData.TileDiff.PRESENT)) func is_decontamined(coord : Vector2i) -> bool: return has_cell(coord) diff --git a/stages/terrain/region/scripts/tile_map_layers/ground_layer.gd b/stages/terrain/region/scripts/tile_map_layers/ground_layer.gd index ff65103..6257a1d 100644 --- a/stages/terrain/region/scripts/tile_map_layers/ground_layer.gd +++ b/stages/terrain/region/scripts/tile_map_layers/ground_layer.gd @@ -10,10 +10,9 @@ func setup(): material = MATERIAL z_index = -100 -func place_ground(coords : Array[Vector2i], on_finished : Callable = (func(): pass)): - async_place_terrain_cells( +func place_ground(coords : Array[Vector2i]): + place_terrain_cells( coords, GROUND_TILE_TERRAIN_SET, GROUND_TILE_TERRAIN, - on_finished ) \ No newline at end of file diff --git a/stages/terrain/region/scripts/tile_map_layers/region_layer.gd b/stages/terrain/region/scripts/tile_map_layers/region_layer.gd index 163710b..f5b12d3 100644 --- a/stages/terrain/region/scripts/tile_map_layers/region_layer.gd +++ b/stages/terrain/region/scripts/tile_map_layers/region_layer.gd @@ -1,20 +1,22 @@ +@tool @abstract extends TileMapLayer class_name RegionLayer -var threads : Array[Thread] = [] -var is_generated = false -var region : Region +@export var region_data : RegionData func _init( - _planet : Region = null + _region_data : RegionData ): - region = _planet - -func _ready(): - tile_set = region.tile_set + set_physics_quadrant_size(Region.CHUNK_TILE_SIZE) + set_rendering_quadrant_size(Region.CHUNK_TILE_SIZE) + tile_set = Region.TILE_SET scale = Vector2.ONE * Region.TILE_SCALE navigation_enabled = false + region_data = _region_data + # collision_visibility_mode = DebugVisibilityMode.DEBUG_VISIBILITY_MODE_FORCE_SHOW + +func _ready(): setup() func setup(): @@ -35,37 +37,22 @@ func get_all_neighbors_cell(coord : Vector2i) -> Array[Vector2i]: func has_cell(tile_position : Vector2i) -> bool: return get_cell_source_id(tile_position) != -1 -func async_place_terrain_cells( - coords : Array[Vector2i], - tile_terrain_set : int = 0, - tile_terrain : int = 0, - on_finished : Callable = (func(): pass) -): - var thread = Thread.new() - threads.append(thread) - thread.start( - func (): - place_terrain_cells( - coords, - tile_terrain_set, - tile_terrain - ) - on_finished.call_deferred() - ) - func place_terrain_cells( coords : Array[Vector2i], tile_terrain_set : int = 0, tile_terrain : int = 0 ): - region.generation_semaphore.wait() + var valid_coords : Array[Vector2i] = coords.filter(is_coord_valid) set_cells_terrain_connect( - coords, + valid_coords, tile_terrain_set, tile_terrain ) - region.generation_semaphore.post() -func _exit_tree(): - for t in threads: - t.wait_to_finish() \ No newline at end of file +func is_coord_valid(coord : Vector2i) -> bool: + return ( + coord.x >= 0 + and coord.y >= 0 + and coord.x < Region.CHUNK_TILE_SIZE + and coord.y < Region.CHUNK_TILE_SIZE + ) \ No newline at end of file diff --git a/stages/terrain/region/scripts/tile_map_layers/rock_layer.gd b/stages/terrain/region/scripts/tile_map_layers/rock_layer.gd index 2d4ba4f..d507ea2 100644 --- a/stages/terrain/region/scripts/tile_map_layers/rock_layer.gd +++ b/stages/terrain/region/scripts/tile_map_layers/rock_layer.gd @@ -6,61 +6,26 @@ const ROCK_TILE_TERRAIN_SET : int = 0 const ROCK_TILE_TERRAIN : int = 1 const CRISTAL_TILE_TERRAIN : int = 2 -const CRISTAL_LOOT_CHANCE : float = 1 - enum TileType { EMPTY,ROCK,CRISTAL } func setup(): z_index = -1 -func place_rocks(coords : Array[Vector2i], type := TileType.ROCK,on_finished : Callable = (func(): pass)): +func place_rocks(coords : Array[Vector2i], type := TileType.ROCK): if type != TileType.EMPTY: - async_place_terrain_cells( + place_terrain_cells( coords, ROCK_TILE_TERRAIN_SET, ROCK_TILE_TERRAIN if type == TileType.ROCK else CRISTAL_TILE_TERRAIN, - on_finished ) -func remove_rocks(coords : Array[Vector2i], save = false,on_finished : Callable = (func(): pass)): - async_place_terrain_cells( +func remove_rocks(coords : Array[Vector2i], save = false): + place_terrain_cells( coords, ROCK_TILE_TERRAIN_SET, - -1, - on_finished + -1 ) - if save: - for coord in coords: - var chunk_coord = Vector2i( - floori(coord.x / float(Region.CHUNK_TILE_SIZE)), - floori(coord.y / float(Region.CHUNK_TILE_SIZE)), - ) - var chunk_tile_coord : Vector2i = coord - chunk_coord * Region.CHUNK_TILE_SIZE - (region.data - .get_or_create_chunk_data(chunk_coord) - .update_rock_tile_diff(chunk_tile_coord, ChunkData.TileDiff.ABSENT)) -func dig_rocks(coords : Array[Vector2i]) -> bool: - var has_rock = false - - for coord in coords: - if has_tile(coord): - has_rock = true - loot_rock(coord) - - if has_rock: - remove_rocks(coords, true) - - return has_rock - -func loot_rock(coord : Vector2i): - if get_tile_type(coord) == TileType.CRISTAL and randf() < CRISTAL_LOOT_CHANCE: - var loot = Seed.generate_random() - region.drop_item( - loot, - coord * Region.TILE_SIZE + Vector2i.ONE * floori(Region.TILE_SIZE/2.), - floor(Region.TILE_SIZE/2.) - ) func has_tile(coord : Vector2i) -> bool: return has_cell(coord) diff --git a/stages/terrain/region/scripts/tiles_diff_data.gd b/stages/terrain/region/scripts/tiles_diff_data.gd new file mode 100644 index 0000000..30b7497 --- /dev/null +++ b/stages/terrain/region/scripts/tiles_diff_data.gd @@ -0,0 +1,46 @@ +extends Resource +class_name TilesDiffData + +enum TileDiff { NO_DIFF,PRESENT,ABSENT } + +@export var tiles_diff : Dictionary[String, TileDiff] + +static func get_coord_key(coord : Vector2i) -> String: + return "%d:%d" % [coord.x, coord.y] + +static func get_global_coord(local_coord : Vector2i, chunk_coord : Vector2i, ) -> Vector2i: + return local_coord + (Vector2i.ONE * Region.CHUNK_TILE_SIZE * chunk_coord) + +static func get_local_coord(coord : Vector2i, chunk_coord : Vector2i, ) -> Vector2i: + return coord - (Vector2i.ONE * Region.CHUNK_TILE_SIZE * chunk_coord) + +func get_tile_diff( + coord : Vector2i, +) -> TileDiff: + if not has_diff(coord): + return TileDiff.NO_DIFF + return tiles_diff[get_coord_key(coord)] + +func get_tile_diff_for_local_coord( + local_coord : Vector2i, + chunk_coord : Vector2i +) -> TileDiff: + return get_tile_diff(get_global_coord(local_coord, chunk_coord)) + +func update_tile_diff( + coord : Vector2i, + diff : TileDiff, +): + tiles_diff[get_coord_key(coord)] = diff + +func update_tiles_diff( + coords : Array[Vector2i], + diff : TileDiff, +): + for coord in coords: + tiles_diff[get_coord_key(coord)] = diff + +func has_diff( + coord : Vector2i, +): + return tiles_diff.has(get_coord_key(coord)) \ No newline at end of file diff --git a/stages/terrain/region/scripts/tiles_diff_data.gd.uid b/stages/terrain/region/scripts/tiles_diff_data.gd.uid new file mode 100644 index 0000000..0879cc8 --- /dev/null +++ b/stages/terrain/region/scripts/tiles_diff_data.gd.uid @@ -0,0 +1 @@ +uid://dy6d4rmdu6gh0 diff --git a/stages/terrain/region/test_chunk.tscn b/stages/terrain/region/test_chunk.tscn new file mode 100644 index 0000000..0ce0b33 --- /dev/null +++ b/stages/terrain/region/test_chunk.tscn @@ -0,0 +1,26 @@ +[gd_scene format=3 uid="uid://dtfuxosn6s0cr"] + +[ext_resource type="Script" uid="uid://d2ixbaa2uqlv4" path="res://stages/terrain/region/scripts/chunk.gd" id="1_mhr83"] +[ext_resource type="Script" uid="uid://bgbbce45hjv3d" path="res://entities/scripts/entity_data.gd" id="2_tiw8g"] +[ext_resource type="Script" uid="uid://da6j333qs7wse" path="res://entities/plants/scripts/plant_data.gd" id="3_ct7cr"] +[ext_resource type="Script" uid="uid://cx30nvq8b34lj" path="res://stages/terrain/region/scripts/region_data.gd" id="4_0rtv3"] + +[sub_resource type="Resource" id="Resource_tiw8g"] +script = ExtResource("4_0rtv3") +rock_threshold = 0.5 +decontamination_threshold = 0.5 +metadata/_custom_type_script = "uid://cx30nvq8b34lj" + +[node name="TestChunk" type="Node2D" unique_id=990498648] + +[node name="Chunk" type="Node2D" parent="." unique_id=709095052] +script = ExtResource("1_mhr83") +region_data = SubResource("Resource_tiw8g") +metadata/_custom_type_script = "uid://d2ixbaa2uqlv4" + +[node name="Chunk2" type="Node2D" parent="." unique_id=509661921] +position = Vector2(1280, 0) +script = ExtResource("1_mhr83") +region_data = SubResource("Resource_tiw8g") +chunk_coord = Vector2i(1, 0) +metadata/_custom_type_script = "uid://d2ixbaa2uqlv4" diff --git a/translation/game/gui.csv b/translation/game/gui.csv index f9bd8bd..e83f910 100644 --- a/translation/game/gui.csv +++ b/translation/game/gui.csv @@ -10,7 +10,7 @@ PLANT_INFO_TEXT,"[b]1[/b] Name [b]2[/b] Archétype [b]3[/b] Score [b]4[/b] Age -[b]5[/b] Durée de pousse +[b]5[/b] Temps de croissance [b]6[/b] Durée de vie" TERRAINS,Terrains,Terrains FERTILE_LAND_TEXT,[b]Fertile Land[/b] Seeds can only be planted on this zone,[b]Terre fertile[/b] Des graines peuvent être plantées dans cette zone @@ -143,7 +143,7 @@ CHOOSE_A_LANGUAGE,Choose a language,Choisissez une langue NO_ENERGY_LEFT," (no energy left)", " (pas d'énergie restante)" %d_GARDEN_SCORE_LEFT,"%d garden score left","%d score de jardin restant" SETTINGS,Settings,Paramètres -LANGUAGE,Language,Language +LANGUAGE,Language,Langage SOUND,Sound,Son MUSIC_VOLUME,Music volume,Volume de la musique ENVIRONMENT_VOLUME,Environment Volume,Volume de l'environnement