From 8917a02a7bdb6f1f96ee008f841a08e76bc31254 Mon Sep 17 00:00:00 2001 From: Zacharie Guet Date: Sun, 30 Nov 2025 16:53:07 +0100 Subject: [PATCH] =?UTF-8?q?ajout=20d'un=20terrain=20infini=20et=20la=20pos?= =?UTF-8?q?sibilit=C3=A9=20de=20planter=20n'importe=20o=C3=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Translation/localization.csv | 2 + common/icons/pick.svg | 1 + .../icons/pick.svg.import | 16 +- common/tools/scripts/math.gd | 69 + common/tools/scripts/math.gd.uid | 1 + .../shaders/texture_color_filter.gdshader | 29 + ....uid => texture_color_filter.gdshader.uid} | 0 .../shaders/tilemap_repeat_texture.gdshader | 21 - .../truck/ladder/scripts/truck_ladder.gd | 6 +- .../decontaminate_terrain_effect.gd | 12 +- .../player/inventory/scripts/items/pickaxe.gd | 41 + .../inventory/scripts/items/pickaxe.gd.uid | 1 + .../player/inventory/scripts/items/seed.gd | 259 ++-- .../player/inventory/scripts/items/shovel.gd | 50 +- entities/player/scripts/player.gd | 436 +++--- entities/player/scripts/player_data.gd | 2 +- .../assets/sprites/underground_loot.svg | 40 - .../scripts/underground_loot.gd | 39 - .../scripts/underground_loot.gd.uid | 1 - .../scripts/underground_loot_data.gd | 15 - .../scripts/underground_loot_data.gd.uid | 1 - .../underground_loot/underground_loot.tscn | 21 - gui/game/tutorial/scripts/tutorial.gd | 321 +++-- readme.md | 4 +- stages/planet_run/planet_run.tscn | 34 +- .../planet/assets/textures/blue_rect.png | Bin 0 -> 264 bytes .../assets/textures/blue_rect.png.import | 40 + .../planet/assets/textures/green_rect.png | Bin 0 -> 264 bytes .../assets/textures/green_rect.png.import | 40 + .../planet/assets/textures/green_tiles.png | Bin 0 -> 10664 bytes .../assets/textures/green_tiles.png.import | 40 + .../planet/assets/textures/red_rect.png | Bin 0 -> 264 bytes .../assets/textures/red_rect.png.import | 40 + .../planet/assets/textures/red_tiles.png | Bin 0 -> 10587 bytes .../assets/textures/red_tiles.png.import | 40 + .../assets/textures/rock_cristal_texture.png | Bin 0 -> 209249 bytes .../textures/rock_cristal_texture.png.import | 40 + .../assets/textures/round_red_tiles.png | Bin 0 -> 5314 bytes .../textures/round_red_tiles.png.import | 40 + stages/terrain/planet/planet.tscn | 44 +- .../contamination_planet_tilemap.tres | 9 + .../decontamination_planet_tilemap.tres | 9 + .../materials/ground_planet_tilemap.tres | 9 + .../materials/rock_planet_tilemap.tres | 11 + .../planet/resources/planet_tileset.tres | 1213 +++++++++++++++++ stages/terrain/planet/scripts/chunk.gd | 245 ++-- stages/terrain/planet/scripts/chunk_data.gd | 62 + .../terrain/planet/scripts/chunk_data.gd.uid | 1 + stages/terrain/planet/scripts/garden.gd | 57 - stages/terrain/planet/scripts/planet.gd | 251 ++-- stages/terrain/planet/scripts/planet_data.gd | 102 +- stages/terrain/planet/scripts/terrain_data.gd | 105 -- .../planet/scripts/terrain_data.gd.uid | 1 - .../tile_map_layers/decontamination_layer.gd | 33 + .../decontamination_layer.gd.uid | 1 + .../scripts/tile_map_layers/ground_layer.gd | 18 + .../tile_map_layers/ground_layer.gd.uid | 1 + .../scripts/tile_map_layers/planet_layer.gd | 36 + .../tile_map_layers/planet_layer.gd.uid | 1 + .../scripts/tile_map_layers/rock_layer.gd | 87 ++ .../scripts/tile_map_layers/rock_layer.gd.uid | 1 + stages/terrain/scripts/terrain.gd | 23 +- stages/terrain/truck/truck.tscn | 15 +- 63 files changed, 2847 insertions(+), 1190 deletions(-) create mode 100644 common/icons/pick.svg rename entities/underground_loot/assets/sprites/underground_loot.svg.import => common/icons/pick.svg.import (59%) create mode 100644 common/tools/scripts/math.gd create mode 100644 common/tools/scripts/math.gd.uid create mode 100644 common/vfx/materials/shaders/texture_color_filter.gdshader rename common/vfx/materials/shaders/{tilemap_repeat_texture.gdshader.uid => texture_color_filter.gdshader.uid} (100%) delete mode 100644 common/vfx/materials/shaders/tilemap_repeat_texture.gdshader create mode 100644 entities/player/inventory/scripts/items/pickaxe.gd create mode 100644 entities/player/inventory/scripts/items/pickaxe.gd.uid delete mode 100644 entities/underground_loot/assets/sprites/underground_loot.svg delete mode 100644 entities/underground_loot/scripts/underground_loot.gd delete mode 100644 entities/underground_loot/scripts/underground_loot.gd.uid delete mode 100644 entities/underground_loot/scripts/underground_loot_data.gd delete mode 100644 entities/underground_loot/scripts/underground_loot_data.gd.uid delete mode 100644 entities/underground_loot/underground_loot.tscn create mode 100644 stages/terrain/planet/assets/textures/blue_rect.png create mode 100644 stages/terrain/planet/assets/textures/blue_rect.png.import create mode 100644 stages/terrain/planet/assets/textures/green_rect.png create mode 100644 stages/terrain/planet/assets/textures/green_rect.png.import create mode 100644 stages/terrain/planet/assets/textures/green_tiles.png create mode 100644 stages/terrain/planet/assets/textures/green_tiles.png.import create mode 100644 stages/terrain/planet/assets/textures/red_rect.png create mode 100644 stages/terrain/planet/assets/textures/red_rect.png.import create mode 100644 stages/terrain/planet/assets/textures/red_tiles.png create mode 100644 stages/terrain/planet/assets/textures/red_tiles.png.import create mode 100644 stages/terrain/planet/assets/textures/rock_cristal_texture.png create mode 100644 stages/terrain/planet/assets/textures/rock_cristal_texture.png.import create mode 100644 stages/terrain/planet/assets/textures/round_red_tiles.png create mode 100644 stages/terrain/planet/assets/textures/round_red_tiles.png.import create mode 100644 stages/terrain/planet/resources/materials/contamination_planet_tilemap.tres create mode 100644 stages/terrain/planet/resources/materials/decontamination_planet_tilemap.tres create mode 100644 stages/terrain/planet/resources/materials/ground_planet_tilemap.tres create mode 100644 stages/terrain/planet/resources/materials/rock_planet_tilemap.tres create mode 100644 stages/terrain/planet/resources/planet_tileset.tres create mode 100644 stages/terrain/planet/scripts/chunk_data.gd create mode 100644 stages/terrain/planet/scripts/chunk_data.gd.uid delete mode 100644 stages/terrain/planet/scripts/terrain_data.gd delete mode 100644 stages/terrain/planet/scripts/terrain_data.gd.uid create mode 100644 stages/terrain/planet/scripts/tile_map_layers/decontamination_layer.gd create mode 100644 stages/terrain/planet/scripts/tile_map_layers/decontamination_layer.gd.uid create mode 100644 stages/terrain/planet/scripts/tile_map_layers/ground_layer.gd create mode 100644 stages/terrain/planet/scripts/tile_map_layers/ground_layer.gd.uid create mode 100644 stages/terrain/planet/scripts/tile_map_layers/planet_layer.gd create mode 100644 stages/terrain/planet/scripts/tile_map_layers/planet_layer.gd.uid create mode 100644 stages/terrain/planet/scripts/tile_map_layers/rock_layer.gd create mode 100644 stages/terrain/planet/scripts/tile_map_layers/rock_layer.gd.uid diff --git a/Translation/localization.csv b/Translation/localization.csv index f30f2fa..8c80704 100644 --- a/Translation/localization.csv +++ b/Translation/localization.csv @@ -95,6 +95,8 @@ SHOVEL,Shovel,Pelle SHOVEL_DESC_TEXT,"Use it to [b]dig up seeds[/b] and [b]harvest mature plants[/b].","Utilise-la pour [b]déterrer les graines[/b] et pour [b]récolter les plantes mature[/b]." TROWEL,Trowel,Truelle TROWEL_DESC_TEXT,"Use it to [b]harvest mature plants[/b]. Can grant a [b]bonus seed[/b].","Utilise-la pour [b]récolter les plantes mature[/b]. Peut donner une [b]graine supplémentaire[/b]." +PICKAXE,Pickaxe,Pioche +PICKAXE_DESC_TEXT,Can dig rock and precious materials,Peut creuser la roche et des matériaux précieux DIG,Dig,Creuser OPEN,Open,Ouvrir %s_SEED,%s Seed,Graine de %s diff --git a/common/icons/pick.svg b/common/icons/pick.svg new file mode 100644 index 0000000..dbc7d4d --- /dev/null +++ b/common/icons/pick.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/entities/underground_loot/assets/sprites/underground_loot.svg.import b/common/icons/pick.svg.import similarity index 59% rename from entities/underground_loot/assets/sprites/underground_loot.svg.import rename to common/icons/pick.svg.import index 068af1b..f221293 100644 --- a/entities/underground_loot/assets/sprites/underground_loot.svg.import +++ b/common/icons/pick.svg.import @@ -2,22 +2,24 @@ importer="texture" type="CompressedTexture2D" -uid="uid://bu26h0iqutnky" -path="res://.godot/imported/underground_loot.svg-94513f7cc11df7cda1992e530bcff786.ctex" +uid="uid://ds4m14vl7he6v" +path="res://.godot/imported/pick.svg-b8cbf14d632089bea5ad3faa09f4cc83.ctex" metadata={ "vram_texture": false } [deps] -source_file="res://entities/underground_loot/assets/sprites/underground_loot.svg" -dest_files=["res://.godot/imported/underground_loot.svg-94513f7cc11df7cda1992e530bcff786.ctex"] +source_file="res://common/icons/pick.svg" +dest_files=["res://.godot/imported/pick.svg-b8cbf14d632089bea5ad3faa09f4cc83.ctex"] [params] compress/mode=0 compress/high_quality=false compress/lossy_quality=0.7 +compress/uastc_level=0 +compress/rdo_quality_loss=0.0 compress/hdr_compression=1 compress/normal_map=0 compress/channel_pack=0 @@ -25,6 +27,10 @@ mipmaps/generate=false mipmaps/limit=-1 roughness/mode=0 roughness/src_normal="" +process/channel_remap/red=0 +process/channel_remap/green=1 +process/channel_remap/blue=2 +process/channel_remap/alpha=3 process/fix_alpha_border=true process/premult_alpha=false process/normal_map_invert_y=false @@ -32,6 +38,6 @@ process/hdr_as_srgb=false process/hdr_clamp_exposure=false process/size_limit=0 detect_3d/compress_to=1 -svg/scale=1.0 +svg/scale=2.0 editor/scale_with_editor_scale=false editor/convert_colors_with_editor_theme=false diff --git a/common/tools/scripts/math.gd b/common/tools/scripts/math.gd new file mode 100644 index 0000000..704e4fa --- /dev/null +++ b/common/tools/scripts/math.gd @@ -0,0 +1,69 @@ +class_name Math + +static func get_chunk_from_pos(coord) -> Vector2i: + return Vector2i( + floori(coord.x / (Planet.CHUNK_TILE_SIZE * Planet.TILE_SIZE)), + floori(coord.y / (Planet.CHUNK_TILE_SIZE * Planet.TILE_SIZE)) + ) + +static func get_tile_from_pos(coord) -> Vector2i: + return Vector2i( + floori(coord.x / (Planet.TILE_SIZE)), + floori(coord.y / (Planet.TILE_SIZE)), + ) + +static func get_tiles_in_circle(center: Vector2, radius : float) -> Array[Vector2i]: + var tiles : Array[Vector2i] = [] + + for x in range( + floori((center.x - radius/2.) / Planet.TILE_SIZE), + ceili((center.x + radius/2.) / Planet.TILE_SIZE), + ): + for y in range( + floori((center.y - radius/2.) / Planet.TILE_SIZE), + ceili((center.y + radius/2.) / Planet.TILE_SIZE), + ): + if is_tile_on_circle(Vector2i(x,y), center, radius): + tiles.append(Vector2i(x,y)) + return tiles + +static func is_tile_on_circle(tile_coord : Vector2i, circle_center: Vector2, circle_radius : float) -> bool: + var absolute_tile_pos : Vector2 = tile_coord * Planet.TILE_SIZE + + # Loop over tile corners to know if the area collide + var corners : Array[Vector2] = [] + for x in [0,1]: + for y in [0,1]: + corners.append( + absolute_tile_pos + + Vector2.RIGHT * x * Planet.TILE_SIZE + + Vector2.DOWN * y * Planet.TILE_SIZE + ) + + # Check if segment touch area + for i in range(4): + var a = corners[i%4] + var b = corners[(i+1)%4] + if segment_intersect_circle(a,b,circle_center,circle_radius): + return true + + return false + + +# Stolen here https://stackoverflow.com/questions/1073336/circle-line-segment-collision-detection-algorithm +static func segment_intersect_circle( + a : Vector2, + b : Vector2, + c : Vector2, + radius: float +) -> bool: + var a_circle = c - a + var b_a = b - a + + var proj_point = proj(a_circle,b_a) + a + + return proj_point.distance_to(c) < radius + +static func proj(a : Vector2,b : Vector2) -> Vector2: + var k = a.dot(b) / b.dot(b) + return Vector2(k * b.x, k * b.y) \ No newline at end of file diff --git a/common/tools/scripts/math.gd.uid b/common/tools/scripts/math.gd.uid new file mode 100644 index 0000000..547bc32 --- /dev/null +++ b/common/tools/scripts/math.gd.uid @@ -0,0 +1 @@ +uid://b8i5lkk4md657 diff --git a/common/vfx/materials/shaders/texture_color_filter.gdshader b/common/vfx/materials/shaders/texture_color_filter.gdshader new file mode 100644 index 0000000..78d4c17 --- /dev/null +++ b/common/vfx/materials/shaders/texture_color_filter.gdshader @@ -0,0 +1,29 @@ +shader_type canvas_item; + +uniform sampler2D red_overlay_tex: repeat_enable, filter_nearest; +uniform sampler2D green_overlay_tex: repeat_enable, filter_nearest; +uniform sampler2D blue_overlay_tex: repeat_enable, filter_nearest; +uniform float scale = 0.006944444; // calculated by 1/texture size e.g. 1/144 +varying vec2 world_position; + +void vertex(){ + // calculate the world position for use in the fragment shader + world_position = (MODEL_MATRIX * vec4(VERTEX, 0.0, 1.0)).xy; +} + +void fragment() { + float mix_amount = floor(COLOR.r); + + // sample the overlay_tex using worldPos + vec4 red_overlay_color = texture(red_overlay_tex, world_position * scale); + vec4 green_overlay_color = texture(green_overlay_tex, world_position * scale); + vec4 blue_overlay_color = texture(blue_overlay_tex, world_position * scale); + + float origin_alpha = COLOR.a; + + // combine original color and overlay color together + COLOR = mix(COLOR, red_overlay_color, floor(COLOR.r)); + COLOR = mix(COLOR, green_overlay_color, floor(COLOR.g)); + COLOR = mix(COLOR, blue_overlay_color, floor(COLOR.b)); + COLOR.a = origin_alpha; +} \ No newline at end of file diff --git a/common/vfx/materials/shaders/tilemap_repeat_texture.gdshader.uid b/common/vfx/materials/shaders/texture_color_filter.gdshader.uid similarity index 100% rename from common/vfx/materials/shaders/tilemap_repeat_texture.gdshader.uid rename to common/vfx/materials/shaders/texture_color_filter.gdshader.uid diff --git a/common/vfx/materials/shaders/tilemap_repeat_texture.gdshader b/common/vfx/materials/shaders/tilemap_repeat_texture.gdshader deleted file mode 100644 index 054cbe9..0000000 --- a/common/vfx/materials/shaders/tilemap_repeat_texture.gdshader +++ /dev/null @@ -1,21 +0,0 @@ -shader_type canvas_item; - -uniform sampler2D overlay_tex: repeat_enable, filter_nearest; -uniform float scale = 0.006944444; // calculated by 1/texture size e.g. 1/144 -varying vec2 world_position; - -void vertex(){ - // calculate the world position for use in the fragment shader - world_position = (MODEL_MATRIX * vec4(VERTEX, 0.0, 1.0)).xy; -} - -void fragment() { - // only apply overlay_tex on the fully red parts of the original tiles - float mix_amount = floor(COLOR.r); - - // sample the overlay_tex using worldPos - vec4 overlay_color = texture(overlay_tex, world_position * scale); - - // combine original color and overlay color together - COLOR = mix(COLOR, overlay_color, mix_amount); -} \ No newline at end of file diff --git a/entities/interactables/truck/ladder/scripts/truck_ladder.gd b/entities/interactables/truck/ladder/scripts/truck_ladder.gd index d996982..a681aff 100644 --- a/entities/interactables/truck/ladder/scripts/truck_ladder.gd +++ b/entities/interactables/truck/ladder/scripts/truck_ladder.gd @@ -4,6 +4,6 @@ class_name TruckLadder const TRUCK_SCENE_PATH = "res://stages/terrain/truck/truck.tscn" func interact(p : Player): - p.planet.save() - get_tree().change_scene_to_file(TRUCK_SCENE_PATH) - return true + p.planet.save() + get_tree().change_scene_to_file(TRUCK_SCENE_PATH) + return true diff --git a/entities/plants/scripts/plant_effects/decontaminate_terrain_effect.gd b/entities/plants/scripts/plant_effects/decontaminate_terrain_effect.gd index af34ac4..9773dc0 100644 --- a/entities/plants/scripts/plant_effects/decontaminate_terrain_effect.gd +++ b/entities/plants/scripts/plant_effects/decontaminate_terrain_effect.gd @@ -2,7 +2,7 @@ extends PlantEffect class_name DecontaminateTerrainEffect func get_decontamination_radius(): - return 50 + 50 * level + return (1 + level) func get_effect_name() -> String: return tr("DECONTAMINATE") @@ -12,9 +12,9 @@ func get_effect_description() -> String: return ret func effect(plant): - var radius = get_decontamination_radius() - - plant.planet.garden.impact_contamination( + var tiles := Math.get_tiles_in_circle( plant.global_position, - radius - ) \ No newline at end of file + get_decontamination_radius() * Planet.TILE_SIZE + Planet.TILE_SIZE/2. + ) + + plant.planet.decontamination_layer.place_decontaminations(tiles, true) diff --git a/entities/player/inventory/scripts/items/pickaxe.gd b/entities/player/inventory/scripts/items/pickaxe.gd new file mode 100644 index 0000000..6fb58d9 --- /dev/null +++ b/entities/player/inventory/scripts/items/pickaxe.gd @@ -0,0 +1,41 @@ +extends Item +class_name Pickaxe + +const USE_INTERVAL = 0.15 + +func get_item_name() -> String: + return tr("PICKAXE") + +func get_description() -> String: + return tr("PICKAXE_DESC_TEXT") + +func get_icon() -> Texture2D: + return preload("res://common/icons/pick.svg") + +func get_energy_used() -> int: + return 1 + +func get_usage_zone_radius() -> int: + return 50 + +func use_text() -> String: + return tr("DIG") + +func can_use(_player : Player, zone : Player.ActionZone) -> bool: + if zone and zone.area: + var bodies = zone.area.get_overlapping_bodies() + for body in bodies : + if body is RockLayer: + return true + return false + +func use(_player : Player, zone : Player.ActionZone) -> bool: + + 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] + + return rock_layer.dig_rocks(zone.get_tiles()) + + return false diff --git a/entities/player/inventory/scripts/items/pickaxe.gd.uid b/entities/player/inventory/scripts/items/pickaxe.gd.uid new file mode 100644 index 0000000..6e63f8f --- /dev/null +++ b/entities/player/inventory/scripts/items/pickaxe.gd.uid @@ -0,0 +1 @@ +uid://ctucfh72pxut8 diff --git a/entities/player/inventory/scripts/items/seed.gd b/entities/player/inventory/scripts/items/seed.gd index d401ac2..b557c28 100644 --- a/entities/player/inventory/scripts/items/seed.gd +++ b/entities/player/inventory/scripts/items/seed.gd @@ -11,192 +11,191 @@ const SCORE_ICON = preload("res://common/icons/growth.svg") @export var plant_mutations: Array[PlantMutation] func get_item_name() -> String: - return tr("%s_SEED") % plant_type.name + return tr("%s_SEED") % plant_type.name func get_description() -> String: - return tr("PLANT_%s_MUST_BE_USED_IN_DECONTAMINATED_ZONE") % plant_type.name + return tr("PLANT_%s_MUST_BE_USED_IN_DECONTAMINATED_ZONE") % plant_type.name func get_icon() -> Texture2D: - return plant_type.seed_texture + return plant_type.seed_texture func get_energy_used() -> int: - return 1 + return 1 func get_usage_zone_radius() -> int: - return 35 + return 35 func get_usage_object_affected(i : InspectableEntity) -> bool: - return i is Plant + return i is Plant func _init( - _plant_type : PlantType = null, - _parent_mutation : Array[PlantMutation] = [] + _plant_type : PlantType = null, + _parent_mutation : Array[PlantMutation] = [] ): - plant_type = _plant_type - plant_mutations = Seed.mutate(_parent_mutation) + plant_type = _plant_type + plant_mutations = Seed.mutate(_parent_mutation) func use_text() -> String: - return tr("PLANT_%s") % plant_type.name + return tr("PLANT_%s") % plant_type.name func is_one_time_use(): - return true + return true func can_use(player : Player, zone : Player.ActionZone) -> bool: - if ( - player.planet == null - or not player.planet.garden.is_in_garden(zone.get_global_position()) - ): - return false + if ( + player.planet == null + ): + return false - var is_there_a_plant_here = false - 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 point in zone.get_points_in_zone(): - if player.planet.garden.is_there_contamination(point): - is_there_contamination_in_zone = true + var is_there_a_plant_here = false + 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.planet.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 not is_there_contamination_in_zone func use(player : Player, zone : Player.ActionZone) -> bool: - if player.planet == null: - return false + if player.planet == null: + return false - AudioManager.play_sfx("Dig") - return player.planet.plant( - plant_type, - zone.get_global_position(), - plant_mutations - ) + AudioManager.play_sfx("Dig") + return player.planet.plant( + plant_type, + zone.get_global_position(), + plant_mutations + ) func card_info() -> CardInfo: - var info = CardInfo.new( - get_item_name() - ) - info.texture = icon - info.type_icon = TYPE_ICON + var info = CardInfo.new( + get_item_name() + ) + info.texture = icon + info.type_icon = TYPE_ICON - info.stats.append( - CardStatInfo.new( - tr("COST_%d_ENERGY") % energy_usage, - ENERGY_ICON - ) - ) + info.stats.append( + CardStatInfo.new( + tr("COST_%d_ENERGY") % energy_usage, + ENERGY_ICON + ) + ) - if is_one_time_use(): - info.stats.append( - CardStatInfo.new( - tr("ONE_TIME_USE"), - ONE_TIME_ICON - ) - ) + if is_one_time_use(): + info.stats.append( + CardStatInfo.new( + tr("ONE_TIME_USE"), + ONE_TIME_ICON + ) + ) - var effect_section = CardSectionInfo.new( - tr("EFFECT"), - get_description() - ) - effect_section.title_icon = ACTION_ICON + var effect_section = CardSectionInfo.new( + tr("EFFECT"), + get_description() + ) + effect_section.title_icon = ACTION_ICON - if energy_usage > 0: - effect_section.title_icon = ENERGY_ICON - - info.sections.append(effect_section) + if energy_usage > 0: + effect_section.title_icon = ENERGY_ICON + + info.sections.append(effect_section) - if len(plant_mutations) != 0: - var rarest : int = plant_mutations.map( - func(m : PlantMutation) : return m.get_rarity() - ).max() - info.bg_color = PlantMutation.get_rarity_color(rarest) - for m in plant_mutations: - info.sections.append(m.card_section()) - - return info + if len(plant_mutations) != 0: + var rarest : int = plant_mutations.map( + func(m : PlantMutation) : return m.get_rarity() + ).max() + info.bg_color = PlantMutation.get_rarity_color(rarest) + for m in plant_mutations: + info.sections.append(m.card_section()) + + return info func get_particles() -> Array[Particles.Parameters]: - var param : Array[Particles.Parameters] = [] + var param : Array[Particles.Parameters] = [] - for m in plant_mutations: - param.append( - Particles.Parameters.new( - m.get_icon(), - PlantMutation.get_rarity_color(m.get_rarity()) - ) - ) + for m in plant_mutations: + param.append( + Particles.Parameters.new( + m.get_icon(), + PlantMutation.get_rarity_color(m.get_rarity()) + ) + ) - return param + return param static func mutate(parent_mutation : Array[PlantMutation] = []) -> Array[PlantMutation]: - if randf() > MUTATION_PROBABILITY: - return parent_mutation + if randf() > MUTATION_PROBABILITY: + return parent_mutation - var possible_mutations : Array[MutationPossibility] = [ - AddMutation.new() - ] + var possible_mutations : Array[MutationPossibility] = [ + AddMutation.new() + ] - if ( - len(parent_mutation) >= 2 - ): - possible_mutations = [ - UpgradeMutation.new(), - RemoveMutation.new(), - ] - elif len(parent_mutation) > 0: - possible_mutations = [ - AddMutation.new(), - UpgradeMutation.new(), - RemoveMutation.new(), - ] - - var chosen_mutation = possible_mutations.pick_random() + if ( + len(parent_mutation) >= 2 + ): + possible_mutations = [ + UpgradeMutation.new(), + RemoveMutation.new(), + ] + elif len(parent_mutation) > 0: + possible_mutations = [ + AddMutation.new(), + UpgradeMutation.new(), + RemoveMutation.new(), + ] + + var chosen_mutation = possible_mutations.pick_random() - return chosen_mutation.mutate(parent_mutation) + return chosen_mutation.mutate(parent_mutation) class MutationPossibility: - func mutate(_parent_mutation : Array[PlantMutation] = [])-> Array[PlantMutation]: - return [] + func mutate(_parent_mutation : Array[PlantMutation] = [])-> Array[PlantMutation]: + return [] class DontMutate extends MutationPossibility: - func mutate(parent_mutation : Array[PlantMutation] = [])-> Array[PlantMutation]: - return parent_mutation + func mutate(parent_mutation : Array[PlantMutation] = [])-> Array[PlantMutation]: + return parent_mutation class AddMutation extends MutationPossibility: - func mutate(parent_mutation : Array[PlantMutation] = [])-> Array[PlantMutation]: - var new_mutations = parent_mutation.duplicate_deep() - var mut = PlantMutation.random_mutation(parent_mutation) + func mutate(parent_mutation : Array[PlantMutation] = [])-> Array[PlantMutation]: + var new_mutations = parent_mutation.duplicate_deep() + var mut = PlantMutation.random_mutation(parent_mutation) - if mut: - var existing_mut_id = new_mutations.find_custom(func(m:PlantMutation): return m.get_mutation_name() == mut.get_mutation_name()) - - if existing_mut_id >= 0: - new_mutations[existing_mut_id].level += 1 - else : - new_mutations.append(mut) + if mut: + var existing_mut_id = new_mutations.find_custom(func(m:PlantMutation): return m.get_mutation_name() == mut.get_mutation_name()) + + if existing_mut_id >= 0: + new_mutations[existing_mut_id].level += 1 + else : + new_mutations.append(mut) - return new_mutations + return new_mutations class UpgradeMutation extends MutationPossibility: - func mutate( - parent_mutation : Array[PlantMutation] = [] - ) -> Array[PlantMutation]: - var new_mutations = parent_mutation.duplicate_deep() + func mutate( + parent_mutation : Array[PlantMutation] = [] + ) -> Array[PlantMutation]: + var new_mutations = parent_mutation.duplicate_deep() - new_mutations.pick_random().level += 1 + new_mutations.pick_random().level += 1 - return new_mutations + return new_mutations class RemoveMutation extends MutationPossibility: - func mutate(parent_mutation : Array[PlantMutation] = [])-> Array[PlantMutation]: - var new_mutations :Array[PlantMutation] = parent_mutation.duplicate_deep() + func mutate(parent_mutation : Array[PlantMutation] = [])-> Array[PlantMutation]: + var new_mutations :Array[PlantMutation] = parent_mutation.duplicate_deep() - var mut_to_remove = new_mutations.pick_random() - if mut_to_remove.level > 1: - mut_to_remove.level -= 1 - else: - new_mutations.remove_at(new_mutations.find(mut_to_remove)) + var mut_to_remove = new_mutations.pick_random() + if mut_to_remove.level > 1: + mut_to_remove.level -= 1 + else: + new_mutations.remove_at(new_mutations.find(mut_to_remove)) - return new_mutations + return new_mutations diff --git a/entities/player/inventory/scripts/items/shovel.gd b/entities/player/inventory/scripts/items/shovel.gd index ecd225f..1ac9a4a 100644 --- a/entities/player/inventory/scripts/items/shovel.gd +++ b/entities/player/inventory/scripts/items/shovel.gd @@ -4,41 +4,45 @@ class_name Shovel const SHOVEL_ZONE_RADIUS = 50 func get_item_name() -> String: - return tr("SHOVEL") + return tr("SHOVEL") func get_description() -> String: - return tr("SHOVEL_DESC_TEXT") + return tr("SHOVEL_DESC_TEXT") func get_icon() -> Texture2D: - return preload("res://common/icons/shovel.svg") + return preload("res://common/icons/shovel.svg") func get_usage_zone_radius() -> int: - return SHOVEL_ZONE_RADIUS + return SHOVEL_ZONE_RADIUS func get_usage_object_affected(i : InspectableEntity) -> bool: - return i is Plant or i is UndergroundLoot + return i is Plant func use_text() -> String: - return tr("DIG") + return tr("DIG") func can_use(_player : Player, zone : Player.ActionZone) -> bool: - var areas = zone.get_affected_areas() - for area in areas : - if area is Plant or area is UndergroundLoot: - return true - return false + var areas = zone.get_affected_areas() + var bodies = zone.area.get_overlapping_bodies() + for body in bodies : + if body is RockLayer: + return true + for area in areas : + if area is Plant: + return true + return false func use(player : Player, zone : Player.ActionZone) -> bool: - for area in zone.get_affected_areas(): - if area and area is Plant: - harvest(area, player) - await player.get_tree().create_timer(USE_INTERVAL).timeout - if area and area is UndergroundLoot: - dig(area, player) - await player.get_tree().create_timer(USE_INTERVAL).timeout - - return true + for area in zone.get_affected_areas(): + if area and area is Plant: + harvest(area, player) + 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] -func dig(u: UndergroundLoot, player: Player): - AudioManager.play_sfx("Dig") - u.dig() + rock_layer.dig_rocks(zone.get_tiles()) + + return true diff --git a/entities/player/scripts/player.gd b/entities/player/scripts/player.gd index f0c779f..7b90809 100644 --- a/entities/player/scripts/player.gd +++ b/entities/player/scripts/player.gd @@ -10,320 +10,324 @@ signal upgraded var terrain : Terrain var planet : Planet : - get(): return terrain if terrain is Planet else null + get(): return terrain if terrain is Planet else null @export var speed = 350 var data : PlayerData var last_action_area_movement_timer : float = 100. var controlling_player : bool = true : - set(v): - controlling_player = v - velocity = Vector2.ZERO + set(v): + controlling_player = v + velocity = Vector2.ZERO var instruction : Instruction = null -@onready var preview_zone : ActionZone = setup_action_zone(Vector2.ZERO, null) -@onready var action_zone : ActionZone = setup_action_zone(Vector2.ZERO, null) +@onready var preview_zone : ActionZone = await setup_action_zone(Vector2.ZERO, null) +@onready var action_zone : ActionZone = await setup_action_zone(Vector2.ZERO, null) func _ready(): - data = GameInfo.game_data.player_data - data.inventory.updated.connect(_on_inventory_updated) - player_updated.emit(self) - Pointer.player = self + data = GameInfo.game_data.player_data + data.inventory.updated.connect(_on_inventory_updated) + player_updated.emit(self) + Pointer.player = self + setup_preview_zone(data.inventory.get_item()) func _input(_event) -> void: - if Input.is_action_pressed("change_item_left"): - data.inventory.change_current_item(1) - if Input.is_action_pressed("change_item_right"): - data.inventory.change_current_item(-1) - for i in range(1, 10): - if Input.is_action_pressed("item_" + str(i)): - data.inventory.set_current_item(i - 1) + if Input.is_action_pressed("change_item_left"): + data.inventory.change_current_item(1) + if Input.is_action_pressed("change_item_right"): + data.inventory.change_current_item(-1) + for i in range(1, 10): + if Input.is_action_pressed("item_" + str(i)): + data.inventory.set_current_item(i - 1) # Méthode déclenchée par la classe planet func _start_pass_day(): - controlling_player = false - instruction = null + controlling_player = false + instruction = null # Méthode déclenchée par la classe planet func _pass_day(): - full_recharge() + full_recharge() # Méthode déclenchée par la classe planet func _end_pass_day(): - controlling_player = true + controlling_player = true func _process(delta): - last_action_area_movement_timer += delta - if controlling_player: - calculate_direction() + last_action_area_movement_timer += delta + if controlling_player: + calculate_direction() - if ( - last_action_area_movement_timer >= ACTION_AREA_UPDATE_TIME - and instruction and instruction.can_be_done(self) - ): - instruction.do(self) - instruction = null - move_preview_zone(get_global_mouse_position()) - else: - velocity = Vector2.ZERO - move_and_slide() + if ( + last_action_area_movement_timer >= ACTION_AREA_UPDATE_TIME + and instruction and instruction.can_be_done(self) + ): + instruction.do(self) + instruction = null + move_preview_zone(get_global_mouse_position()) + else: + velocity = Vector2.ZERO + move_and_slide() func _on_inventory_updated(_inventory: Inventory): - setup_preview_zone(data.inventory.get_item()) - var item : Item = data.inventory.get_item() - if item: - var item_texture = item.icon - %ItemSprite.texture = item_texture - %ItemSprite.scale = Vector2( - 1./(item_texture.get_width()/HOLDING_ITEM_SPRITE_SIZE), - 1./(item_texture.get_height()/HOLDING_ITEM_SPRITE_SIZE) - ) - %HideEyes.visible = item != null - %ItemSprite.visible = item != null - emit_signal("player_updated", self) + setup_preview_zone(data.inventory.get_item()) + var item : Item = data.inventory.get_item() + if item: + var item_texture = item.icon + %ItemSprite.texture = item_texture + %ItemSprite.scale = Vector2( + 1./(item_texture.get_width()/HOLDING_ITEM_SPRITE_SIZE), + 1./(item_texture.get_height()/HOLDING_ITEM_SPRITE_SIZE) + ) + %HideEyes.visible = item != null + %ItemSprite.visible = item != null + emit_signal("player_updated", self) func calculate_direction(): - var input_direction: Vector2 = Input.get_vector("move_left", "move_right", "move_up", "move_down") + var input_direction: Vector2 = Input.get_vector("move_left", "move_right", "move_up", "move_down") - if input_direction.length() != 0: - instruction = null + if input_direction.length() != 0: + instruction = null - if instruction and instruction.position.distance_to(global_position) > (MAX_REACH - 1.): - input_direction = self.global_position.direction_to(instruction.position) + if ( + instruction + and ( + instruction.position.distance_to(global_position) > (MAX_REACH - 1.) + or instruction is MoveInstruction + ) + ): + input_direction = self.global_position.direction_to(instruction.position) - velocity = input_direction * speed - if input_direction.x: - flip_character(input_direction.x > 0) + velocity = input_direction * speed + if input_direction.x: + flip_character(input_direction.x > 0) func flip_character(face_right = true): - $Sprite.flip_h = not face_right - %ItemSprite.position.x = abs(%ItemSprite.position.x) * (1 if face_right else -1) - %HideEyes.position.x = abs(%ItemSprite.position.x) * (1 if face_right else -1) + $Sprite.flip_h = not face_right + %ItemSprite.position.x = abs(%ItemSprite.position.x) * (1 if face_right else -1) + %HideEyes.position.x = abs(%ItemSprite.position.x) * (1 if face_right else -1) func can_interact(interactable : Interactable): - return interactable.can_interact(self) + return interactable.can_interact(self) func try_interact(interactable : Interactable): - if interactable: - instruction = InteractableInstruction.new( - interactable - ) + if interactable: + instruction = InteractableInstruction.new( + interactable + ) func try_move(move_to : Vector2): - instruction = MoveInstruction.new(move_to) + instruction = MoveInstruction.new(move_to) func pick_item(item : Item) -> Item: - AudioManager.play_sfx("PickUp") - if data.inventory.is_full(): - drop_item() + AudioManager.play_sfx("PickUp") + if data.inventory.is_full(): + drop_item() - var available_slot_ind = data.inventory.get_best_available_slot_ind() - if ( - available_slot_ind == data.inventory.current_item_ind - && data.inventory.items[available_slot_ind] != null - ): - var current_item : Item = data.inventory.get_item() - data.inventory.set_item(item, available_slot_ind) - return current_item - else : - if data.inventory.set_item(item, available_slot_ind): - data.inventory.set_current_item(available_slot_ind); - return null + var available_slot_ind = data.inventory.get_best_available_slot_ind() + if ( + available_slot_ind == data.inventory.current_item_ind + && data.inventory.items[available_slot_ind] != null + ): + var current_item : Item = data.inventory.get_item() + data.inventory.set_item(item, available_slot_ind) + return current_item + else : + if data.inventory.set_item(item, available_slot_ind): + data.inventory.set_current_item(available_slot_ind); + return null func drop_item(): - var item_to_drop = data.inventory.pop_item() - if item_to_drop: - terrain.drop_item(item_to_drop, global_position) - AudioManager.play_sfx("Drop") + var item_to_drop = data.inventory.pop_item() + if item_to_drop: + terrain.drop_item(item_to_drop, global_position) + AudioManager.play_sfx("Drop") func delete_item(item: Item): - data.inventory.remove_item(item) + data.inventory.remove_item(item) func try_use_item(item : Item, use_position : Vector2): - setup_action_zone(use_position, item) - instruction = ItemActionInstruction.new( - use_position, - item - ) + await setup_action_zone(use_position, item) + instruction = ItemActionInstruction.new( + use_position, + item + ) func preview_could_use_item(item : Item) -> bool: - return could_use_item_on_zone(item, preview_zone) + return could_use_item_on_zone(item, preview_zone) func could_use_item_on_zone(item : Item, zone: ActionZone) -> bool: - return ( - data.inventory.has_item(item) - and item.can_use(self, zone) - ) + return ( + data.inventory.has_item(item) + and item.can_use(self, zone) + ) func can_use_item_on_zone(item : Item, zone: ActionZone) -> bool: - return ( - could_use_item_on_zone(item, zone) - and has_energy_to_use_item(item) - ) + return ( + could_use_item_on_zone(item, zone) + and has_energy_to_use_item(item) + ) func has_energy_to_use_item(item : Item): - return (data.energy - item.energy_usage) >= 0 + return (data.energy - item.energy_usage) >= 0 func use_item(item : Item): - if can_use_item_on_zone(item, action_zone): - var is_item_used = await item.use(self, action_zone) - if is_item_used: - data.energy -= item.energy_usage - if item.is_one_time_use(): - data.inventory.remove_item(item) + if can_use_item_on_zone(item, action_zone): + var is_item_used = await item.use(self, action_zone) + if is_item_used: + data.energy -= item.energy_usage + if item.is_one_time_use(): + data.inventory.remove_item(item) func upgrade_max_energy(amount = 1): - data.max_energy += amount - upgraded.emit() - player_updated.emit(self) + data.max_energy += amount + upgraded.emit() + player_updated.emit(self) func upgrade_inventory_size(amount = 1): - data.inventory.size += 1 - upgraded.emit() - player_updated.emit(self) + data.inventory.size += amount + upgraded.emit() + player_updated.emit(self) func recharge(amount : int = data.max_energy): - data.energy += + amount - upgraded.emit() + data.energy += + amount + upgraded.emit() func full_recharge(): - data.energy = max(data.energy, data.max_energy) + data.energy = max(data.energy, data.max_energy) func generate_action_zone(item : Item) -> ActionZone: - var zone = ActionZone.new(item) + var zone = ActionZone.new(item) - if zone.area: - get_parent().add_child(zone.area) + if not get_parent().is_node_ready(): + await get_parent().ready + get_parent().add_child(zone.area) - return zone + return zone -func setup_preview_zone(item : Item) -> ActionZone: - if preview_zone and preview_zone.item == item: - return preview_zone - elif preview_zone: - preview_zone.destroy() - - if item: - preview_zone = generate_action_zone(item) - else: - preview_zone = null - - return preview_zone +func setup_preview_zone(item : Item): + if preview_zone and preview_zone.item == item: + return preview_zone + elif preview_zone: + preview_zone.destroy() + + if item: + preview_zone = await generate_action_zone(item) + else: + preview_zone = null func setup_action_zone(zone_position : Vector2, item: Item) -> ActionZone: - if action_zone: - action_zone.destroy() - action_zone = generate_action_zone(item) - action_zone.move_to_position(zone_position) - last_action_area_movement_timer = 0. - return action_zone + if action_zone: + action_zone.destroy() + action_zone = await generate_action_zone(item) + action_zone.move_to_position(zone_position) + last_action_area_movement_timer = 0. + return action_zone func move_preview_zone(zone_position : Vector2): - if preview_zone: - preview_zone.move_to_position(zone_position) + if preview_zone: + preview_zone.move_to_position(zone_position) class Instruction: - var position : Vector2 + var position : Vector2 - func _init(_pos : Vector2): - position = _pos + func _init(_pos : Vector2): + position = _pos - func can_be_done(player : Player): - return player.global_position.distance_to(position) < player.MAX_REACH + func can_be_done(player : Player): + return player.global_position.distance_to(position) < player.MAX_REACH - func do(_player : Player): - pass - + func do(_player : Player): + pass + class MoveInstruction extends Instruction: - pass + func can_be_done(player : Player): + return player.global_position.distance_to(position) < 10. + class ItemActionInstruction extends Instruction: - var item = Item + var item = Item - func _init(_pos : Vector2, _item : Item): - position = _pos - item = _item - - func can_be_done(player : Player): - return ( - player.global_position.distance_to(position) < player.MAX_REACH - ) - - func do(player : Player): - player.use_item(item) + func _init(_pos : Vector2, _item : Item): + position = _pos + item = _item + + func can_be_done(player : Player): + return ( + player.global_position.distance_to(position) < player.MAX_REACH + ) + + func do(player : Player): + player.use_item(item) class InteractableInstruction extends Instruction: - var interactable = Interactable + var interactable = Interactable - func _init(_interactable : Interactable): - interactable = _interactable - position = interactable.global_position - - func can_be_done(player : Player): - return player.global_position.distance_to(position) < player.MAX_REACH - - func do(player : Player): - interactable.interact(player) + func _init(_interactable : Interactable): + interactable = _interactable + position = interactable.global_position + + func can_be_done(player : Player): + return player.global_position.distance_to(position) < player.MAX_REACH + + func do(player : Player): + interactable.interact(player) class ActionZone: - var item : Item = null - var area : Area2D - var affected_areas : Array[InspectableEntity]= [] + var item : Item = null + var area : Area2D + var affected_areas : Array[InspectableEntity]= [] - func _init(_i : Item): - item = _i - if item and item.get_usage_zone_radius() > 0: - area = Area2D.new() - var collision_shape = CollisionShape2D.new() - var circle_shape = CircleShape2D.new() + func _init(_i : Item): + item = _i + if item and item.get_usage_zone_radius() > 0: + area = Area2D.new() + var collision_shape = CollisionShape2D.new() + var circle_shape = CircleShape2D.new() - circle_shape.radius = item.get_usage_zone_radius() - collision_shape.shape = circle_shape - area.add_child(collision_shape) + circle_shape.radius = item.get_usage_zone_radius() + collision_shape.shape = circle_shape + area.add_child(collision_shape) - func clear_preview_on_affected_area(): - for a in affected_areas: - if a: - a.affect_preview(false) + func clear_preview_on_affected_area(): + for a in affected_areas: + if a: + a.affect_preview(false) - func update_preview_on_affected_area(): - var detected_areas = get_affected_areas() - clear_preview_on_affected_area() - var new_affected_areas : Array[InspectableEntity] = [] - for a in detected_areas: - if a is InspectableEntity and item.get_usage_object_affected(a): - a.affect_preview(true) - new_affected_areas.append(a) - affected_areas = new_affected_areas + func update_preview_on_affected_area(): + var detected_areas = get_affected_areas() + clear_preview_on_affected_area() + var new_affected_areas : Array[InspectableEntity] = [] + for a in detected_areas: + if a is InspectableEntity and item.get_usage_object_affected(a): + a.affect_preview(true) + new_affected_areas.append(a) + affected_areas = new_affected_areas - func get_affected_areas() -> Array[Area2D]: - var empty_array : Array[Area2D] = [] - return empty_array if area == null else area.get_overlapping_areas() + func get_affected_areas() -> Array[Area2D]: + var empty_array : Array[Area2D] = [] + return empty_array if area == null else area.get_overlapping_areas() - func destroy(): - clear_preview_on_affected_area() - if area: - area.queue_free() - - func get_global_position() -> Vector2: - return Vector2.ZERO if area == null else area.global_position + func destroy(): + clear_preview_on_affected_area() + if area: + area.queue_free() + + func get_global_position() -> Vector2: + return Vector2.ZERO if area == null else area.global_position - func move_to_position(pos : Vector2): - if area: - update_preview_on_affected_area() - area.global_position = pos + func move_to_position(pos : Vector2): + if area: + update_preview_on_affected_area() + area.global_position = pos - func get_points_in_zone(point_factor = 10) -> Array[Vector2]: - var points : Array[Vector2] = [] - var radius = item.get_usage_zone_radius() - for x in range(-radius, radius, point_factor): - for y in range(-radius, radius, point_factor): - if Vector2(x, y).length() <= radius: - points.append(area.global_position + Vector2(x, y)) - - return points + func get_tiles() -> Array[Vector2i]: + return Math.get_tiles_in_circle( + get_global_position(), + item.get_usage_zone_radius() + ) \ No newline at end of file diff --git a/entities/player/scripts/player_data.gd b/entities/player/scripts/player_data.gd index ad53d40..cc2ddcc 100644 --- a/entities/player/scripts/player_data.gd +++ b/entities/player/scripts/player_data.gd @@ -3,7 +3,7 @@ class_name PlayerData signal updated(player_data : PlayerData) -const DEFAULT_MAX_ENERGY = 2 +const DEFAULT_MAX_ENERGY = 3 const DEFAULT_INVENTORY_SIZE = 3 @export var max_energy : int = DEFAULT_MAX_ENERGY : diff --git a/entities/underground_loot/assets/sprites/underground_loot.svg b/entities/underground_loot/assets/sprites/underground_loot.svg deleted file mode 100644 index 0be5a5e..0000000 --- a/entities/underground_loot/assets/sprites/underground_loot.svg +++ /dev/null @@ -1,40 +0,0 @@ - - - - - - - - - - - diff --git a/entities/underground_loot/scripts/underground_loot.gd b/entities/underground_loot/scripts/underground_loot.gd deleted file mode 100644 index 3a045cf..0000000 --- a/entities/underground_loot/scripts/underground_loot.gd +++ /dev/null @@ -1,39 +0,0 @@ -extends InspectableEntity -class_name UndergroundLoot - -const AREA_WIDTH = 20 -const LOOTED_ITEM_RANDOM_RANGE = 50 - -@export var item_number : int = 1 - -func pointer_text() -> String: - return tr("BURIED_SEEDS") - -func generate_collision_shape() -> CollisionShape2D: - var collision = CollisionShape2D.new() - var shape = CircleShape2D.new() - shape.radius = AREA_WIDTH - - collision.shape = shape - add_child(collision) - - return collision - -func generate_loot() -> Array[Item]: - var seeds : Array[Item] = [] - if len(GameInfo.game_data.unlocked_plant_types): - seeds.append( - Seed.new( - GameInfo.game_data.unlocked_plant_types.pick_random() - ) - ) - return seeds - - -func dig(): - for item in generate_loot(): - planet.drop_item(item, global_position, LOOTED_ITEM_RANDOM_RANGE) - queue_free() - -func save() -> UndergroundLootData: - return UndergroundLootData.new(self) \ No newline at end of file diff --git a/entities/underground_loot/scripts/underground_loot.gd.uid b/entities/underground_loot/scripts/underground_loot.gd.uid deleted file mode 100644 index b566683..0000000 --- a/entities/underground_loot/scripts/underground_loot.gd.uid +++ /dev/null @@ -1 +0,0 @@ -uid://dfd2hh12155lo diff --git a/entities/underground_loot/scripts/underground_loot_data.gd b/entities/underground_loot/scripts/underground_loot_data.gd deleted file mode 100644 index b75234b..0000000 --- a/entities/underground_loot/scripts/underground_loot_data.gd +++ /dev/null @@ -1,15 +0,0 @@ -extends EntityData -class_name UndergroundLootData - -const SCENE = preload("res://entities/underground_loot/underground_loot.tscn") - -@export var item_number : int - -func _init(e : UndergroundLoot): - position = e.global_position - item_number = e.item_number - -func load() -> Entity: - var loot : UndergroundLoot = (SCENE.instantiate() as UndergroundLoot) - loot.item_number = item_number - return loot diff --git a/entities/underground_loot/scripts/underground_loot_data.gd.uid b/entities/underground_loot/scripts/underground_loot_data.gd.uid deleted file mode 100644 index 865d70e..0000000 --- a/entities/underground_loot/scripts/underground_loot_data.gd.uid +++ /dev/null @@ -1 +0,0 @@ -uid://68plwch6h4f7 diff --git a/entities/underground_loot/underground_loot.tscn b/entities/underground_loot/underground_loot.tscn deleted file mode 100644 index 5b79e09..0000000 --- a/entities/underground_loot/underground_loot.tscn +++ /dev/null @@ -1,21 +0,0 @@ -[gd_scene load_steps=4 format=3 uid="uid://dxjud7bti0na0"] - -[ext_resource type="Script" uid="uid://dfd2hh12155lo" path="res://entities/underground_loot/scripts/underground_loot.gd" id="1_knus5"] -[ext_resource type="Texture2D" uid="uid://bu26h0iqutnky" path="res://entities/underground_loot/assets/sprites/underground_loot.svg" id="2_jfggo"] - -[sub_resource type="CircleShape2D" id="CircleShape2D_knus5"] -radius = 20.09975 - -[node name="UndergroundLootSprites" type="Area2D"] -script = ExtResource("1_knus5") -default_info_title = "BURIED_SEEDS" -default_info_desc = "BURIED_SEEDS_DESC_TEXT" -metadata/_custom_type_script = "uid://d3bk52402ylvl" - -[node name="Sprite2D" type="Sprite2D" parent="."] -modulate = Color(0.286275, 0.219608, 0.313726, 1) -scale = Vector2(0.0806452, 0.0806452) -texture = ExtResource("2_jfggo") - -[node name="CollisionShape2D" type="CollisionShape2D" parent="."] -shape = SubResource("CircleShape2D_knus5") diff --git a/gui/game/tutorial/scripts/tutorial.gd b/gui/game/tutorial/scripts/tutorial.gd index 1c610ff..2f74da1 100644 --- a/gui/game/tutorial/scripts/tutorial.gd +++ b/gui/game/tutorial/scripts/tutorial.gd @@ -8,177 +8,204 @@ var indicators : Array[InGameIndicator] @export var planet : Planet @onready var steps : Array[Step] = [ - TakeShovelStep.new(), - DigLootStep.new(), - TakeSeedStep.new(), - PlantSeedStep.new(), - RechargeStep.new(), - # WaitMaturePlant.new(), - # HarvestMaturePlant.new(), + TakeShovelStep.new(), + DigSeedStep.new(), + TakeSeedStep.new(), + PlantSeedStep.new(), + RechargeStep.new(), + # WaitMaturePlant.new(), + # HarvestMaturePlant.new(), ] var actual_step : Step = null : set = pass_to_step func _process(_d): - if not GameInfo.game_data.tutorial_done: - if not actual_step and planet.data.tutorial_step < len(steps): - destroy_indicators() - pass_to_step(steps[planet.data.tutorial_step]) + if not GameInfo.game_data.tutorial_done: + if not actual_step and planet.data.tutorial_step < len(steps): + destroy_indicators() + pass_to_step(steps[planet.data.tutorial_step]) - if player and actual_step and actual_step.is_step_over(player, planet): - destroy_indicators() - planet.data.tutorial_step += 1 - if planet.data.tutorial_step < len(steps): - pass_to_step(steps[planet.data.tutorial_step]) - else : - GameInfo.game_data.tutorial_done = true + if player and actual_step and actual_step.is_step_over(player, planet): + destroy_indicators() + planet.data.tutorial_step += 1 + if planet.data.tutorial_step < len(steps): + pass_to_step(steps[planet.data.tutorial_step]) + else : + GameInfo.game_data.tutorial_done = true func destroy_indicators(): - for i in indicators: - i.queue_free() - indicators = [] + for i in indicators: + i.queue_free() + indicators = [] func pass_to_step(new_step : Step): - actual_step = new_step - indicators = new_step.generate_indicators(player, planet) - for i in indicators: - add_child(i) + actual_step = new_step + indicators = new_step.generate_indicators(player, planet) + for i in indicators: + add_child(i) class Step: - func generate_indicator(text : String) -> InGameIndicator: - var new_indicator : InGameIndicator = INDICATOR_SCENE.instantiate() - new_indicator.setup( - text - ) - return new_indicator + func generate_indicator(text : String) -> InGameIndicator: + var new_indicator : InGameIndicator = INDICATOR_SCENE.instantiate() + new_indicator.setup( + text + ) + return new_indicator - func generate_indicators(_player : Player, _planet : Planet) -> Array[InGameIndicator]: - return [] - - func is_step_over(_p : Player, _planet : Planet) -> bool: - return true - + func generate_indicators(_player : Player, _planet : Planet) -> Array[InGameIndicator]: + return [] + + func is_step_over(_p : Player, _planet : Planet) -> bool: + return true + class TakeShovelStep extends Step: - func generate_indicators(_p: Player, planet : Planet) -> Array[InGameIndicator]: - for entity in planet.entity_container.get_children(): - if entity is ItemObject and entity.item is Shovel: - var indicator = generate_indicator(tr("TAKE_THE_SHOVEL")) - indicator.follow_entity(entity) - return [ - indicator - ] - printerr("No Shovel found...") - return [] - - func is_step_over(p : Player, _planet : Planet) -> bool: - for item in p.data.inventory.items: - if item is Shovel: - return true - return false + func generate_indicators(_p: Player, planet : Planet) -> Array[InGameIndicator]: + for entity in planet.entity_container.get_children(): + if entity is ItemObject and entity.item is Shovel: + var indicator = generate_indicator(tr("TAKE_THE_SHOVEL")) + indicator.follow_entity(entity) + return [ + indicator + ] + printerr("No Shovel found...") + return [] + + func is_step_over(p : Player, _planet : Planet) -> bool: + for item in p.data.inventory.items: + if item is Shovel: + return true + return false -class DigLootStep extends Step: - func generate_indicators(p: Player, planet : Planet) -> Array[InGameIndicator]: - var closest_loot : UndergroundLoot - var closest_distance = 10000000 +class DigSeedStep extends Step: + func generate_indicators(p: Player, planet : Planet) -> Array[InGameIndicator]: + var closest_seed = null + var limit_distance = 1000 - for entity in planet.entity_container.get_children(): - if entity is UndergroundLoot: - var distance = entity.global_position.distance_to(p.global_position) - if distance < closest_distance: - closest_distance = distance - closest_loot = entity - - if closest_loot: - var indicator = generate_indicator(tr("DIG_UNDERGROUND_LOOT")) - indicator.follow_entity(closest_loot) - return [indicator] - return [] - - func is_step_over(_p : Player, planet : Planet) -> bool: - for entity in planet.entity_container.get_children(): - if entity is ItemObject and entity.item is Seed: - return true - return false + var actual_distance = 100 + var player_tile = Math.get_tile_from_pos(p.global_position) + + while closest_seed == null and actual_distance < limit_distance: + print(player_tile) + for x in range(actual_distance): + for y in range(actual_distance): + var coord = Vector2i(x,y) - Vector2i.ONE * floori(actual_distance/2.) + player_tile + if planet.rock_layer.get_tile_type(coord) == RockLayer.TileType.CRISTAL: + if closest_seed == null or player_tile.distance_to(coord) < player_tile.distance_to(closest_seed): + closest_seed = coord + + actual_distance += 100 + + if closest_seed: + var indicator = generate_indicator(tr("DIG_UNDERGROUND_LOOT")) + indicator.follow_game_position(closest_seed * Planet.TILE_SIZE + Vector2i.ONE * floori(Planet.TILE_SIZE/2.)) + return [indicator] + return [] + + func is_step_over(_p : Player, planet : Planet) -> bool: + for entity in planet.entity_container.get_children(): + if entity is ItemObject and entity.item is Seed: + return true + return false class TakeSeedStep extends Step: - func generate_indicators(_p: Player, planet : Planet) -> Array[InGameIndicator]: - var indicators : Array[InGameIndicator] = [] - for entity in planet.entity_container.get_children(): - if entity is ItemObject and entity.item is Seed: - var indicator = generate_indicator(tr("TAKE_A_SEED")) - indicator.follow_entity(entity) - indicators.append( - indicator - ) - return indicators - - func is_step_over(p : Player, _planet : Planet) -> bool: - for item in p.data.inventory.items: - if item is Seed: - return true - return false + func generate_indicators(_p: Player, planet : Planet) -> Array[InGameIndicator]: + var indicators : Array[InGameIndicator] = [] + for entity in planet.entity_container.get_children(): + if entity is ItemObject and entity.item is Seed: + var indicator = generate_indicator(tr("TAKE_A_SEED")) + indicator.follow_entity(entity) + indicators.append( + indicator + ) + return indicators + + func is_step_over(p : Player, _planet : Planet) -> bool: + for item in p.data.inventory.items: + if item is Seed: + return true + return false class PlantSeedStep extends Step: - func generate_indicators(_p: Player, planet : Planet) -> Array[InGameIndicator]: - var indicator = generate_indicator(tr("PLANT_THE_SEED_IN_DECONTAMINED_ZONE")) - indicator.follow_game_position(Vector2(0,0) + planet.entity_container.global_position) - return [indicator] - - func is_step_over(_p : Player, planet : Planet) -> bool: - for entity in planet.entity_container.get_children(): - if entity is Plant: - return true - return false + func generate_indicators(p: Player, planet : Planet) -> Array[InGameIndicator]: + + var closest_decontamination = null + var limit_distance = 1000 + + var actual_distance = 100 + var player_tile = Math.get_tile_from_pos(p.global_position) + + while closest_decontamination == null and actual_distance < limit_distance: + print(player_tile) + for x in range(actual_distance): + for y in range(actual_distance): + var coord = Vector2i(x,y) - Vector2i.ONE * floori(actual_distance/2.) + player_tile + if planet.decontamination_layer.is_decontamined(coord): + if closest_decontamination == null or player_tile.distance_to(coord) < player_tile.distance_to(closest_decontamination): + closest_decontamination = coord + + actual_distance += 100 + + if closest_decontamination: + var indicator = generate_indicator(tr("PLANT_THE_SEED_IN_DECONTAMINED_ZONE")) + indicator.follow_game_position(closest_decontamination * Planet.TILE_SIZE + Vector2i.ONE * floori(Planet.TILE_SIZE/2.)) + return [indicator] + return [] + + func is_step_over(_p : Player, planet : Planet) -> bool: + for entity in planet.entity_container.get_children(): + if entity is Plant: + return true + return false class RechargeStep extends Step: - func generate_indicators(_p: Player, planet : Planet) -> Array[InGameIndicator]: - for entity in planet.entity_container.get_children(): - var indicator = generate_indicator(tr("RECHARGE_TO_PASS_DAYS")) - indicator.follow_entity(entity) - if entity is TruckRecharge: - return [ - indicator - ] - printerr("No Recharge Station found...") - return [] - - func is_step_over(_p : Player, planet : Planet) -> bool: - if planet == null : - return false - return planet.data.day > 1 + func generate_indicators(_p: Player, planet : Planet) -> Array[InGameIndicator]: + for entity in planet.entity_container.get_children(): + var indicator = generate_indicator(tr("RECHARGE_TO_PASS_DAYS")) + indicator.follow_entity(entity) + if entity is TruckRecharge: + return [ + indicator + ] + printerr("No Recharge Station found...") + return [] + + func is_step_over(_p : Player, planet : Planet) -> bool: + if planet == null : + return false + return planet.data.day > 1 class WaitMaturePlant extends Step: - func generate_indicators(_p: Player, _planet : Planet) -> Array[InGameIndicator]: - return [] - - func is_step_over(_p : Player, planet : Planet) -> bool: - if planet == null : - return false - for entity in planet.entity_container.get_children(): - if entity is Plant and entity.state == Plant.State.MATURE: - return true - return false + func generate_indicators(_p: Player, _planet : Planet) -> Array[InGameIndicator]: + return [] + + func is_step_over(_p : Player, planet : Planet) -> bool: + if planet == null : + return false + for entity in planet.entity_container.get_children(): + if entity is Plant and entity.state == Plant.State.MATURE: + return true + return false class HarvestMaturePlant extends Step: - var mature_plant_number : int = 0 + var mature_plant_number : int = 0 - func generate_indicators(_p: Player, planet : Planet) -> Array[InGameIndicator]: - var indicators : Array[InGameIndicator] = [] - for entity in planet.entity_container.get_children(): - if entity is Plant and entity.state == Plant.State.MATURE: - var indicator = generate_indicator(tr("HARVEST_MATURE_PLANTS_WITH_SHOVEL")) - indicator.follow_entity(entity) - indicators.append( - indicator - ) - mature_plant_number += 1 - return indicators - - func is_step_over(_p : Player, planet : Planet) -> bool: - if planet == null : - return false - var actual_mature_plant_number = 0 - for entity in planet.entity_container.get_children(): - if entity is Plant and entity.state == Plant.State.MATURE: - actual_mature_plant_number += 1 - return mature_plant_number != actual_mature_plant_number + func generate_indicators(_p: Player, planet : Planet) -> Array[InGameIndicator]: + var indicators : Array[InGameIndicator] = [] + for entity in planet.entity_container.get_children(): + if entity is Plant and entity.state == Plant.State.MATURE: + var indicator = generate_indicator(tr("HARVEST_MATURE_PLANTS_WITH_SHOVEL")) + indicator.follow_entity(entity) + indicators.append( + indicator + ) + mature_plant_number += 1 + return indicators + + func is_step_over(_p : Player, planet : Planet) -> bool: + if planet == null : + return false + var actual_mature_plant_number = 0 + for entity in planet.entity_container.get_children(): + if entity is Plant and entity.state == Plant.State.MATURE: + actual_mature_plant_number += 1 + return mature_plant_number != actual_mature_plant_number diff --git a/readme.md b/readme.md index 03f825f..047cb59 100644 --- a/readme.md +++ b/readme.md @@ -85,9 +85,9 @@ Pour ajouter un ou plusieurs fichiers ou modifier du code dans le projet, suivez 4. Créer une demande de modification dans Gitea en suivant [ce lien](https://git.zacharie-guet.fr/zacharie/seeding-planets/pulls), cliquez sur Demande d'ajout et renseignez comme suit - Fusionner dans `main` - Tirer les modification depuis votre branche - - Cliquez sur "Nouvelle Demande d'ajout" + - Cliquez sur "Nouvelle Demande d'ajout" - Editer le titre de la demande d'ajout ou laissez comme telle - - Cliquez sur sur "Créer une demande d'ajout" + - Cliquez sur sur "Créer une demande d'ajout" 5. Communiquez avec l'équipe sur cette demande d'ajout, et appliquer la si vous avez l'aval de tous le monde (ou du moins des concernés du changement), en cliquant sur "Rebaser et avancer rapidement" > Pour actualiser votre dépôt local, replacez vous sur `main` et récupérer les nouvelles modifications diff --git a/stages/planet_run/planet_run.tscn b/stages/planet_run/planet_run.tscn index 5fde303..9fc577d 100644 --- a/stages/planet_run/planet_run.tscn +++ b/stages/planet_run/planet_run.tscn @@ -27,7 +27,7 @@ metadata/_edit_use_anchors_ = true visible = false [node name="Tutorial" parent="CanvasLayer" node_paths=PackedStringArray("player", "planet") instance=ExtResource("5_orelw")] -player = NodePath("../../Entities/Player") +player = NodePath("../../Planet/Entities/Player") planet = NodePath("../../Planet") [node name="BaseIndicator" parent="CanvasLayer" node_paths=PackedStringArray("player") instance=ExtResource("5_gisiu")] @@ -36,28 +36,28 @@ offset_bottom = 91.0 size_flags_horizontal = 4 size_flags_vertical = 4 script = ExtResource("6_cnjsq") -player = NodePath("../../Entities/Player") +player = NodePath("../../Planet/Entities/Player") -[node name="Entities" type="Node2D" parent="."] -y_sort_enabled = true - -[node name="Player" parent="Entities" instance=ExtResource("4_g33f4")] -position = Vector2(33, -75) - -[node name="TruckLadder" parent="Entities" instance=ExtResource("9_gisiu")] -position = Vector2(50, -135) - -[node name="TruckRecharge" parent="Entities" instance=ExtResource("10_cnjsq")] -position = Vector2(-46, -152) - -[node name="Planet" parent="." node_paths=PackedStringArray("quota_reward", "import_entities_from_node") instance=ExtResource("8_t31p7")] +[node name="Planet" parent="." node_paths=PackedStringArray("quota_reward", "entity_container") instance=ExtResource("8_t31p7")] loot_item_number = Array[int]([1]) quota_reward = NodePath("../Reward") -import_entities_from_node = NodePath("../Entities") +entity_container = NodePath("Entities") + +[node name="Entities" type="Node2D" parent="Planet"] +y_sort_enabled = true + +[node name="Player" parent="Planet/Entities" instance=ExtResource("4_g33f4")] +position = Vector2(2, 0) + +[node name="TruckLadder" parent="Planet/Entities" instance=ExtResource("9_gisiu")] +position = Vector2(50, -135) + +[node name="TruckRecharge" parent="Planet/Entities" instance=ExtResource("10_cnjsq")] +position = Vector2(-46, -152) [node name="Camera" parent="." node_paths=PackedStringArray("following") instance=ExtResource("16_m18ms")] position = Vector2(2.22, 0) -following = NodePath("../Entities/Player") +following = NodePath("../Planet/Entities/Player") [connection signal="day_limit_exceed" from="Planet" to="CanvasLayer/Win" method="_on_planet_day_limit_exceed"] [connection signal="pass_day_ended" from="Planet" to="RootGui" method="_on_planet_pass_day_ended"] diff --git a/stages/terrain/planet/assets/textures/blue_rect.png b/stages/terrain/planet/assets/textures/blue_rect.png new file mode 100644 index 0000000000000000000000000000000000000000..1f4b9f19f9d6f90dea89fc9fb2a01a09cfcf3667 GIT binary patch literal 264 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7TyC=oCO|{#S9F5he4R}c>anMprB-l zYeY$Kep*R+Vo@qXd3m{BW?pu2a$-TMUVc&f>~}U&Kt)qMT^vIy=DfY&D9E6|b6`Vb z{ds3MITNlbTjSlIH?C&h!uEn;Eu)n~b_3r9sReZ6$_1J;)wM@>hyfkQ;OXk;vd$@? F2>>APRG0t& literal 0 HcmV?d00001 diff --git a/stages/terrain/planet/assets/textures/blue_rect.png.import b/stages/terrain/planet/assets/textures/blue_rect.png.import new file mode 100644 index 0000000..7baf2d6 --- /dev/null +++ b/stages/terrain/planet/assets/textures/blue_rect.png.import @@ -0,0 +1,40 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://cd62k5urdpw3i" +path="res://.godot/imported/blue_rect.png-d2bf0f89bd9a318145a3150338e6ed14.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://stages/terrain/planet/assets/textures/blue_rect.png" +dest_files=["res://.godot/imported/blue_rect.png-d2bf0f89bd9a318145a3150338e6ed14.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/uastc_level=0 +compress/rdo_quality_loss=0.0 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/channel_remap/red=0 +process/channel_remap/green=1 +process/channel_remap/blue=2 +process/channel_remap/alpha=3 +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/stages/terrain/planet/assets/textures/green_rect.png b/stages/terrain/planet/assets/textures/green_rect.png new file mode 100644 index 0000000000000000000000000000000000000000..212e6680eb7c6e7eaec905ec3418bd555d409c5e GIT binary patch literal 264 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7TyC=oCO|{#S9F5he4R}c>anMprB-l zYeY$Kep*R+Vo@qXd3m{BW?pu2a$-TMUVc&f>~}U&Kt)qMT^vIy=DfY&D9E6|b6`Vb z{ds3MITNlb+s&IlZ(Pm1h3y5yT1G2}>;}FIQVZzBl?yUss_RWWzZK{}22WQ%mvv4F FO#pP%Rz&~+ literal 0 HcmV?d00001 diff --git a/stages/terrain/planet/assets/textures/green_rect.png.import b/stages/terrain/planet/assets/textures/green_rect.png.import new file mode 100644 index 0000000..0a8f4f1 --- /dev/null +++ b/stages/terrain/planet/assets/textures/green_rect.png.import @@ -0,0 +1,40 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://bvangyp301tsp" +path="res://.godot/imported/green_rect.png-2cde15567ae810adb5864776d70ef438.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://stages/terrain/planet/assets/textures/green_rect.png" +dest_files=["res://.godot/imported/green_rect.png-2cde15567ae810adb5864776d70ef438.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/uastc_level=0 +compress/rdo_quality_loss=0.0 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/channel_remap/red=0 +process/channel_remap/green=1 +process/channel_remap/blue=2 +process/channel_remap/alpha=3 +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/stages/terrain/planet/assets/textures/green_tiles.png b/stages/terrain/planet/assets/textures/green_tiles.png new file mode 100644 index 0000000000000000000000000000000000000000..490fe5732dc1f243d40cf4ab6cdbd6660f349381 GIT binary patch literal 10664 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 SE#Q_VWTa=NTl$Cdz5fFCo;y1L literal 0 HcmV?d00001 diff --git a/stages/terrain/planet/assets/textures/green_tiles.png.import b/stages/terrain/planet/assets/textures/green_tiles.png.import new file mode 100644 index 0000000..2c4c1c0 --- /dev/null +++ b/stages/terrain/planet/assets/textures/green_tiles.png.import @@ -0,0 +1,40 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://yl4dg6gerykb" +path="res://.godot/imported/green_tiles.png-24cb2e8d3d77d0f127478dc375fc7791.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://stages/terrain/planet/assets/textures/green_tiles.png" +dest_files=["res://.godot/imported/green_tiles.png-24cb2e8d3d77d0f127478dc375fc7791.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/uastc_level=0 +compress/rdo_quality_loss=0.0 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/channel_remap/red=0 +process/channel_remap/green=1 +process/channel_remap/blue=2 +process/channel_remap/alpha=3 +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/stages/terrain/planet/assets/textures/red_rect.png b/stages/terrain/planet/assets/textures/red_rect.png new file mode 100644 index 0000000000000000000000000000000000000000..ab11b0f3005fd61d8371f138094a2e0326fa3a97 GIT binary patch literal 264 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7TyC=oCO|{#S9F5he4R}c>anMprB-l zYeY$Kep*R+Vo@qXd3m{BW?pu2a$-TMUVc&f>~}U&Kt)qMT^vIy=DfY&D9E6|b6`Vb z{ds3MITNlbTkFlAH?C&h!uEn;Eu)n~b_3r9sReZ6$_1M;)jhZw=mvBkgQu&X%Q~lo FCIB%8RjU91 literal 0 HcmV?d00001 diff --git a/stages/terrain/planet/assets/textures/red_rect.png.import b/stages/terrain/planet/assets/textures/red_rect.png.import new file mode 100644 index 0000000..84486f5 --- /dev/null +++ b/stages/terrain/planet/assets/textures/red_rect.png.import @@ -0,0 +1,40 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://bi08trir23od2" +path="res://.godot/imported/red_rect.png-2c97ffc5003cb92590914f11ff4ed41d.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://stages/terrain/planet/assets/textures/red_rect.png" +dest_files=["res://.godot/imported/red_rect.png-2c97ffc5003cb92590914f11ff4ed41d.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/uastc_level=0 +compress/rdo_quality_loss=0.0 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/channel_remap/red=0 +process/channel_remap/green=1 +process/channel_remap/blue=2 +process/channel_remap/alpha=3 +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/stages/terrain/planet/assets/textures/red_tiles.png b/stages/terrain/planet/assets/textures/red_tiles.png new file mode 100644 index 0000000000000000000000000000000000000000..adce628f88790e603a6b0eb8a24bd441084a8d79 GIT binary patch literal 10587 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

aE5P-r$MG%PonTR;= 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 TZH}+d00000NkvXXu0mjfqaqhp literal 0 HcmV?d00001 diff --git a/stages/terrain/planet/assets/textures/rock_cristal_texture.png.import b/stages/terrain/planet/assets/textures/rock_cristal_texture.png.import new file mode 100644 index 0000000..1289aa3 --- /dev/null +++ b/stages/terrain/planet/assets/textures/rock_cristal_texture.png.import @@ -0,0 +1,40 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://02nuoqleo4yu" +path="res://.godot/imported/rock_cristal_texture.png-33ee9694873f9aa2e8604c502b12dee5.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://stages/terrain/planet/assets/textures/rock_cristal_texture.png" +dest_files=["res://.godot/imported/rock_cristal_texture.png-33ee9694873f9aa2e8604c502b12dee5.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/uastc_level=0 +compress/rdo_quality_loss=0.0 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/channel_remap/red=0 +process/channel_remap/green=1 +process/channel_remap/blue=2 +process/channel_remap/alpha=3 +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/stages/terrain/planet/assets/textures/round_red_tiles.png b/stages/terrain/planet/assets/textures/round_red_tiles.png new file mode 100644 index 0000000000000000000000000000000000000000..8986d1a8ef2198b7008e1710976c0fc30fddab84 GIT binary patch literal 5314 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 literal 0 HcmV?d00001 diff --git a/stages/terrain/planet/assets/textures/round_red_tiles.png.import b/stages/terrain/planet/assets/textures/round_red_tiles.png.import new file mode 100644 index 0000000..cd33a85 --- /dev/null +++ b/stages/terrain/planet/assets/textures/round_red_tiles.png.import @@ -0,0 +1,40 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://bmdb63witojeg" +path="res://.godot/imported/round_red_tiles.png-7f838ac911f20be784ac93821bd5d5ba.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://stages/terrain/planet/assets/textures/round_red_tiles.png" +dest_files=["res://.godot/imported/round_red_tiles.png-7f838ac911f20be784ac93821bd5d5ba.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/uastc_level=0 +compress/rdo_quality_loss=0.0 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/channel_remap/red=0 +process/channel_remap/green=1 +process/channel_remap/blue=2 +process/channel_remap/alpha=3 +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/stages/terrain/planet/planet.tscn b/stages/terrain/planet/planet.tscn index 16effc2..a92f881 100644 --- a/stages/terrain/planet/planet.tscn +++ b/stages/terrain/planet/planet.tscn @@ -1,48 +1,6 @@ -[gd_scene load_steps=10 format=3 uid="uid://tsi5j1uxppa4"] +[gd_scene load_steps=2 format=3 uid="uid://tsi5j1uxppa4"] [ext_resource type="Script" uid="uid://d1mp5sguc0b6u" path="res://stages/terrain/planet/scripts/planet.gd" id="1_y7d8a"] -[ext_resource type="Shader" uid="uid://bglep64ppn74p" path="res://common/vfx/materials/shaders/textures_data_filter.gdshader" id="3_6qoee"] - -[sub_resource type="FastNoiseLite" id="FastNoiseLite_3v4ta"] -frequency = 0.04 -offset = Vector3(0, 10, 0) -fractal_weighted_strength = 1.0 - -[sub_resource type="NoiseTexture2D" id="NoiseTexture2D_7jtco"] -width = 50 -height = 50 -noise = SubResource("FastNoiseLite_3v4ta") -seamless_blend_skirt = 0.0 - -[sub_resource type="Gradient" id="Gradient_ydx6d"] -colors = PackedColorArray(1, 1, 1, 1, 1, 1, 1, 1) - -[sub_resource type="GradientTexture1D" id="GradientTexture1D_6cs2h"] -gradient = SubResource("Gradient_ydx6d") -width = 1 - -[sub_resource type="Gradient" id="Gradient_qxify"] -offsets = PackedFloat32Array(0) -colors = PackedColorArray(0, 0, 0, 1) - -[sub_resource type="GradientTexture1D" id="GradientTexture1D_sd6ll"] -gradient = SubResource("Gradient_qxify") -width = 1 - -[sub_resource type="ShaderMaterial" id="ShaderMaterial_hyapw"] -shader = ExtResource("3_6qoee") -shader_parameter/data_texture = SubResource("NoiseTexture2D_7jtco") -shader_parameter/data_texture_size = Vector2(120, 120) -shader_parameter/data_texture_threshold = 0.5 -shader_parameter/texture_0 = SubResource("GradientTexture1D_6cs2h") -shader_parameter/texture_1 = SubResource("GradientTexture1D_sd6ll") -shader_parameter/texture_scale = 5.0 [node name="Planet" type="Node2D"] script = ExtResource("1_y7d8a") - -[node name="Polygon2D2" type="Polygon2D" parent="."] -visible = false -material = SubResource("ShaderMaterial_hyapw") -position = Vector2(-10, -10) -polygon = PackedVector2Array(10, 10, 10, 110, 110, 110, 110, 10) diff --git a/stages/terrain/planet/resources/materials/contamination_planet_tilemap.tres b/stages/terrain/planet/resources/materials/contamination_planet_tilemap.tres new file mode 100644 index 0000000..81cd832 --- /dev/null +++ b/stages/terrain/planet/resources/materials/contamination_planet_tilemap.tres @@ -0,0 +1,9 @@ +[gd_resource type="ShaderMaterial" load_steps=3 format=3 uid="uid://b3vnia5tb6pil"] + +[ext_resource type="Shader" uid="uid://q5isn3rwrir8" path="res://common/vfx/materials/shaders/texture_color_filter.gdshader" id="1_4m73r"] +[ext_resource type="Texture2D" uid="uid://bnrjnvceprxfn" path="res://stages/terrain/planet/assets/textures/garden_background_texture.png" id="2_4m73r"] + +[resource] +shader = ExtResource("1_4m73r") +shader_parameter/red_overlay_tex = ExtResource("2_4m73r") +shader_parameter/scale = 0.006944444 diff --git a/stages/terrain/planet/resources/materials/decontamination_planet_tilemap.tres b/stages/terrain/planet/resources/materials/decontamination_planet_tilemap.tres new file mode 100644 index 0000000..b06aae2 --- /dev/null +++ b/stages/terrain/planet/resources/materials/decontamination_planet_tilemap.tres @@ -0,0 +1,9 @@ +[gd_resource type="ShaderMaterial" load_steps=3 format=3 uid="uid://85ap1buim1ha"] + +[ext_resource type="Shader" uid="uid://q5isn3rwrir8" path="res://common/vfx/materials/shaders/texture_color_filter.gdshader" id="1_v8wor"] +[ext_resource type="Texture2D" uid="uid://c3t26nlbnkxg7" path="res://stages/terrain/planet/assets/textures/garden_decontamined_background_texture.png" id="2_v8wor"] + +[resource] +shader = ExtResource("1_v8wor") +shader_parameter/red_overlay_tex = ExtResource("2_v8wor") +shader_parameter/scale = 0.006944444 diff --git a/stages/terrain/planet/resources/materials/ground_planet_tilemap.tres b/stages/terrain/planet/resources/materials/ground_planet_tilemap.tres new file mode 100644 index 0000000..ef138ce --- /dev/null +++ b/stages/terrain/planet/resources/materials/ground_planet_tilemap.tres @@ -0,0 +1,9 @@ +[gd_resource type="ShaderMaterial" load_steps=3 format=3 uid="uid://dpxu8yeee4qi1"] + +[ext_resource type="Shader" uid="uid://q5isn3rwrir8" path="res://common/vfx/materials/shaders/texture_color_filter.gdshader" id="1_6vcas"] +[ext_resource type="Texture2D" uid="uid://bnrjnvceprxfn" path="res://stages/terrain/planet/assets/textures/garden_background_texture.png" id="2_x0w2y"] + +[resource] +shader = ExtResource("1_6vcas") +shader_parameter/red_overlay_tex = ExtResource("2_x0w2y") +shader_parameter/scale = 0.006944444 diff --git a/stages/terrain/planet/resources/materials/rock_planet_tilemap.tres b/stages/terrain/planet/resources/materials/rock_planet_tilemap.tres new file mode 100644 index 0000000..ce8a0ab --- /dev/null +++ b/stages/terrain/planet/resources/materials/rock_planet_tilemap.tres @@ -0,0 +1,11 @@ +[gd_resource type="ShaderMaterial" load_steps=4 format=3 uid="uid://d365ovfmi3d0s"] + +[ext_resource type="Shader" uid="uid://q5isn3rwrir8" path="res://common/vfx/materials/shaders/texture_color_filter.gdshader" id="1_xr5ia"] +[ext_resource type="Texture2D" uid="uid://beqx4rmgthkql" path="res://stages/terrain/planet/assets/textures/rock_background_texture.png" id="2_ieaec"] +[ext_resource type="Texture2D" uid="uid://02nuoqleo4yu" path="res://stages/terrain/planet/assets/textures/rock_cristal_texture.png" id="2_sc014"] + +[resource] +shader = ExtResource("1_xr5ia") +shader_parameter/red_overlay_tex = ExtResource("2_ieaec") +shader_parameter/green_overlay_tex = ExtResource("2_sc014") +shader_parameter/scale = 0.006944444 diff --git a/stages/terrain/planet/resources/planet_tileset.tres b/stages/terrain/planet/resources/planet_tileset.tres new file mode 100644 index 0000000..5b5d74e --- /dev/null +++ b/stages/terrain/planet/resources/planet_tileset.tres @@ -0,0 +1,1213 @@ +[gd_resource type="TileSet" load_steps=10 format=3 uid="uid://b3m7ve0adlxi1"] + +[ext_resource type="Texture2D" uid="uid://yl4dg6gerykb" path="res://stages/terrain/planet/assets/textures/green_tiles.png" id="1_gjijh"] +[ext_resource type="Texture2D" uid="uid://bi08trir23od2" path="res://stages/terrain/planet/assets/textures/red_rect.png" id="1_hqeut"] +[ext_resource type="Texture2D" uid="uid://ddecvei4l62gn" path="res://stages/terrain/planet/assets/textures/red_tiles.png" id="1_uvbas"] +[ext_resource type="Texture2D" uid="uid://bmdb63witojeg" path="res://stages/terrain/planet/assets/textures/round_red_tiles.png" id="5_skkk4"] + +[sub_resource type="TileSetAtlasSource" id="TileSetAtlasSource_f4n6l"] +texture = ExtResource("1_hqeut") +texture_region_size = Vector2i(64, 64) +0:0/0 = 0 + +[sub_resource type="TileSetAtlasSource" id="TileSetAtlasSource_rklv6"] +resource_name = "GreenPhysic" +texture = ExtResource("1_gjijh") +texture_region_size = Vector2i(64, 64) +0:0/0 = 0 +0:0/0/terrain_set = 0 +0:0/0/terrain = 1 +0:0/0/physics_layer_0/polygon_0/points = PackedVector2Array(-16, -16, 16, -16, 16, 32, -16, 32) +0:0/0/terrains_peering_bit/bottom_side = 1 +1:0/0 = 0 +1:0/0/terrain_set = 0 +1:0/0/terrain = 1 +1:0/0/physics_layer_0/polygon_0/points = PackedVector2Array(-16, -16, 32, -16, 32, 16, 16, 32, -16, 32) +1:0/0/terrains_peering_bit/right_side = 1 +1:0/0/terrains_peering_bit/bottom_side = 1 +2:0/0 = 0 +2:0/0/terrain_set = 0 +2:0/0/terrain = 1 +2:0/0/physics_layer_0/polygon_0/points = PackedVector2Array(-32, -16, 32, -16, 32, 16, 16, 32, -16, 32, -32, 16) +2:0/0/terrains_peering_bit/right_side = 1 +2:0/0/terrains_peering_bit/bottom_side = 1 +2:0/0/terrains_peering_bit/left_side = 1 +3:0/0 = 0 +3:0/0/terrain_set = 0 +3:0/0/terrain = 1 +3:0/0/physics_layer_0/polygon_0/points = PackedVector2Array(-32, -16, 16, -16, 16, 32, -16, 32, -32, 16.369743) +3:0/0/terrains_peering_bit/bottom_side = 1 +3:0/0/terrains_peering_bit/left_side = 1 +4:0/0 = 0 +4:0/0/terrain_set = 0 +4:0/0/terrain = 1 +4:0/0/physics_layer_0/polygon_0/points = PackedVector2Array(-32, -32, 16, -32, 32, -16, 32, 15.240791, 16, 32, -16, 32, -32, 19.192108) +4:0/0/terrains_peering_bit/right_side = 1 +4:0/0/terrains_peering_bit/bottom_side = 1 +4:0/0/terrains_peering_bit/left_side = 1 +4:0/0/terrains_peering_bit/top_left_corner = 1 +4:0/0/terrains_peering_bit/top_side = 1 +5:0/0 = 0 +5:0/0/terrain_set = 0 +5:0/0/terrain = 1 +5:0/0/physics_layer_0/polygon_0/points = PackedVector2Array(-32, -16, 32, -16, 32, 32, -16, 32, -32, 16) +5:0/0/terrains_peering_bit/right_side = 1 +5:0/0/terrains_peering_bit/bottom_right_corner = 1 +5:0/0/terrains_peering_bit/bottom_side = 1 +5:0/0/terrains_peering_bit/left_side = 1 +6:0/0 = 0 +6:0/0/terrain_set = 0 +6:0/0/terrain = 1 +6:0/0/physics_layer_0/polygon_0/points = PackedVector2Array(-32, -16, 32, -16, 32, 16, 16, 32, -32, 32) +6:0/0/terrains_peering_bit/right_side = 1 +6:0/0/terrains_peering_bit/bottom_side = 1 +6:0/0/terrains_peering_bit/bottom_left_corner = 1 +6:0/0/terrains_peering_bit/left_side = 1 +7:0/0 = 0 +7:0/0/terrain_set = 0 +7:0/0/terrain = 1 +7:0/0/physics_layer_0/polygon_0/points = PackedVector2Array(-32, -16, -16, -32, 32, -32, 32, 16, 16, 32, -16, 32, -32, 16) +7:0/0/terrains_peering_bit/right_side = 1 +7:0/0/terrains_peering_bit/bottom_side = 1 +7:0/0/terrains_peering_bit/left_side = 1 +7:0/0/terrains_peering_bit/top_side = 1 +7:0/0/terrains_peering_bit/top_right_corner = 1 +8:0/0 = 0 +8:0/0/terrain_set = 0 +8:0/0/terrain = 1 +8:0/0/physics_layer_0/polygon_0/points = PackedVector2Array(-16, -16, 32, -16, 32, 32, -16, 32) +8:0/0/terrains_peering_bit/right_side = 1 +8:0/0/terrains_peering_bit/bottom_right_corner = 1 +8:0/0/terrains_peering_bit/bottom_side = 1 +9:0/0 = 0 +9:0/0/terrain_set = 0 +9:0/0/terrain = 1 +9:0/0/physics_layer_0/polygon_0/points = PackedVector2Array(-32, -16, -16, -32, 16, -32, 32, -16, 32, 32, -32, 32) +9:0/0/terrains_peering_bit/right_side = 1 +9:0/0/terrains_peering_bit/bottom_right_corner = 1 +9:0/0/terrains_peering_bit/bottom_side = 1 +9:0/0/terrains_peering_bit/bottom_left_corner = 1 +9:0/0/terrains_peering_bit/left_side = 1 +9:0/0/terrains_peering_bit/top_side = 1 +10:0/0 = 0 +10:0/0/terrain_set = 0 +10:0/0/terrain = 1 +10:0/0/physics_layer_0/polygon_0/points = PackedVector2Array(-32, -16, 32, -16, 32, 32, -32, 32) +10:0/0/terrains_peering_bit/right_side = 1 +10:0/0/terrains_peering_bit/bottom_right_corner = 1 +10:0/0/terrains_peering_bit/bottom_side = 1 +10:0/0/terrains_peering_bit/bottom_left_corner = 1 +10:0/0/terrains_peering_bit/left_side = 1 +11:0/0 = 0 +11:0/0/terrain_set = 0 +11:0/0/terrain = 1 +11:0/0/physics_layer_0/polygon_0/points = PackedVector2Array(-32, -16, 16, -16, 16, 32, -32, 32) +11:0/0/terrains_peering_bit/bottom_side = 1 +11:0/0/terrains_peering_bit/bottom_left_corner = 1 +11:0/0/terrains_peering_bit/left_side = 1 +0:1/0 = 0 +0:1/0/terrain_set = 0 +0:1/0/terrain = 1 +0:1/0/physics_layer_0/polygon_0/points = PackedVector2Array(-16, -32, 16, -32, 16, 32, -16, 32) +0:1/0/terrains_peering_bit/bottom_side = 1 +0:1/0/terrains_peering_bit/top_side = 1 +1:1/0 = 0 +1:1/0/terrain_set = 0 +1:1/0/terrain = 1 +1:1/0/physics_layer_0/polygon_0/points = PackedVector2Array(-16, -32, 16, -32, 32, -16, 32, 14.111847, 16, 32, -16, 32) +1:1/0/terrains_peering_bit/right_side = 1 +1:1/0/terrains_peering_bit/bottom_side = 1 +1:1/0/terrains_peering_bit/top_side = 1 +2:1/0 = 0 +2:1/0/terrain_set = 0 +2:1/0/terrain = 1 +2:1/0/physics_layer_0/polygon_0/points = PackedVector2Array(-32, -16, -16, -32, 16.369743, -32, 32, -16, 32, 16.369743, 16, 32, -16, 32, -32, 18.62764) +2:1/0/terrains_peering_bit/right_side = 1 +2:1/0/terrains_peering_bit/bottom_side = 1 +2:1/0/terrains_peering_bit/left_side = 1 +2:1/0/terrains_peering_bit/top_side = 1 +3:1/0 = 0 +3:1/0/terrain_set = 0 +3:1/0/terrain = 1 +3:1/0/physics_layer_0/polygon_0/points = PackedVector2Array(-16, -32, 16, -32, 16, 32, -16, 32, -32, 16, -32, -16) +3:1/0/terrains_peering_bit/bottom_side = 1 +3:1/0/terrains_peering_bit/left_side = 1 +3:1/0/terrains_peering_bit/top_side = 1 +4:1/0 = 0 +4:1/0/terrain_set = 0 +4:1/0/terrain = 1 +4:1/0/physics_layer_0/polygon_0/points = PackedVector2Array(-16, -32, 16, -32, 32, -16, 32, 32, -16, 32) +4:1/0/terrains_peering_bit/right_side = 1 +4:1/0/terrains_peering_bit/bottom_right_corner = 1 +4:1/0/terrains_peering_bit/bottom_side = 1 +4:1/0/terrains_peering_bit/top_side = 1 +5:1/0 = 0 +5:1/0/terrain_set = 0 +5:1/0/terrain = 1 +5:1/0/physics_layer_0/polygon_0/points = PackedVector2Array(-32, -16, -15.240795, -32, 32, -32, 32, 32, -32, 32) +5:1/0/terrains_peering_bit/right_side = 1 +5:1/0/terrains_peering_bit/bottom_right_corner = 1 +5:1/0/terrains_peering_bit/bottom_side = 1 +5:1/0/terrains_peering_bit/bottom_left_corner = 1 +5:1/0/terrains_peering_bit/left_side = 1 +5:1/0/terrains_peering_bit/top_side = 1 +5:1/0/terrains_peering_bit/top_right_corner = 1 +6:1/0 = 0 +6:1/0/terrain_set = 0 +6:1/0/terrain = 1 +6:1/0/physics_layer_0/polygon_0/points = PackedVector2Array(-32, -32, 16, -32, 32, -16, 32, 32, -32, 32) +6:1/0/terrains_peering_bit/right_side = 1 +6:1/0/terrains_peering_bit/bottom_right_corner = 1 +6:1/0/terrains_peering_bit/bottom_side = 1 +6:1/0/terrains_peering_bit/bottom_left_corner = 1 +6:1/0/terrains_peering_bit/left_side = 1 +6:1/0/terrains_peering_bit/top_left_corner = 1 +6:1/0/terrains_peering_bit/top_side = 1 +7:1/0 = 0 +7:1/0/terrain_set = 0 +7:1/0/terrain = 1 +7:1/0/physics_layer_0/polygon_0/points = PackedVector2Array(-32, -16, -16, -32, 16, -32, 16, 32, -32, 32) +7:1/0/terrains_peering_bit/bottom_side = 1 +7:1/0/terrains_peering_bit/bottom_left_corner = 1 +7:1/0/terrains_peering_bit/left_side = 1 +7:1/0/terrains_peering_bit/top_side = 1 +8:1/0 = 0 +8:1/0/terrain_set = 0 +8:1/0/terrain = 1 +8:1/0/physics_layer_0/polygon_0/points = PackedVector2Array(-16, -32, 32, -32, 32, 32, -16, 32) +8:1/0/terrains_peering_bit/right_side = 1 +8:1/0/terrains_peering_bit/bottom_right_corner = 1 +8:1/0/terrains_peering_bit/bottom_side = 1 +8:1/0/terrains_peering_bit/top_side = 1 +8:1/0/terrains_peering_bit/top_right_corner = 1 +9:1/0 = 0 +9:1/0/terrain_set = 0 +9:1/0/terrain = 1 +9:1/0/physics_layer_0/polygon_0/points = PackedVector2Array(-32, -16, -16, -32, 32, -32, 32, 16, 16, 32, -32, 32) +9:1/0/terrains_peering_bit/right_side = 1 +9:1/0/terrains_peering_bit/bottom_side = 1 +9:1/0/terrains_peering_bit/bottom_left_corner = 1 +9:1/0/terrains_peering_bit/left_side = 1 +9:1/0/terrains_peering_bit/top_side = 1 +9:1/0/terrains_peering_bit/top_right_corner = 1 +10:1/0 = 0 +10:1/0/terrain_set = 0 +11:1/0 = 0 +11:1/0/terrain_set = 0 +11:1/0/terrain = 1 +11:1/0/physics_layer_0/polygon_0/points = PackedVector2Array(-32, -32, 16, -32, 32, -16, 32, 16, 16, 32, -32, 32) +11:1/0/terrains_peering_bit/right_side = 1 +11:1/0/terrains_peering_bit/bottom_side = 1 +11:1/0/terrains_peering_bit/bottom_left_corner = 1 +11:1/0/terrains_peering_bit/left_side = 1 +11:1/0/terrains_peering_bit/top_left_corner = 1 +11:1/0/terrains_peering_bit/top_side = 1 +0:2/0 = 0 +0:2/0/terrain_set = 0 +0:2/0/terrain = 1 +0:2/0/physics_layer_0/polygon_0/points = PackedVector2Array(-16, -32, 16, -32, 16, 16, -16, 16) +0:2/0/terrains_peering_bit/top_side = 1 +1:2/0 = 0 +1:2/0/terrain_set = 0 +1:2/0/terrain = 1 +1:2/0/physics_layer_0/polygon_0/points = PackedVector2Array(-16, -32, 16, -32, 32, -16.934216, 32, 16, -16, 16) +1:2/0/terrains_peering_bit/right_side = 1 +1:2/0/terrains_peering_bit/top_side = 1 +2:2/0 = 0 +2:2/0/terrain_set = 0 +2:2/0/terrain = 1 +2:2/0/physics_layer_0/polygon_0/points = PackedVector2Array(-16, -32, 16, -32, 32, -17.498692, 32, 16, -32, 16, -32, -16.369743) +2:2/0/terrains_peering_bit/right_side = 1 +2:2/0/terrains_peering_bit/left_side = 1 +2:2/0/terrains_peering_bit/top_side = 1 +3:2/0 = 0 +3:2/0/terrain_set = 0 +3:2/0/terrain = 1 +3:2/0/physics_layer_0/polygon_0/points = PackedVector2Array(-32, -16, -16, -32, 16, -32, 16, 16, -32, 16) +3:2/0/terrains_peering_bit/left_side = 1 +3:2/0/terrains_peering_bit/top_side = 1 +4:2/0 = 0 +4:2/0/terrain_set = 0 +4:2/0/terrain = 1 +4:2/0/physics_layer_0/polygon_0/points = PackedVector2Array(-16, -32, 32, -32, 32, 16, 16, 32, -16, 32) +4:2/0/terrains_peering_bit/right_side = 1 +4:2/0/terrains_peering_bit/bottom_side = 1 +4:2/0/terrains_peering_bit/top_side = 1 +4:2/0/terrains_peering_bit/top_right_corner = 1 +5:2/0 = 0 +5:2/0/terrain_set = 0 +5:2/0/terrain = 1 +5:2/0/physics_layer_0/polygon_0/points = PackedVector2Array(-32, -32, 32, -32, 32, 32, -16.369743, 32, -32, 16) +5:2/0/terrains_peering_bit/right_side = 1 +5:2/0/terrains_peering_bit/bottom_right_corner = 1 +5:2/0/terrains_peering_bit/bottom_side = 1 +5:2/0/terrains_peering_bit/left_side = 1 +5:2/0/terrains_peering_bit/top_left_corner = 1 +5:2/0/terrains_peering_bit/top_side = 1 +5:2/0/terrains_peering_bit/top_right_corner = 1 +6:2/0 = 0 +6:2/0/terrain_set = 0 +6:2/0/terrain = 1 +6:2/0/physics_layer_0/polygon_0/points = PackedVector2Array(-32, -32, 32, -32, 32, 16, 17.498688, 32, -32, 32) +6:2/0/terrains_peering_bit/right_side = 1 +6:2/0/terrains_peering_bit/bottom_side = 1 +6:2/0/terrains_peering_bit/bottom_left_corner = 1 +6:2/0/terrains_peering_bit/left_side = 1 +6:2/0/terrains_peering_bit/top_left_corner = 1 +6:2/0/terrains_peering_bit/top_side = 1 +6:2/0/terrains_peering_bit/top_right_corner = 1 +7:2/0 = 0 +7:2/0/terrain_set = 0 +7:2/0/terrain = 1 +7:2/0/physics_layer_0/polygon_0/points = PackedVector2Array(-32, -32, 16, -32, 16, 32, -16, 32, -32, 16) +7:2/0/terrains_peering_bit/bottom_side = 1 +7:2/0/terrains_peering_bit/left_side = 1 +7:2/0/terrains_peering_bit/top_left_corner = 1 +7:2/0/terrains_peering_bit/top_side = 1 +8:2/0 = 0 +8:2/0/terrain_set = 0 +8:2/0/terrain = 1 +8:2/0/physics_layer_0/polygon_0/points = PackedVector2Array(-32, -16, -16, -32, 32, -32, 32, 32, -16, 32, -32, 16) +8:2/0/terrains_peering_bit/right_side = 1 +8:2/0/terrains_peering_bit/bottom_right_corner = 1 +8:2/0/terrains_peering_bit/bottom_side = 1 +8:2/0/terrains_peering_bit/left_side = 1 +8:2/0/terrains_peering_bit/top_side = 1 +8:2/0/terrains_peering_bit/top_right_corner = 1 +9:2/0 = 0 +9:2/0/terrain_set = 0 +9:2/0/terrain = 1 +9:2/0/physics_layer_0/polygon_0/points = PackedVector2Array(-32, -32, 32, -32, 32, 32, -32, 32) +9:2/0/terrains_peering_bit/right_side = 1 +9:2/0/terrains_peering_bit/bottom_right_corner = 1 +9:2/0/terrains_peering_bit/bottom_side = 1 +9:2/0/terrains_peering_bit/bottom_left_corner = 1 +9:2/0/terrains_peering_bit/left_side = 1 +9:2/0/terrains_peering_bit/top_left_corner = 1 +9:2/0/terrains_peering_bit/top_side = 1 +9:2/0/terrains_peering_bit/top_right_corner = 1 +10:2/0 = 0 +10:2/0/terrain_set = 0 +10:2/0/terrain = 1 +10:2/0/physics_layer_0/polygon_0/points = PackedVector2Array(-32, -32, 16, -32, 32, -16, 32, 32, -16, 32, -32, 16) +10:2/0/terrains_peering_bit/right_side = 1 +10:2/0/terrains_peering_bit/bottom_right_corner = 1 +10:2/0/terrains_peering_bit/bottom_side = 1 +10:2/0/terrains_peering_bit/left_side = 1 +10:2/0/terrains_peering_bit/top_left_corner = 1 +10:2/0/terrains_peering_bit/top_side = 1 +11:2/0 = 0 +11:2/0/terrain_set = 0 +11:2/0/terrain = 1 +11:2/0/physics_layer_0/polygon_0/points = PackedVector2Array(-32, -32, 16, -32, 16, 32, -32, 32) +11:2/0/terrains_peering_bit/bottom_side = 1 +11:2/0/terrains_peering_bit/bottom_left_corner = 1 +11:2/0/terrains_peering_bit/left_side = 1 +11:2/0/terrains_peering_bit/top_left_corner = 1 +11:2/0/terrains_peering_bit/top_side = 1 +0:3/0 = 0 +0:3/0/terrain_set = 0 +0:3/0/terrain = 1 +0:3/0/physics_layer_0/polygon_0/points = PackedVector2Array(-16, 0, 0, -16, 16, 0, 0, 16) +1:3/0 = 0 +1:3/0/terrain_set = 0 +1:3/0/terrain = 1 +1:3/0/physics_layer_0/polygon_0/points = PackedVector2Array(-16, -16, 32, -16, 32, 16, -16, 16) +1:3/0/terrains_peering_bit/right_side = 1 +2:3/0 = 0 +2:3/0/terrain_set = 0 +2:3/0/terrain = 1 +2:3/0/physics_layer_0/polygon_0/points = PackedVector2Array(-32, -16, 32, -16, 32, 16, -32, 16) +2:3/0/terrains_peering_bit/right_side = 1 +2:3/0/terrains_peering_bit/left_side = 1 +3:3/0 = 0 +3:3/0/terrain_set = 0 +3:3/0/terrain = 1 +3:3/0/physics_layer_0/polygon_0/points = PackedVector2Array(-32, -16, 16, -16, 16, 16, -32, 16) +3:3/0/terrains_peering_bit/left_side = 1 +4:3/0 = 0 +4:3/0/terrain_set = 0 +4:3/0/terrain = 1 +4:3/0/physics_layer_0/polygon_0/points = PackedVector2Array(-16, -32, 16, -32, 32, -16, 32, 16, 16, 32, -32, 32, -32, -16) +4:3/0/terrains_peering_bit/right_side = 1 +4:3/0/terrains_peering_bit/bottom_side = 1 +4:3/0/terrains_peering_bit/bottom_left_corner = 1 +4:3/0/terrains_peering_bit/left_side = 1 +4:3/0/terrains_peering_bit/top_side = 1 +5:3/0 = 0 +5:3/0/terrain_set = 0 +5:3/0/terrain = 1 +5:3/0/physics_layer_0/polygon_0/points = PackedVector2Array(-32, -16, -16, -32, 32, -32, 32, 16, -32, 16) +5:3/0/terrains_peering_bit/right_side = 1 +5:3/0/terrains_peering_bit/left_side = 1 +5:3/0/terrains_peering_bit/top_side = 1 +5:3/0/terrains_peering_bit/top_right_corner = 1 +6:3/0 = 0 +6:3/0/terrain_set = 0 +6:3/0/terrain = 1 +6:3/0/physics_layer_0/polygon_0/points = PackedVector2Array(-32, -32, 16, -32, 32, -15.805267, 32, 16, -32, 16) +6:3/0/terrains_peering_bit/right_side = 1 +6:3/0/terrains_peering_bit/left_side = 1 +6:3/0/terrains_peering_bit/top_left_corner = 1 +6:3/0/terrains_peering_bit/top_side = 1 +7:3/0 = 0 +7:3/0/terrain_set = 0 +7:3/0/terrain = 1 +7:3/0/physics_layer_0/polygon_0/points = PackedVector2Array(-32, -16, -15.240795, -32, 16, -32, 32, -16, 32, 32, -16, 32, -32, 16) +7:3/0/terrains_peering_bit/right_side = 1 +7:3/0/terrains_peering_bit/bottom_right_corner = 1 +7:3/0/terrains_peering_bit/bottom_side = 1 +7:3/0/terrains_peering_bit/left_side = 1 +7:3/0/terrains_peering_bit/top_side = 1 +8:3/0 = 0 +8:3/0/terrain_set = 0 +8:3/0/terrain = 1 +8:3/0/physics_layer_0/polygon_0/points = PackedVector2Array(-16, -32, 32, -32, 32, 16, -16, 16) +8:3/0/terrains_peering_bit/right_side = 1 +8:3/0/terrains_peering_bit/top_side = 1 +8:3/0/terrains_peering_bit/top_right_corner = 1 +9:3/0 = 0 +9:3/0/terrain_set = 0 +9:3/0/terrain = 1 +9:3/0/physics_layer_0/polygon_0/points = PackedVector2Array(-32, -32, 32, -32, 32, 16, -32, 16) +9:3/0/terrains_peering_bit/right_side = 1 +9:3/0/terrains_peering_bit/left_side = 1 +9:3/0/terrains_peering_bit/top_left_corner = 1 +9:3/0/terrains_peering_bit/top_side = 1 +9:3/0/terrains_peering_bit/top_right_corner = 1 +10:3/0 = 0 +10:3/0/terrain_set = 0 +10:3/0/terrain = 1 +10:3/0/physics_layer_0/polygon_0/points = PackedVector2Array(-32, -32, 32, -32, 32, 16, 16, 32, -16, 32, -32, 16) +10:3/0/terrains_peering_bit/right_side = 1 +10:3/0/terrains_peering_bit/bottom_side = 1 +10:3/0/terrains_peering_bit/left_side = 1 +10:3/0/terrains_peering_bit/top_left_corner = 1 +10:3/0/terrains_peering_bit/top_side = 1 +10:3/0/terrains_peering_bit/top_right_corner = 1 +11:3/0 = 0 +11:3/0/terrain_set = 0 +11:3/0/terrain = 1 +11:3/0/physics_layer_0/polygon_0/points = PackedVector2Array(-32, -32, 16, -32, 16, 16, -32, 16) +11:3/0/terrains_peering_bit/left_side = 1 +11:3/0/terrains_peering_bit/top_left_corner = 1 +11:3/0/terrains_peering_bit/top_side = 1 + +[sub_resource type="TileSetAtlasSource" id="TileSetAtlasSource_aw22q"] +resource_name = "RedNoPhysic" +texture = ExtResource("1_uvbas") +texture_region_size = Vector2i(64, 64) +0:0/0 = 0 +0:0/0/terrain_set = 0 +0:0/0/terrain = 2 +0:0/0/terrains_peering_bit/bottom_side = 2 +1:0/0 = 0 +1:0/0/terrain_set = 0 +1:0/0/terrain = 2 +1:0/0/terrains_peering_bit/right_side = 2 +1:0/0/terrains_peering_bit/bottom_side = 2 +2:0/0 = 0 +2:0/0/terrain_set = 0 +2:0/0/terrain = 2 +2:0/0/terrains_peering_bit/right_side = 2 +2:0/0/terrains_peering_bit/bottom_side = 2 +2:0/0/terrains_peering_bit/left_side = 2 +3:0/0 = 0 +3:0/0/terrain_set = 0 +3:0/0/terrain = 2 +3:0/0/terrains_peering_bit/bottom_side = 2 +3:0/0/terrains_peering_bit/left_side = 2 +4:0/0 = 0 +4:0/0/terrain_set = 0 +4:0/0/terrain = 2 +4:0/0/terrains_peering_bit/right_side = 2 +4:0/0/terrains_peering_bit/bottom_side = 2 +4:0/0/terrains_peering_bit/left_side = 2 +4:0/0/terrains_peering_bit/top_left_corner = 2 +4:0/0/terrains_peering_bit/top_side = 2 +5:0/0 = 0 +5:0/0/terrain_set = 0 +5:0/0/terrain = 2 +5:0/0/terrains_peering_bit/right_side = 2 +5:0/0/terrains_peering_bit/bottom_right_corner = 2 +5:0/0/terrains_peering_bit/bottom_side = 2 +5:0/0/terrains_peering_bit/left_side = 2 +6:0/0 = 0 +6:0/0/terrain_set = 0 +6:0/0/terrain = 2 +6:0/0/terrains_peering_bit/right_side = 2 +6:0/0/terrains_peering_bit/bottom_side = 2 +6:0/0/terrains_peering_bit/bottom_left_corner = 2 +6:0/0/terrains_peering_bit/left_side = 2 +7:0/0 = 0 +7:0/0/terrain_set = 0 +7:0/0/terrain = 2 +7:0/0/terrains_peering_bit/right_side = 2 +7:0/0/terrains_peering_bit/bottom_side = 2 +7:0/0/terrains_peering_bit/left_side = 2 +7:0/0/terrains_peering_bit/top_side = 2 +7:0/0/terrains_peering_bit/top_right_corner = 2 +8:0/0 = 0 +8:0/0/terrain_set = 0 +8:0/0/terrain = 2 +8:0/0/terrains_peering_bit/right_side = 2 +8:0/0/terrains_peering_bit/bottom_right_corner = 2 +8:0/0/terrains_peering_bit/bottom_side = 2 +9:0/0 = 0 +9:0/0/terrain_set = 0 +9:0/0/terrain = 2 +9:0/0/terrains_peering_bit/right_side = 2 +9:0/0/terrains_peering_bit/bottom_right_corner = 2 +9:0/0/terrains_peering_bit/bottom_side = 2 +9:0/0/terrains_peering_bit/bottom_left_corner = 2 +9:0/0/terrains_peering_bit/left_side = 2 +9:0/0/terrains_peering_bit/top_side = 2 +10:0/0 = 0 +10:0/0/terrain_set = 0 +10:0/0/terrain = 2 +10:0/0/terrains_peering_bit/right_side = 2 +10:0/0/terrains_peering_bit/bottom_right_corner = 2 +10:0/0/terrains_peering_bit/bottom_side = 2 +10:0/0/terrains_peering_bit/bottom_left_corner = 2 +10:0/0/terrains_peering_bit/left_side = 2 +11:0/0 = 0 +11:0/0/terrain_set = 0 +11:0/0/terrain = 2 +11:0/0/terrains_peering_bit/bottom_side = 2 +11:0/0/terrains_peering_bit/bottom_left_corner = 2 +11:0/0/terrains_peering_bit/left_side = 2 +0:1/0 = 0 +0:1/0/terrain_set = 0 +0:1/0/terrain = 2 +0:1/0/terrains_peering_bit/bottom_side = 2 +0:1/0/terrains_peering_bit/top_side = 2 +1:1/0 = 0 +1:1/0/terrain_set = 0 +1:1/0/terrain = 2 +1:1/0/terrains_peering_bit/right_side = 2 +1:1/0/terrains_peering_bit/bottom_side = 2 +1:1/0/terrains_peering_bit/top_side = 2 +2:1/0 = 0 +2:1/0/terrain_set = 0 +2:1/0/terrain = 2 +2:1/0/terrains_peering_bit/right_side = 2 +2:1/0/terrains_peering_bit/bottom_side = 2 +2:1/0/terrains_peering_bit/left_side = 2 +2:1/0/terrains_peering_bit/top_side = 2 +3:1/0 = 0 +3:1/0/terrain_set = 0 +3:1/0/terrain = 2 +3:1/0/terrains_peering_bit/bottom_side = 2 +3:1/0/terrains_peering_bit/left_side = 2 +3:1/0/terrains_peering_bit/top_side = 2 +4:1/0 = 0 +4:1/0/terrain_set = 0 +4:1/0/terrain = 2 +4:1/0/terrains_peering_bit/right_side = 2 +4:1/0/terrains_peering_bit/bottom_right_corner = 2 +4:1/0/terrains_peering_bit/bottom_side = 2 +4:1/0/terrains_peering_bit/top_side = 2 +5:1/0 = 0 +5:1/0/terrain_set = 0 +5:1/0/terrain = 2 +5:1/0/terrains_peering_bit/right_side = 2 +5:1/0/terrains_peering_bit/bottom_right_corner = 2 +5:1/0/terrains_peering_bit/bottom_side = 2 +5:1/0/terrains_peering_bit/bottom_left_corner = 2 +5:1/0/terrains_peering_bit/left_side = 2 +5:1/0/terrains_peering_bit/top_side = 2 +5:1/0/terrains_peering_bit/top_right_corner = 2 +6:1/0 = 0 +6:1/0/terrain_set = 0 +6:1/0/terrain = 2 +6:1/0/terrains_peering_bit/right_side = 2 +6:1/0/terrains_peering_bit/bottom_right_corner = 2 +6:1/0/terrains_peering_bit/bottom_side = 2 +6:1/0/terrains_peering_bit/bottom_left_corner = 2 +6:1/0/terrains_peering_bit/left_side = 2 +6:1/0/terrains_peering_bit/top_left_corner = 2 +6:1/0/terrains_peering_bit/top_side = 2 +7:1/0 = 0 +7:1/0/terrain_set = 0 +7:1/0/terrain = 2 +7:1/0/terrains_peering_bit/bottom_side = 2 +7:1/0/terrains_peering_bit/bottom_left_corner = 2 +7:1/0/terrains_peering_bit/left_side = 2 +7:1/0/terrains_peering_bit/top_side = 2 +8:1/0 = 0 +8:1/0/terrain_set = 0 +8:1/0/terrain = 2 +8:1/0/terrains_peering_bit/right_side = 2 +8:1/0/terrains_peering_bit/bottom_right_corner = 2 +8:1/0/terrains_peering_bit/bottom_side = 2 +8:1/0/terrains_peering_bit/top_side = 2 +8:1/0/terrains_peering_bit/top_right_corner = 2 +9:1/0 = 0 +9:1/0/terrain_set = 0 +9:1/0/terrain = 2 +9:1/0/terrains_peering_bit/right_side = 2 +9:1/0/terrains_peering_bit/bottom_side = 2 +9:1/0/terrains_peering_bit/bottom_left_corner = 2 +9:1/0/terrains_peering_bit/left_side = 2 +9:1/0/terrains_peering_bit/top_side = 2 +9:1/0/terrains_peering_bit/top_right_corner = 2 +10:1/0 = 0 +11:1/0 = 0 +11:1/0/terrain_set = 0 +11:1/0/terrain = 2 +11:1/0/terrains_peering_bit/right_side = 2 +11:1/0/terrains_peering_bit/bottom_side = 2 +11:1/0/terrains_peering_bit/bottom_left_corner = 2 +11:1/0/terrains_peering_bit/left_side = 2 +11:1/0/terrains_peering_bit/top_left_corner = 2 +11:1/0/terrains_peering_bit/top_side = 2 +0:2/0 = 0 +0:2/0/terrain_set = 0 +0:2/0/terrain = 2 +0:2/0/terrains_peering_bit/top_side = 2 +1:2/0 = 0 +1:2/0/terrain_set = 0 +1:2/0/terrain = 2 +1:2/0/terrains_peering_bit/right_side = 2 +1:2/0/terrains_peering_bit/top_side = 2 +2:2/0 = 0 +2:2/0/terrain_set = 0 +2:2/0/terrain = 2 +2:2/0/terrains_peering_bit/right_side = 2 +2:2/0/terrains_peering_bit/left_side = 2 +2:2/0/terrains_peering_bit/top_side = 2 +3:2/0 = 0 +3:2/0/terrain_set = 0 +3:2/0/terrain = 2 +3:2/0/terrains_peering_bit/left_side = 2 +3:2/0/terrains_peering_bit/top_side = 2 +4:2/0 = 0 +4:2/0/terrain_set = 0 +4:2/0/terrain = 2 +4:2/0/terrains_peering_bit/right_side = 2 +4:2/0/terrains_peering_bit/bottom_side = 2 +4:2/0/terrains_peering_bit/top_side = 2 +4:2/0/terrains_peering_bit/top_right_corner = 2 +5:2/0 = 0 +5:2/0/terrain_set = 0 +5:2/0/terrain = 2 +5:2/0/terrains_peering_bit/right_side = 2 +5:2/0/terrains_peering_bit/bottom_right_corner = 2 +5:2/0/terrains_peering_bit/bottom_side = 2 +5:2/0/terrains_peering_bit/left_side = 2 +5:2/0/terrains_peering_bit/top_left_corner = 2 +5:2/0/terrains_peering_bit/top_side = 2 +5:2/0/terrains_peering_bit/top_right_corner = 2 +6:2/0 = 0 +6:2/0/terrain_set = 0 +6:2/0/terrain = 2 +6:2/0/terrains_peering_bit/right_side = 2 +6:2/0/terrains_peering_bit/bottom_side = 2 +6:2/0/terrains_peering_bit/bottom_left_corner = 2 +6:2/0/terrains_peering_bit/left_side = 2 +6:2/0/terrains_peering_bit/top_left_corner = 2 +6:2/0/terrains_peering_bit/top_side = 2 +6:2/0/terrains_peering_bit/top_right_corner = 2 +7:2/0 = 0 +7:2/0/terrain_set = 0 +7:2/0/terrain = 2 +7:2/0/terrains_peering_bit/bottom_side = 2 +7:2/0/terrains_peering_bit/left_side = 2 +7:2/0/terrains_peering_bit/top_left_corner = 2 +7:2/0/terrains_peering_bit/top_side = 2 +8:2/0 = 0 +8:2/0/terrain_set = 0 +8:2/0/terrain = 2 +8:2/0/terrains_peering_bit/right_side = 2 +8:2/0/terrains_peering_bit/bottom_right_corner = 2 +8:2/0/terrains_peering_bit/bottom_side = 2 +8:2/0/terrains_peering_bit/left_side = 2 +8:2/0/terrains_peering_bit/top_side = 2 +8:2/0/terrains_peering_bit/top_right_corner = 2 +9:2/0 = 0 +9:2/0/terrain_set = 0 +9:2/0/terrain = 2 +9:2/0/terrains_peering_bit/right_side = 2 +9:2/0/terrains_peering_bit/bottom_right_corner = 2 +9:2/0/terrains_peering_bit/bottom_side = 2 +9:2/0/terrains_peering_bit/bottom_left_corner = 2 +9:2/0/terrains_peering_bit/left_side = 2 +9:2/0/terrains_peering_bit/top_left_corner = 2 +9:2/0/terrains_peering_bit/top_side = 2 +9:2/0/terrains_peering_bit/top_right_corner = 2 +10:2/0 = 0 +10:2/0/terrain_set = 0 +10:2/0/terrain = 2 +10:2/0/terrains_peering_bit/right_side = 2 +10:2/0/terrains_peering_bit/bottom_right_corner = 2 +10:2/0/terrains_peering_bit/bottom_side = 2 +10:2/0/terrains_peering_bit/left_side = 2 +10:2/0/terrains_peering_bit/top_left_corner = 2 +10:2/0/terrains_peering_bit/top_side = 2 +11:2/0 = 0 +11:2/0/terrain_set = 0 +11:2/0/terrain = 2 +11:2/0/terrains_peering_bit/bottom_side = 2 +11:2/0/terrains_peering_bit/bottom_left_corner = 2 +11:2/0/terrains_peering_bit/left_side = 2 +11:2/0/terrains_peering_bit/top_left_corner = 2 +11:2/0/terrains_peering_bit/top_side = 2 +0:3/0 = 0 +0:3/0/terrain_set = 0 +0:3/0/terrain = 2 +1:3/0 = 0 +1:3/0/terrain_set = 0 +1:3/0/terrain = 2 +1:3/0/terrains_peering_bit/right_side = 2 +2:3/0 = 0 +2:3/0/terrain_set = 0 +2:3/0/terrain = 2 +2:3/0/terrains_peering_bit/right_side = 2 +2:3/0/terrains_peering_bit/left_side = 2 +3:3/0 = 0 +3:3/0/terrain_set = 0 +3:3/0/terrain = 2 +3:3/0/terrains_peering_bit/left_side = 2 +4:3/0 = 0 +4:3/0/terrain_set = 0 +4:3/0/terrain = 2 +4:3/0/terrains_peering_bit/right_side = 2 +4:3/0/terrains_peering_bit/bottom_side = 2 +4:3/0/terrains_peering_bit/bottom_left_corner = 2 +4:3/0/terrains_peering_bit/left_side = 2 +4:3/0/terrains_peering_bit/top_side = 2 +5:3/0 = 0 +5:3/0/terrain_set = 0 +5:3/0/terrain = 2 +5:3/0/terrains_peering_bit/right_side = 2 +5:3/0/terrains_peering_bit/left_side = 2 +5:3/0/terrains_peering_bit/top_side = 2 +5:3/0/terrains_peering_bit/top_right_corner = 2 +6:3/0 = 0 +6:3/0/terrain_set = 0 +6:3/0/terrain = 2 +6:3/0/terrains_peering_bit/right_side = 2 +6:3/0/terrains_peering_bit/left_side = 2 +6:3/0/terrains_peering_bit/top_left_corner = 2 +6:3/0/terrains_peering_bit/top_side = 2 +7:3/0 = 0 +7:3/0/terrain_set = 0 +7:3/0/terrain = 2 +7:3/0/terrains_peering_bit/right_side = 2 +7:3/0/terrains_peering_bit/bottom_right_corner = 2 +7:3/0/terrains_peering_bit/bottom_side = 2 +7:3/0/terrains_peering_bit/left_side = 2 +7:3/0/terrains_peering_bit/top_side = 2 +8:3/0 = 0 +8:3/0/terrain_set = 0 +8:3/0/terrain = 2 +8:3/0/terrains_peering_bit/right_side = 2 +8:3/0/terrains_peering_bit/top_side = 2 +8:3/0/terrains_peering_bit/top_right_corner = 2 +9:3/0 = 0 +9:3/0/terrain_set = 0 +9:3/0/terrain = 2 +9:3/0/terrains_peering_bit/right_side = 2 +9:3/0/terrains_peering_bit/left_side = 2 +9:3/0/terrains_peering_bit/top_left_corner = 2 +9:3/0/terrains_peering_bit/top_side = 2 +9:3/0/terrains_peering_bit/top_right_corner = 2 +10:3/0 = 0 +10:3/0/terrain_set = 0 +10:3/0/terrain = 2 +10:3/0/terrains_peering_bit/right_side = 2 +10:3/0/terrains_peering_bit/bottom_side = 2 +10:3/0/terrains_peering_bit/left_side = 2 +10:3/0/terrains_peering_bit/top_left_corner = 2 +10:3/0/terrains_peering_bit/top_side = 2 +10:3/0/terrains_peering_bit/top_right_corner = 2 +11:3/0 = 0 +11:3/0/terrain_set = 0 +11:3/0/terrain = 2 +11:3/0/terrains_peering_bit/left_side = 2 +11:3/0/terrains_peering_bit/top_left_corner = 2 +11:3/0/terrains_peering_bit/top_side = 2 + +[sub_resource type="TileSetAtlasSource" id="TileSetAtlasSource_4i8c6"] +resource_name = "RedPhysic" +texture = ExtResource("1_uvbas") +texture_region_size = Vector2i(64, 64) +0:0/0 = 0 +0:0/0/terrain_set = 0 +0:0/0/terrain = 0 +0:0/0/physics_layer_0/polygon_0/points = PackedVector2Array(-16, 0, 0, -16, 16, 0, 16, 32, -16, 32) +0:0/0/terrains_peering_bit/bottom_side = 0 +1:0/0 = 0 +1:0/0/terrain_set = 0 +1:0/0/terrain = 0 +1:0/0/physics_layer_0/polygon_0/points = PackedVector2Array(32, -16, 32, 16, 16, 32, -16, 32) +1:0/0/terrains_peering_bit/right_side = 0 +1:0/0/terrains_peering_bit/bottom_side = 0 +2:0/0 = 0 +2:0/0/terrain_set = 0 +2:0/0/terrain = 0 +2:0/0/physics_layer_0/polygon_0/points = PackedVector2Array(-32, -16, 32, -16, 32, 16, 16, 32, -16, 32, -32, 16) +2:0/0/terrains_peering_bit/right_side = 0 +2:0/0/terrains_peering_bit/bottom_side = 0 +2:0/0/terrains_peering_bit/left_side = 0 +3:0/0 = 0 +3:0/0/terrain_set = 0 +3:0/0/terrain = 0 +3:0/0/physics_layer_0/polygon_0/points = PackedVector2Array(-32, -16, 16, 32, -16, 32, -32, 16) +3:0/0/terrains_peering_bit/bottom_side = 0 +3:0/0/terrains_peering_bit/left_side = 0 +4:0/0 = 0 +4:0/0/terrain_set = 0 +4:0/0/terrain = 0 +4:0/0/physics_layer_0/polygon_0/points = PackedVector2Array(-32, -32, 16, -32, 32, -16, 32, 16, 16, 32, -16, 32, -32, 16) +4:0/0/terrains_peering_bit/right_side = 0 +4:0/0/terrains_peering_bit/bottom_side = 0 +4:0/0/terrains_peering_bit/left_side = 0 +4:0/0/terrains_peering_bit/top_left_corner = 0 +4:0/0/terrains_peering_bit/top_side = 0 +5:0/0 = 0 +5:0/0/terrain_set = 0 +5:0/0/terrain = 0 +5:0/0/physics_layer_0/polygon_0/points = PackedVector2Array(-32, 16, -32, -16, 32, -16, 32, 32, -16, 32) +5:0/0/terrains_peering_bit/right_side = 0 +5:0/0/terrains_peering_bit/bottom_right_corner = 0 +5:0/0/terrains_peering_bit/bottom_side = 0 +5:0/0/terrains_peering_bit/left_side = 0 +6:0/0 = 0 +6:0/0/terrain_set = 0 +6:0/0/terrain = 0 +6:0/0/physics_layer_0/polygon_0/points = PackedVector2Array(-32, -16, 32, -16, 32, 16, 16, 32, -32, 32) +6:0/0/terrains_peering_bit/right_side = 0 +6:0/0/terrains_peering_bit/bottom_side = 0 +6:0/0/terrains_peering_bit/bottom_left_corner = 0 +6:0/0/terrains_peering_bit/left_side = 0 +7:0/0 = 0 +7:0/0/terrain_set = 0 +7:0/0/terrain = 0 +7:0/0/physics_layer_0/polygon_0/points = PackedVector2Array(-16, 32, -32, 16, -32, -16, -16, -32, 32, -32, 32, 16, 16, 32) +7:0/0/terrains_peering_bit/right_side = 0 +7:0/0/terrains_peering_bit/bottom_side = 0 +7:0/0/terrains_peering_bit/left_side = 0 +7:0/0/terrains_peering_bit/top_side = 0 +7:0/0/terrains_peering_bit/top_right_corner = 0 +8:0/0 = 0 +8:0/0/terrain_set = 0 +8:0/0/terrain = 0 +8:0/0/physics_layer_0/polygon_0/points = PackedVector2Array(32, -16, 32, 32, -16, 32) +8:0/0/terrains_peering_bit/right_side = 0 +8:0/0/terrains_peering_bit/bottom_right_corner = 0 +8:0/0/terrains_peering_bit/bottom_side = 0 +9:0/0 = 0 +9:0/0/terrain_set = 0 +9:0/0/terrain = 0 +9:0/0/physics_layer_0/polygon_0/points = PackedVector2Array(-16, -32, 16, -32, 32, -16, 32, 32, -32, 32, -32, -16) +9:0/0/terrains_peering_bit/right_side = 0 +9:0/0/terrains_peering_bit/bottom_right_corner = 0 +9:0/0/terrains_peering_bit/bottom_side = 0 +9:0/0/terrains_peering_bit/bottom_left_corner = 0 +9:0/0/terrains_peering_bit/left_side = 0 +9:0/0/terrains_peering_bit/top_side = 0 +10:0/0 = 0 +10:0/0/terrain_set = 0 +10:0/0/terrain = 0 +10:0/0/physics_layer_0/polygon_0/points = PackedVector2Array(-32, -16, 32, -16, 32, 32, -32, 32) +10:0/0/terrains_peering_bit/right_side = 0 +10:0/0/terrains_peering_bit/bottom_right_corner = 0 +10:0/0/terrains_peering_bit/bottom_side = 0 +10:0/0/terrains_peering_bit/bottom_left_corner = 0 +10:0/0/terrains_peering_bit/left_side = 0 +11:0/0 = 0 +11:0/0/terrain_set = 0 +11:0/0/terrain = 0 +11:0/0/physics_layer_0/polygon_0/points = PackedVector2Array(-32, -16, 16, 32, -32, 32) +11:0/0/terrains_peering_bit/bottom_side = 0 +11:0/0/terrains_peering_bit/bottom_left_corner = 0 +11:0/0/terrains_peering_bit/left_side = 0 +0:1/0 = 0 +0:1/0/terrain_set = 0 +0:1/0/terrain = 0 +0:1/0/physics_layer_0/polygon_0/points = PackedVector2Array(-16, -32, 16, -32, 16, 32, -16, 32) +0:1/0/terrains_peering_bit/bottom_side = 0 +0:1/0/terrains_peering_bit/top_side = 0 +1:1/0 = 0 +1:1/0/terrain_set = 0 +1:1/0/terrain = 0 +1:1/0/physics_layer_0/polygon_0/points = PackedVector2Array(-16, -32, 16, -32, 32, -16, 32, 16, 16, 32, -16, 32) +1:1/0/terrains_peering_bit/right_side = 0 +1:1/0/terrains_peering_bit/bottom_side = 0 +1:1/0/terrains_peering_bit/top_side = 0 +2:1/0 = 0 +2:1/0/terrain_set = 0 +2:1/0/terrain = 0 +2:1/0/physics_layer_0/polygon_0/points = PackedVector2Array(-16, -32, 16, -32, 32, -16, 32, 16, 16, 32, -16, 32, -32, 16, -32, -16) +2:1/0/terrains_peering_bit/right_side = 0 +2:1/0/terrains_peering_bit/bottom_side = 0 +2:1/0/terrains_peering_bit/left_side = 0 +2:1/0/terrains_peering_bit/top_side = 0 +3:1/0 = 0 +3:1/0/terrain_set = 0 +3:1/0/terrain = 0 +3:1/0/physics_layer_0/polygon_0/points = PackedVector2Array(-32, -16, -16, -32, 16, -32, 16, 32, -16, 32, -32, 16) +3:1/0/terrains_peering_bit/bottom_side = 0 +3:1/0/terrains_peering_bit/left_side = 0 +3:1/0/terrains_peering_bit/top_side = 0 +4:1/0 = 0 +4:1/0/terrain_set = 0 +4:1/0/terrain = 0 +4:1/0/physics_layer_0/polygon_0/points = PackedVector2Array(16, -32, 32, -16, 32, 32, -16, 32, -16, -32) +4:1/0/terrains_peering_bit/right_side = 0 +4:1/0/terrains_peering_bit/bottom_right_corner = 0 +4:1/0/terrains_peering_bit/bottom_side = 0 +4:1/0/terrains_peering_bit/top_side = 0 +5:1/0 = 0 +5:1/0/terrain_set = 0 +5:1/0/terrain = 0 +5:1/0/physics_layer_0/polygon_0/points = PackedVector2Array(-16, -32, 32, -32, 32, 32, -32, 32, -32, -16) +5:1/0/terrains_peering_bit/right_side = 0 +5:1/0/terrains_peering_bit/bottom_right_corner = 0 +5:1/0/terrains_peering_bit/bottom_side = 0 +5:1/0/terrains_peering_bit/bottom_left_corner = 0 +5:1/0/terrains_peering_bit/left_side = 0 +5:1/0/terrains_peering_bit/top_side = 0 +5:1/0/terrains_peering_bit/top_right_corner = 0 +6:1/0 = 0 +6:1/0/terrain_set = 0 +6:1/0/terrain = 0 +6:1/0/physics_layer_0/polygon_0/points = PackedVector2Array(-32, -32, 16, -32, 32, -16, 32, 32, -32, 32) +6:1/0/terrains_peering_bit/right_side = 0 +6:1/0/terrains_peering_bit/bottom_right_corner = 0 +6:1/0/terrains_peering_bit/bottom_side = 0 +6:1/0/terrains_peering_bit/bottom_left_corner = 0 +6:1/0/terrains_peering_bit/left_side = 0 +6:1/0/terrains_peering_bit/top_left_corner = 0 +6:1/0/terrains_peering_bit/top_side = 0 +7:1/0 = 0 +7:1/0/terrain_set = 0 +7:1/0/terrain = 0 +7:1/0/physics_layer_0/polygon_0/points = PackedVector2Array(-32, -16, -16, -32, 16, -32, 16, 32, -32, 32) +7:1/0/terrains_peering_bit/bottom_side = 0 +7:1/0/terrains_peering_bit/bottom_left_corner = 0 +7:1/0/terrains_peering_bit/left_side = 0 +7:1/0/terrains_peering_bit/top_side = 0 +8:1/0 = 0 +8:1/0/terrain_set = 0 +8:1/0/terrain = 0 +8:1/0/physics_layer_0/polygon_0/points = PackedVector2Array(-16, -32, 32, -32, 32, 32, -16, 32) +8:1/0/terrains_peering_bit/right_side = 0 +8:1/0/terrains_peering_bit/bottom_right_corner = 0 +8:1/0/terrains_peering_bit/bottom_side = 0 +8:1/0/terrains_peering_bit/top_side = 0 +8:1/0/terrains_peering_bit/top_right_corner = 0 +9:1/0 = 0 +9:1/0/terrain_set = 0 +9:1/0/terrain = 0 +9:1/0/physics_layer_0/polygon_0/points = PackedVector2Array(-32, 32, -32, -16, -16, -32, 32, -32, 32, 16, 16, 32) +9:1/0/terrains_peering_bit/right_side = 0 +9:1/0/terrains_peering_bit/bottom_side = 0 +9:1/0/terrains_peering_bit/bottom_left_corner = 0 +9:1/0/terrains_peering_bit/left_side = 0 +9:1/0/terrains_peering_bit/top_side = 0 +9:1/0/terrains_peering_bit/top_right_corner = 0 +11:1/0 = 0 +11:1/0/terrain_set = 0 +11:1/0/terrain = 0 +11:1/0/physics_layer_0/polygon_0/points = PackedVector2Array(-32, -32, 16, -32, 32, -16, 32, 16, 16, 32, -32, 32) +11:1/0/terrains_peering_bit/right_side = 0 +11:1/0/terrains_peering_bit/bottom_side = 0 +11:1/0/terrains_peering_bit/bottom_left_corner = 0 +11:1/0/terrains_peering_bit/left_side = 0 +11:1/0/terrains_peering_bit/top_left_corner = 0 +11:1/0/terrains_peering_bit/top_side = 0 +0:2/0 = 0 +0:2/0/terrain_set = 0 +0:2/0/terrain = 0 +0:2/0/physics_layer_0/polygon_0/points = PackedVector2Array(-16, -32, 16, -32, 16, 0, -0.564476, 16, -16, 0) +0:2/0/terrains_peering_bit/top_side = 0 +1:2/0 = 0 +1:2/0/terrain_set = 0 +1:2/0/terrain = 0 +1:2/0/physics_layer_0/polygon_0/points = PackedVector2Array(-16, -32, 16, -32, 32, -16, 32, 16) +1:2/0/terrains_peering_bit/right_side = 0 +1:2/0/terrains_peering_bit/top_side = 0 +2:2/0 = 0 +2:2/0/terrain_set = 0 +2:2/0/terrain = 0 +2:2/0/physics_layer_0/polygon_0/points = PackedVector2Array(-16, -32, 16, -32, 32, -16, 32, 16, -32, 16, -32, -16) +2:2/0/terrains_peering_bit/right_side = 0 +2:2/0/terrains_peering_bit/left_side = 0 +2:2/0/terrains_peering_bit/top_side = 0 +3:2/0 = 0 +3:2/0/terrain_set = 0 +3:2/0/terrain = 0 +3:2/0/physics_layer_0/polygon_0/points = PackedVector2Array(-16, -32, 16, -32, -32, 16, -32, -16) +3:2/0/terrains_peering_bit/left_side = 0 +3:2/0/terrains_peering_bit/top_side = 0 +4:2/0 = 0 +4:2/0/terrain_set = 0 +4:2/0/terrain = 0 +4:2/0/physics_layer_0/polygon_0/points = PackedVector2Array(-16, -32, 32, -32, 32, 16, 16, 32, -16, 32) +4:2/0/terrains_peering_bit/right_side = 0 +4:2/0/terrains_peering_bit/bottom_side = 0 +4:2/0/terrains_peering_bit/top_side = 0 +4:2/0/terrains_peering_bit/top_right_corner = 0 +5:2/0 = 0 +5:2/0/terrain_set = 0 +5:2/0/terrain = 0 +5:2/0/physics_layer_0/polygon_0/points = PackedVector2Array(-32, -32, 32, -32, 32, 32, -16, 32, -32, 16) +5:2/0/terrains_peering_bit/right_side = 0 +5:2/0/terrains_peering_bit/bottom_right_corner = 0 +5:2/0/terrains_peering_bit/bottom_side = 0 +5:2/0/terrains_peering_bit/left_side = 0 +5:2/0/terrains_peering_bit/top_left_corner = 0 +5:2/0/terrains_peering_bit/top_side = 0 +5:2/0/terrains_peering_bit/top_right_corner = 0 +6:2/0 = 0 +6:2/0/terrain_set = 0 +6:2/0/terrain = 0 +6:2/0/physics_layer_0/polygon_0/points = PackedVector2Array(-32, -32, 32, -32, 32, 16, 16, 32, -32, 32) +6:2/0/terrains_peering_bit/right_side = 0 +6:2/0/terrains_peering_bit/bottom_side = 0 +6:2/0/terrains_peering_bit/bottom_left_corner = 0 +6:2/0/terrains_peering_bit/left_side = 0 +6:2/0/terrains_peering_bit/top_left_corner = 0 +6:2/0/terrains_peering_bit/top_side = 0 +6:2/0/terrains_peering_bit/top_right_corner = 0 +7:2/0 = 0 +7:2/0/terrain_set = 0 +7:2/0/terrain = 0 +7:2/0/physics_layer_0/polygon_0/points = PackedVector2Array(-32, -32, 16, -32, 16, 32, -16, 32, -32, 16) +7:2/0/terrains_peering_bit/bottom_side = 0 +7:2/0/terrains_peering_bit/left_side = 0 +7:2/0/terrains_peering_bit/top_left_corner = 0 +7:2/0/terrains_peering_bit/top_side = 0 +8:2/0 = 0 +8:2/0/terrain_set = 0 +8:2/0/terrain = 0 +8:2/0/physics_layer_0/polygon_0/points = PackedVector2Array(-16, -32, 32, -32, 32, 32, -16, 32, -32, 16, -32, -16) +8:2/0/terrains_peering_bit/right_side = 0 +8:2/0/terrains_peering_bit/bottom_right_corner = 0 +8:2/0/terrains_peering_bit/bottom_side = 0 +8:2/0/terrains_peering_bit/left_side = 0 +8:2/0/terrains_peering_bit/top_side = 0 +8:2/0/terrains_peering_bit/top_right_corner = 0 +9:2/0 = 0 +9:2/0/terrain_set = 0 +9:2/0/terrain = 0 +9:2/0/physics_layer_0/polygon_0/points = PackedVector2Array(-32, -32, 32, -32, 32, 32, -32, 32) +9:2/0/terrains_peering_bit/right_side = 0 +9:2/0/terrains_peering_bit/bottom_right_corner = 0 +9:2/0/terrains_peering_bit/bottom_side = 0 +9:2/0/terrains_peering_bit/bottom_left_corner = 0 +9:2/0/terrains_peering_bit/left_side = 0 +9:2/0/terrains_peering_bit/top_left_corner = 0 +9:2/0/terrains_peering_bit/top_side = 0 +9:2/0/terrains_peering_bit/top_right_corner = 0 +10:2/0 = 0 +10:2/0/terrain_set = 0 +10:2/0/terrain = 0 +10:2/0/physics_layer_0/polygon_0/points = PackedVector2Array(-16, 32, -32, 16, -32, -32, 16, -32, 32, -16, 32, 32) +10:2/0/terrains_peering_bit/right_side = 0 +10:2/0/terrains_peering_bit/bottom_right_corner = 0 +10:2/0/terrains_peering_bit/bottom_side = 0 +10:2/0/terrains_peering_bit/left_side = 0 +10:2/0/terrains_peering_bit/top_left_corner = 0 +10:2/0/terrains_peering_bit/top_side = 0 +11:2/0 = 0 +11:2/0/terrain_set = 0 +11:2/0/terrain = 0 +11:2/0/physics_layer_0/polygon_0/points = PackedVector2Array(-32, -32, 16, -32, 16, 32, -32, 32) +11:2/0/terrains_peering_bit/bottom_side = 0 +11:2/0/terrains_peering_bit/bottom_left_corner = 0 +11:2/0/terrains_peering_bit/left_side = 0 +11:2/0/terrains_peering_bit/top_left_corner = 0 +11:2/0/terrains_peering_bit/top_side = 0 +0:3/0 = 0 +0:3/0/terrain_set = 0 +0:3/0/terrain = 0 +0:3/0/physics_layer_0/polygon_0/points = PackedVector2Array(-16, 0, 0, -16, 16, 0, 0, 16) +1:3/0 = 0 +1:3/0/terrain_set = 0 +1:3/0/terrain = 0 +1:3/0/physics_layer_0/polygon_0/points = PackedVector2Array(0, -16, 32, -16, 32, 16, 0, 16, -16, 0) +1:3/0/terrains_peering_bit/right_side = 0 +2:3/0 = 0 +2:3/0/terrain_set = 0 +2:3/0/terrain = 0 +2:3/0/physics_layer_0/polygon_0/points = PackedVector2Array(-32, -16, 32, -16, 32, 16, -32, 16) +2:3/0/terrains_peering_bit/right_side = 0 +2:3/0/terrains_peering_bit/left_side = 0 +3:3/0 = 0 +3:3/0/terrain_set = 0 +3:3/0/terrain = 0 +3:3/0/physics_layer_0/polygon_0/points = PackedVector2Array(-32, -16, 0, -16, 16, 0, 0, 16, -32, 16) +3:3/0/terrains_peering_bit/left_side = 0 +4:3/0 = 0 +4:3/0/terrain_set = 0 +4:3/0/terrain = 0 +4:3/0/physics_layer_0/polygon_0/points = PackedVector2Array(-32, -16, -16, -32, 16, -32, 32, -16, 32, 16, 16, 32, -32, 32) +4:3/0/terrains_peering_bit/right_side = 0 +4:3/0/terrains_peering_bit/bottom_side = 0 +4:3/0/terrains_peering_bit/bottom_left_corner = 0 +4:3/0/terrains_peering_bit/left_side = 0 +4:3/0/terrains_peering_bit/top_side = 0 +5:3/0 = 0 +5:3/0/terrain_set = 0 +5:3/0/terrain = 0 +5:3/0/physics_layer_0/polygon_0/points = PackedVector2Array(-16, -32, 32, -32, 32, 16, -32, 16, -32, -16) +5:3/0/terrains_peering_bit/right_side = 0 +5:3/0/terrains_peering_bit/left_side = 0 +5:3/0/terrains_peering_bit/top_side = 0 +5:3/0/terrains_peering_bit/top_right_corner = 0 +6:3/0 = 0 +6:3/0/terrain_set = 0 +6:3/0/terrain = 0 +6:3/0/physics_layer_0/polygon_0/points = PackedVector2Array(-32, -32, 16, -32, 32, -16, 32, 16, -32, 16) +6:3/0/terrains_peering_bit/right_side = 0 +6:3/0/terrains_peering_bit/left_side = 0 +6:3/0/terrains_peering_bit/top_left_corner = 0 +6:3/0/terrains_peering_bit/top_side = 0 +7:3/0 = 0 +7:3/0/terrain_set = 0 +7:3/0/terrain = 0 +7:3/0/physics_layer_0/polygon_0/points = PackedVector2Array(-32, -16, -16, -32, 16, -32, 32, -16, 32, 32, -32, 32) +7:3/0/terrains_peering_bit/right_side = 0 +7:3/0/terrains_peering_bit/bottom_right_corner = 0 +7:3/0/terrains_peering_bit/bottom_side = 0 +7:3/0/terrains_peering_bit/left_side = 0 +7:3/0/terrains_peering_bit/top_side = 0 +8:3/0 = 0 +8:3/0/terrain_set = 0 +8:3/0/terrain = 0 +8:3/0/physics_layer_0/polygon_0/points = PackedVector2Array(-16, -32, 32, -32, 32, 16) +8:3/0/terrains_peering_bit/right_side = 0 +8:3/0/terrains_peering_bit/top_side = 0 +8:3/0/terrains_peering_bit/top_right_corner = 0 +9:3/0 = 0 +9:3/0/terrain_set = 0 +9:3/0/terrain = 0 +9:3/0/physics_layer_0/polygon_0/points = PackedVector2Array(-32, -32, 32, -32, 32, 16, -32, 16) +9:3/0/terrains_peering_bit/right_side = 0 +9:3/0/terrains_peering_bit/left_side = 0 +9:3/0/terrains_peering_bit/top_left_corner = 0 +9:3/0/terrains_peering_bit/top_side = 0 +9:3/0/terrains_peering_bit/top_right_corner = 0 +10:3/0 = 0 +10:3/0/terrain_set = 0 +10:3/0/terrain = 0 +10:3/0/physics_layer_0/polygon_0/points = PackedVector2Array(-32, 16, -32, -32, 32, -32, 32, 16, 16, 32, -16, 32) +10:3/0/terrains_peering_bit/right_side = 0 +10:3/0/terrains_peering_bit/bottom_side = 0 +10:3/0/terrains_peering_bit/left_side = 0 +10:3/0/terrains_peering_bit/top_left_corner = 0 +10:3/0/terrains_peering_bit/top_side = 0 +10:3/0/terrains_peering_bit/top_right_corner = 0 +11:3/0 = 0 +11:3/0/terrain_set = 0 +11:3/0/terrain = 0 +11:3/0/physics_layer_0/polygon_0/points = PackedVector2Array(16, -32, -32, 16, -32, -32) +11:3/0/terrains_peering_bit/left_side = 0 +11:3/0/terrains_peering_bit/top_left_corner = 0 +11:3/0/terrains_peering_bit/top_side = 0 + +[sub_resource type="TileSetAtlasSource" id="TileSetAtlasSource_2x7bf"] +texture = ExtResource("5_skkk4") +texture_region_size = Vector2i(64, 64) +0:0/0 = 0 +0:0/0/terrain_set = 1 +0:0/0/terrain = 0 +0:0/0/terrains_peering_bit/bottom_side = 0 +1:0/0 = 0 +1:0/0/terrain_set = 1 +1:0/0/terrain = 0 +1:0/0/terrains_peering_bit/right_side = 0 +1:0/0/terrains_peering_bit/bottom_side = 0 +2:0/0 = 0 +2:0/0/terrain_set = 1 +2:0/0/terrain = 0 +2:0/0/terrains_peering_bit/right_side = 0 +2:0/0/terrains_peering_bit/bottom_side = 0 +2:0/0/terrains_peering_bit/left_side = 0 +3:0/0 = 0 +3:0/0/terrain_set = 1 +3:0/0/terrain = 0 +3:0/0/terrains_peering_bit/bottom_side = 0 +3:0/0/terrains_peering_bit/left_side = 0 +0:1/0 = 0 +0:1/0/terrain_set = 1 +0:1/0/terrain = 0 +0:1/0/terrains_peering_bit/bottom_side = 0 +0:1/0/terrains_peering_bit/top_side = 0 +1:1/0 = 0 +1:1/0/terrain_set = 1 +1:1/0/terrain = 0 +1:1/0/terrains_peering_bit/right_side = 0 +1:1/0/terrains_peering_bit/bottom_side = 0 +1:1/0/terrains_peering_bit/top_side = 0 +2:1/0 = 0 +2:1/0/terrain_set = 1 +2:1/0/terrain = 0 +2:1/0/terrains_peering_bit/right_side = 0 +2:1/0/terrains_peering_bit/bottom_side = 0 +2:1/0/terrains_peering_bit/left_side = 0 +2:1/0/terrains_peering_bit/top_side = 0 +3:1/0 = 0 +3:1/0/terrain_set = 1 +3:1/0/terrain = 0 +3:1/0/terrains_peering_bit/bottom_side = 0 +3:1/0/terrains_peering_bit/left_side = 0 +3:1/0/terrains_peering_bit/top_side = 0 +0:2/0 = 0 +0:2/0/terrain_set = 1 +0:2/0/terrain = 0 +0:2/0/terrains_peering_bit/top_side = 0 +1:2/0 = 0 +1:2/0/terrain_set = 1 +1:2/0/terrain = 0 +1:2/0/terrains_peering_bit/right_side = 0 +1:2/0/terrains_peering_bit/top_side = 0 +2:2/0 = 0 +2:2/0/terrain_set = 1 +2:2/0/terrain = 0 +2:2/0/terrains_peering_bit/right_side = 0 +2:2/0/terrains_peering_bit/left_side = 0 +2:2/0/terrains_peering_bit/top_side = 0 +3:2/0 = 0 +3:2/0/terrain_set = 1 +3:2/0/terrain = 0 +3:2/0/terrains_peering_bit/left_side = 0 +3:2/0/terrains_peering_bit/top_side = 0 +0:3/0 = 0 +0:3/0/terrain_set = 1 +0:3/0/terrain = 0 +1:3/0 = 0 +1:3/0/terrain_set = 1 +1:3/0/terrain = 0 +1:3/0/terrains_peering_bit/right_side = 0 +2:3/0 = 0 +2:3/0/terrain_set = 1 +2:3/0/terrain = 0 +2:3/0/terrains_peering_bit/right_side = 0 +2:3/0/terrains_peering_bit/left_side = 0 +3:3/0 = 0 +3:3/0/terrain_set = 1 +3:3/0/terrain = 0 +3:3/0/terrains_peering_bit/left_side = 0 + +[resource] +tile_size = Vector2i(64, 64) +physics_layer_0/collision_layer = 1 +terrain_set_0/mode = 0 +terrain_set_0/terrain_0/name = "RedColl" +terrain_set_0/terrain_0/color = Color(0.60520345, 0.269086, 0.20414418, 1) +terrain_set_0/terrain_1/name = "GreenColl" +terrain_set_0/terrain_1/color = Color(0.5019608, 0.80784315, 0, 1) +terrain_set_0/terrain_2/name = "RedNoColl" +terrain_set_0/terrain_2/color = Color(1, 1, 1, 1) +terrain_set_1/mode = 2 +terrain_set_1/terrain_0/name = "Sides" +terrain_set_1/terrain_0/color = Color(0.5, 0.34375, 0.25, 1) +sources/3 = SubResource("TileSetAtlasSource_4i8c6") +sources/6 = SubResource("TileSetAtlasSource_2x7bf") +sources/1 = SubResource("TileSetAtlasSource_rklv6") +sources/0 = SubResource("TileSetAtlasSource_f4n6l") +sources/2 = SubResource("TileSetAtlasSource_aw22q") diff --git a/stages/terrain/planet/scripts/chunk.gd b/stages/terrain/planet/scripts/chunk.gd index f1466d3..2d04ae4 100644 --- a/stages/terrain/planet/scripts/chunk.gd +++ b/stages/terrain/planet/scripts/chunk.gd @@ -1,137 +1,164 @@ +@tool extends Node2D class_name Chunk -const UNIT_PER_PIXEL = 30 - -var coord : Vector2i -var size : Vector2i var planet : Planet -var wall_threshold = 0.4 -var noise_image : Image -var entity_generated : bool +var planet_seed : int +var wall_threshold = 0.6 +var decontamination_threshold = 0.15 +var cristal_threshold = 0.08 +var rock_noise_image : Noise = null +var decontamination_noise_image : Noise = null -const CHUNK_TEXTURE_SCALE : float = 3.0 -const DEFAULT_CHUNK_BACKGROUND_MATERIAL : ShaderMaterial = preload("res://stages/terrain/planet/resources/materials/default_chunk_material.tres") +const NOISE_IMAGE_SIZE := 150 const LOOT_NUMBER : Array[int] = [2,3,4] const LOOT_ITEM_NUMBER : Array[int] = [1,2] -var chunk_background_material +const ROCK_NOISE_FREQUENCY := 0.01 +const DECONTAMINATION_NOISE_FREQUENCY := 0.01 + +var generation_thread: Thread + +@export_tool_button("Update", "Callable") var update_action = func(): + planet_seed = randi() + setup() + +var data : ChunkData func _init( - _coord : Vector2i, - _size : Vector2i, - _planet : Planet, - _entity_generated = false + _data : ChunkData, + _planet : Planet = null, ): - coord = _coord - size = _size - planet = _planet - entity_generated = _entity_generated + planet = _planet + if planet: + planet_seed = planet.data.planet_seed + data = _data func _ready(): - noise_image = generate_noise() - generate_background_sprite() - global_position = coord * size - generate_walls() - if not entity_generated: - generate_loot() + setup() -func generate_noise() -> Image: - var image_size = Vector2i( - roundi(float(size.x) / UNIT_PER_PIXEL), - roundi(float(size.y) / UNIT_PER_PIXEL) - ) - var noise: FastNoiseLite = FastNoiseLite.new() - noise.seed = planet.data.planet_seed - noise.noise_type = FastNoiseLite.TYPE_SIMPLEX_SMOOTH - noise.frequency = 0.05 - noise.fractal_weighted_strength = 1.0 - noise.offset = Vector3( - image_size.x * coord.x, - image_size.y * coord.y, - 1 - ) +func setup(): + rock_noise_image = generate_noise(planet_seed + 1, ROCK_NOISE_FREQUENCY) + decontamination_noise_image = generate_noise(planet_seed + 2, DECONTAMINATION_NOISE_FREQUENCY) - var image = noise.get_image( - image_size.x, - image_size.y, - 1.0, - ) + generation_thread = Thread.new() + generation_thread.start( + func (): + generate_rocks() + generate_ground() + generate_decontamination() + ) - return image + global_position = data.chunk_coord * (Planet.CHUNK_TILE_SIZE * Planet.TILE_SIZE) + queue_redraw() -func generate_background_sprite() -> Polygon2D: - var sprite :Polygon2D = generate_polygon_sprite() +func unload(): + for x in range(Planet.CHUNK_TILE_SIZE): + for y in range(Planet.CHUNK_TILE_SIZE): + var global_coord = Vector2i(x, y) + Planet.CHUNK_TILE_SIZE * data.chunk_coord + planet.rock_layer.erase_cell(global_coord) + planet.ground_layer.erase_cell(global_coord) + planet.decontamination_layer.erase_cell(global_coord) - sprite.texture = ImageTexture.create_from_image(noise_image) +# Debug +# func _draw(): +# draw_rect( +# Rect2(Vector2.ZERO, Vector2.ONE * Planet.CHUNK_TILE_SIZE * Planet.TILE_SIZE), +# Color.WHITE, +# false, +# 3 +# ) - var background_material = DEFAULT_CHUNK_BACKGROUND_MATERIAL.duplicate_deep() + # for x in range(NOISE_IMAGE_SIZE): + # for y in range(NOISE_IMAGE_SIZE): + # var noise_value = rock_noise_image.get_noise_2d( + # x, + # y + # ) + # draw_rect( + # Rect2(Vector2i(x,y) * Planet.CHUNK_SIZE / NOISE_IMAGE_SIZE, Vector2i.ONE * Planet.CHUNK_SIZE / NOISE_IMAGE_SIZE), + # Color.WHITE * ((noise_value+1)/2), + # true, + # ) - background_material.set_shader_parameter("data_texture", ImageTexture.create_from_image(noise_image)) - background_material.set_shader_parameter("data_texture_size", size) - background_material.set_shader_parameter("data_texture_threshold", wall_threshold) - background_material.set_shader_parameter("texture_scale", CHUNK_TEXTURE_SCALE) +func generate_noise( + noise_seed : int, + frequency := 0.01 +) -> Noise: + var noise_image_size := NOISE_IMAGE_SIZE * Vector2i.ONE + var noise: FastNoiseLite = FastNoiseLite.new() + noise.seed = noise_seed + noise.noise_type = FastNoiseLite.TYPE_SIMPLEX + noise.frequency = 0.01 + 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, + 1 + ) - sprite.material = background_material + return noise - return sprite +func get_tile_value_from_noise(tile_position : Vector2i, noise : Noise) -> float: + var val = noise.get_noise_2d( + floori(float(tile_position.x * NOISE_IMAGE_SIZE) / Planet.CHUNK_TILE_SIZE), + floori(float(tile_position.y * NOISE_IMAGE_SIZE) / Planet.CHUNK_TILE_SIZE) + ) + return (val + 1)/2 -func generate_polygon_sprite() -> Polygon2D: - var sprite = Polygon2D.new() - sprite.polygon = PackedVector2Array([ - Vector2(0,0), - Vector2(size.x, 0), - Vector2(size.x, size.y), - Vector2(0, size.y), - ]) +func generate_rocks(): + var cristals : Array[Vector2i] = [] + var rocks : Array[Vector2i] = [] + for x in range(Planet.CHUNK_TILE_SIZE): + for y in range(Planet.CHUNK_TILE_SIZE): + var tile_type := get_generated_rock_type(Vector2i(x, y)) + var global_coord = Vector2i(x, y) + Planet.CHUNK_TILE_SIZE * data.chunk_coord + if tile_type == RockLayer.TileType.CRISTAL: + cristals.append(global_coord) + elif tile_type == RockLayer.TileType.ROCK: + rocks.append(global_coord) + + planet.rock_layer.mutex.lock() + planet.rock_layer.place_rocks(cristals, RockLayer.TileType.CRISTAL) + planet.rock_layer.place_rocks(rocks, RockLayer.TileType.ROCK) + planet.rock_layer.mutex.unlock() + +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) - sprite.z_index = -100 + if ( + (saved_diff == ChunkData.TileDiff.PRESENT or tile_value < wall_threshold) + and saved_diff != ChunkData.TileDiff.ABSENT + ): + return RockLayer.TileType.CRISTAL if tile_value < cristal_threshold else RockLayer.TileType.ROCK + return RockLayer.TileType.EMPTY - add_child(sprite) +func generate_ground(): + planet.ground_layer.mutex.lock() + for x in range(Planet.CHUNK_TILE_SIZE): + for y in range(Planet.CHUNK_TILE_SIZE): + planet.ground_layer.place_ground(Vector2i(x,y) + Planet.CHUNK_TILE_SIZE * data.chunk_coord) + planet.ground_layer.mutex.unlock() - return sprite +func generate_decontamination(): + var decontamination_tiles : Array[Vector2i] = [] + for x in range(Planet.CHUNK_TILE_SIZE): + for y in range(Planet.CHUNK_TILE_SIZE): + var coord = Vector2i(x,y) + var tile_value : float = get_tile_value_from_noise(coord, decontamination_noise_image) + var saved_diff := data.get_decontamination_tile_diff(coord) + if ( + (saved_diff == ChunkData.TileDiff.PRESENT or tile_value < decontamination_threshold) + and saved_diff != ChunkData.TileDiff.ABSENT + ): + decontamination_tiles.append(Vector2i(x,y) + Planet.CHUNK_TILE_SIZE * data.chunk_coord) + + planet.decontamination_layer.mutex.lock() + planet.decontamination_layer.place_decontaminations(decontamination_tiles) + planet.decontamination_layer.mutex.unlock() -func generate_walls(): - var static_body = StaticBody2D.new() - add_child(static_body) - var wall_resolution_factor = 25 - - for x in range(1, size.x, wall_resolution_factor): - for y in range(1, size.y, wall_resolution_factor): - if is_wall(Vector2(x, y)): - var new_collision_shape = CollisionShape2D.new() - new_collision_shape.shape = CircleShape2D.new() - new_collision_shape.shape.radius = wall_resolution_factor / 2. - static_body.add_child(new_collision_shape) - new_collision_shape.global_position = Vector2i(x, y) + coord * size + Vector2i.ONE * 5 - -func generate_loot(number : int = LOOT_NUMBER.pick_random()): - for i in range(number): - var loot : UndergroundLoot = (UndergroundLootData.SCENE.instantiate() as UndergroundLoot) - loot.item_number = LOOT_ITEM_NUMBER.pick_random() - - var max_placement_try = 10 - var valid_coord = false - while max_placement_try > 0 and not valid_coord: - var random_position = Vector2( - randf_range(0, size.x), - randf_range(0, size.y) - ) - if not is_wall(random_position): - planet.add_entity(loot, random_position + Vector2(coord * size)) - valid_coord = true - else : - max_placement_try -= 1 - -func get_pixel_point(point : Vector2) -> Vector2i: - var vec : Vector2 = Vector2(point) / UNIT_PER_PIXEL - Vector2.ONE - return Vector2i( - roundi(vec.x + 0.5), - roundi(vec.y + 0.5) - ) - - -func is_wall(game_point : Vector2) -> bool: - var pixel_point = get_pixel_point(game_point) - return noise_image.get_pixel(pixel_point.x, pixel_point.y).r < wall_threshold \ No newline at end of file +func _exit_tree(): + generation_thread.wait_to_finish() diff --git a/stages/terrain/planet/scripts/chunk_data.gd b/stages/terrain/planet/scripts/chunk_data.gd new file mode 100644 index 0000000..f6cb6e5 --- /dev/null +++ b/stages/terrain/planet/scripts/chunk_data.gd @@ -0,0 +1,62 @@ +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 +): + 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/planet/scripts/chunk_data.gd.uid b/stages/terrain/planet/scripts/chunk_data.gd.uid new file mode 100644 index 0000000..1367907 --- /dev/null +++ b/stages/terrain/planet/scripts/chunk_data.gd.uid @@ -0,0 +1 @@ +uid://clqa88okc325t diff --git a/stages/terrain/planet/scripts/garden.gd b/stages/terrain/planet/scripts/garden.gd index b215325..fc6869b 100644 --- a/stages/terrain/planet/scripts/garden.gd +++ b/stages/terrain/planet/scripts/garden.gd @@ -1,48 +1,18 @@ extends Node2D class_name Garden -const GARDEN_TEXTURE_SCALE : float = 3.0 - -var contamination_material : ShaderMaterial = preload("res://stages/terrain/planet/resources/materials/ground_contamination.tres") - -var contamination_sprite : Polygon2D -var contamination_texture : Texture2D -var decontamination_surface : float - var plants : Array[Plant] var planet_data : PlanetData -var size = PlanetData.DEFAULT_GARDEN_SIZE - func _init(_planet_data : PlanetData, _initial_plants : Array[Plant] = []): planet_data = _planet_data plants = _initial_plants # update_garden_score() func _ready(): - contamination_sprite = generate_contamination_terrain_sprite() - decontamination_surface = planet_data.get_decontamination_surface() - for p in plants: p.harvested.connect(_on_plant_harvested) p.state_changed.connect(_on_plant_state_changed) - # update_garden_score() - -func generate_contamination_terrain_sprite() -> Polygon2D: - if not planet_data.garden_contamination: - planet_data.generate_default_contamination() - - var sprite :Polygon2D = generate_polygon_sprite(size, 1) - - contamination_texture = ImageTexture.create_from_image(planet_data.garden_contamination.image) - - contamination_material.set_shader_parameter("data_texture", contamination_texture) - contamination_material.set_shader_parameter("data_texture_size", size) - contamination_material.set_shader_parameter("texture_scale", GARDEN_TEXTURE_SCALE) - - sprite.material = contamination_material - - return sprite func get_score(): var score = 0 @@ -88,30 +58,3 @@ func remove_plant(p: Plant): func update_garden_score(): planet_data.garden_score = get_score() - -func impact_contamination(impact_position : Vector2, impact_radius : int, contamination : bool = false): - planet_data.impact_contamination(impact_position, impact_radius, 0. if contamination else 1.) - if contamination_texture: - contamination_texture.update(planet_data.garden_contamination.image) - -func generate_polygon_sprite(s : Vector2 = size, order : int = 0) -> Polygon2D: - var sprite = Polygon2D.new() - sprite.polygon = PackedVector2Array([ - Vector2(0,0), - Vector2(s.x, 0), - Vector2(s.x, s.y), - Vector2(0, s.y), - ]) - - sprite.z_index = -100 + order - - add_child(sprite) - - return sprite - - -func is_in_garden(point : Vector2) -> bool: - return planet_data.is_in_garden(point) - -func is_there_contamination(point : Vector2) -> bool: - return planet_data.get_contamination(point) < 0.5 diff --git a/stages/terrain/planet/scripts/planet.gd b/stages/terrain/planet/scripts/planet.gd index 6e5fa93..80de363 100644 --- a/stages/terrain/planet/scripts/planet.gd +++ b/stages/terrain/planet/scripts/planet.gd @@ -8,7 +8,17 @@ signal pass_day_ended(planet : Planet) const PASS_DAY_ANIMATION_TIME : float = 1.5 const DEFAULT_DAY_LIMIT : int = 7 -const PLANET_TEXTURE_SCALE : float = 5.0 + +const TILE_SET : TileSet = preload("res://stages/terrain/planet/resources/planet_tileset.tres") +const TILE_SCALE = 1 +const TILE_SIZE : int = roundi(TILE_SET.tile_size.x * TILE_SCALE) +const GROUND_TILE_MAP_MATERIAL : Material = preload("res://stages/terrain/planet/resources/materials/ground_planet_tilemap.tres") +const CONTAMINATION_TILE_MAP_MATERIAL : Material = preload("res://stages/terrain/planet/resources/materials/contamination_planet_tilemap.tres") +const ORIGIN_CHUNK_HOLE_RADIUS = 5 +const CHUNK_TILE_SIZE : int = 20 +const CHUNK_SIZE = CHUNK_TILE_SIZE * TILE_SIZE +const CHUNK_LOAD_DISTANCE : int = 1 +const CHUNK_UNLOAD_DISTANCE : int = 2 @export_group("Loot") @export var first_loot_number : int = 3 @@ -19,157 +29,178 @@ var data : PlanetData var contamination_texture : ImageTexture var day_limit = DEFAULT_DAY_LIMIT +var rock_layer : RockLayer +var ground_layer : GroundLayer +var decontamination_layer : DecontaminationLayer var garden : Garden = null -var generated_chunks_objects : Array[Vector2i] = [] +var generated_chunks : Dictionary[String,Chunk] = {} + +func _init(): + data = GameInfo.game_data.current_planet_data func _ready(): - data = GameInfo.game_data.current_planet_data - - entity_container.position = PlanetData.DEFAULT_GARDEN_SIZE/2 - load_entities(data.entities_saved_data) + entity_container.position = TILE_SIZE * CHUNK_TILE_SIZE * Vector2.ONE / 2 + load_entities(data.entities_saved_data) - var plants : Array[Plant] = [] - for e in entity_container.get_children(): - if e is Plant: - plants.append(e) + var plants : Array[Plant] = [] + for e in entity_container.get_children(): + if e is Plant: + plants.append(e) - garden = Garden.new(data, plants) - add_child(garden) + garden = Garden.new(data, plants) + add_child(garden) - if len(GameInfo.game_data.unlocked_plant_types) == 0: - quota_reward.trigger_reward() + if len(GameInfo.game_data.unlocked_plant_types) == 0: + quota_reward.trigger_reward() - generate_first_entities() + generate_first_entities() - AudioManager.enter_planet() + AudioManager.enter_planet() - if player: - generate_near_chunks(player) + ground_layer = GroundLayer.new(self) + add_child(ground_layer) + rock_layer = RockLayer.new(self) + add_child(rock_layer) + decontamination_layer = DecontaminationLayer.new(self) + add_child(decontamination_layer) + + if player: + generate_near_chunks(player) func _process(_d): - if player: - generate_near_chunks(player) + if player: + generate_near_chunks(player) + remove_far_chunks(player) -# queue_redraw() +# queue_redraw() # func _draw(): -# var factor = 20 -# for x in range(terrain_size.x / factor): -# for y in range(terrain_size.y / factor): -# var point = Vector2(x, y) * factor +# var factor = 20 +# for x in range(terrain_size.x / factor): +# for y in range(terrain_size.y / factor): +# var point = Vector2(x, y) * factor -# draw_circle( -# point, -# factor/10, -# Color.BLUE if garden.is_there_contamination(point) else Color.RED, -# true -# ) +# draw_circle( +# point, +# factor/10, +# Color.BLUE if garden.is_there_contamination(point) else Color.RED, +# true +# ) #region ------------------ Generation ------------------ func generate_first_entities(): - if not (Vector2i.ZERO in data.generated_chunk_entities): - # Generate shovel - drop_item(Shovel.new(), PlanetData.DEFAULT_GARDEN_SIZE/2 + Vector2(0, 100)) + if not (Vector2i.ZERO in data.generated_chunk_entities): + # Generate shovel + drop_item(Shovel.new(), entity_container.global_position + Vector2(0, 100)) - # Generate first loots - generate_loot(first_loot_number) - data.generated_chunk_entities.append(Vector2i.ZERO) +func get_chunk_key(coord) -> String: + return "%d:%d" % [coord.x, coord.y] func generate_near_chunks(p : Player): - var player_chunk_coord = Vector2i( - floor(p.global_position.x / PlanetData.DEFAULT_GARDEN_SIZE.x), - floor(p.global_position.y / PlanetData.DEFAULT_GARDEN_SIZE.y) - ) - for x in [-1, 0, 1]: - for y in [-1, 0, 1]: - var coord = Vector2i(x,y) + player_chunk_coord - if coord != Vector2i.ZERO and generated_chunks_objects.find(coord) == -1: - generate_chunk(coord) + 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)): + generate_chunk(coord) + +func remove_far_chunks(p : Player): + 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 + if player_chunk_coord.distance_to(chunk_coord) > CHUNK_UNLOAD_DISTANCE: + remove_chunk(chunk) func generate_chunk(coord : Vector2i): - if generated_chunks_objects.find(coord) == -1: - generated_chunks_objects.append(coord) - var new_chunk = Chunk.new( - coord, - PlanetData.DEFAULT_GARDEN_SIZE, - self, - (data.generated_chunk_entities.find(coord) != -1) - ) - add_child(new_chunk) - data.generated_chunk_entities.append(coord) + var chunk_data := data.get_or_create_chunk_data(coord) + if coord == Vector2i(0,0): + create_hole_in_chunk(chunk_data, ORIGIN_CHUNK_HOLE_RADIUS) + var chunk_key = get_chunk_key(coord) + if not generated_chunks.has(chunk_key): + var new_chunk = Chunk.new( + chunk_data, + self + ) + generated_chunks[chunk_key] = new_chunk + add_child(new_chunk) + data.generated_chunk_entities.append(coord) + +func create_hole_in_chunk(chunk_data : ChunkData, hole_radius : int): + var hole_center = Vector2i.ONE * floori(CHUNK_TILE_SIZE/2.) + for x in range(CHUNK_TILE_SIZE): + for y in range(CHUNK_TILE_SIZE): + var coord = Vector2i(x,y) + if coord.distance_to(hole_center) < hole_radius: + chunk_data.update_rock_tile_diff( + coord, + ChunkData.TileDiff.ABSENT + ) + +func remove_chunk(chunk : Chunk): + generated_chunks.erase(get_chunk_key(chunk.data.chunk_coord)) + chunk.unload() + chunk.queue_free() func save(): - data.entities_saved_data = save_entities() + data.entities_saved_data = save_entities() #endregion #region ------------------ Usage ------------------ func plant( - type : PlantType, - plant_position : Vector2, - plant_mutations : Array[PlantMutation] = [] + type : PlantType, + plant_position : Vector2, + plant_mutations : Array[PlantMutation] = [] ) -> bool: - if garden.is_in_garden(plant_position): - var new_plant = garden.plant(type, plant_mutations) - add_entity(new_plant, plant_position) - return true - return false + var new_plant = garden.plant(type, plant_mutations) + add_entity(new_plant, plant_position) + return true func pass_day(): - for e : Node2D in entity_container.get_children(): - if e.has_method("_start_pass_day"): - e._start_pass_day() - pass_day_started.emit(self) - await get_tree().create_timer(PASS_DAY_ANIMATION_TIME/2.).timeout + for e : Node2D in entity_container.get_children(): + if e.has_method("_start_pass_day"): + e._start_pass_day() + pass_day_started.emit(self) + await get_tree().create_timer(PASS_DAY_ANIMATION_TIME/2.).timeout - pass_day_proceeded.emit(self) - data.day += 1 - data.quota_days -= 1 - for e : Node2D in entity_container.get_children(): - if e.has_method("_pass_day"): - e._pass_day() - - pass_day_ended.emit(self) - await get_tree().create_timer(PASS_DAY_ANIMATION_TIME/2.).timeout - for e : Node2D in entity_container.get_children(): - if e.has_method("_end_pass_day"): - e._end_pass_day() + pass_day_proceeded.emit(self) + data.day += 1 + data.quota_days -= 1 + for e : Node2D in entity_container.get_children(): + if e.has_method("_pass_day"): + e._pass_day() + + pass_day_ended.emit(self) + await get_tree().create_timer(PASS_DAY_ANIMATION_TIME/2.).timeout + for e : Node2D in entity_container.get_children(): + if e.has_method("_end_pass_day"): + e._end_pass_day() - garden.update_garden_score() + garden.update_garden_score() - if data.garden_score >= data.get_quota_score(): - reach_quota() - elif data.quota_days <= 0: - day_limit_exceed.emit(self) + if data.garden_score >= data.get_quota_score(): + reach_quota() + elif data.quota_days <= 0: + day_limit_exceed.emit(self) - save() - -func generate_loot(number : int): - for i in range(number): - var loot : UndergroundLoot = (UndergroundLootData.SCENE.instantiate() as UndergroundLoot) - loot.item_number = loot_item_number.pick_random() - - var loot_random_range = UndergroundLoot.LOOTED_ITEM_RANDOM_RANGE - - add_entity( - loot, - Vector2( - randf_range(loot_random_range, garden.size.x), - randf_range(loot_random_range, garden.size.y) - ) - ) + save() func reach_quota(): - data.quota += 1 - quota_reward.trigger_reward() - await quota_reward.reward_chosen - garden.update_garden_score() - if data.garden_score >= data.get_quota_score(): - reach_quota() - data.quota_days = data.get_quota_duration() + data.quota += 1 + quota_reward.trigger_reward() + await quota_reward.reward_chosen + garden.update_garden_score() + if data.garden_score >= data.get_quota_score(): + reach_quota() + data.quota_days = data.get_quota_duration() #endregion diff --git a/stages/terrain/planet/scripts/planet_data.gd b/stages/terrain/planet/scripts/planet_data.gd index 444e115..7cdb40d 100644 --- a/stages/terrain/planet/scripts/planet_data.gd +++ b/stages/terrain/planet/scripts/planet_data.gd @@ -3,97 +3,85 @@ class_name PlanetData signal new_quota_started(planet_data : PlanetData) signal plant_gaining_score(p : Plant, amount : int) -signal contamination_updated(decontamination_surface : float) signal updated(planet_data : PlanetData) const MAX_DEFAULT_CONTAMINATION_ZONE_SURFACE = 3000 const DEFAULT_GARDEN_SIZE = Vector2(1500,1500) @export var garden_size : Vector2 = Vector2(2000,2000) -@export var garden_contamination : TerrainData +@export var planet_seed : int @export var quota : int = 0 : - set(v): - quota = v - is_quota_announced = false - new_quota_started.emit(self) + set(v): + quota = v + is_quota_announced = false + new_quota_started.emit(self) @export var is_quota_announced : bool = false @export var garden_score : int = 0 : - set(v): - garden_score = v - updated.emit(self) + set(v): + garden_score = v + updated.emit(self) @export var day : int = 1 -@export var planet_seed : int @export var quota_days : int = get_quota_duration() : - set(v): - quota_days = v - updated.emit(self) + set(v): + quota_days = v + updated.emit(self) @export var entities_saved_data : Array[EntityData] = [] @export var score_by_plant : Array[int] = [] @export var generated_chunk_entities : Array[Vector2i] @export var tutorial_step : int = 0 +@export var chunks_data : Dictionary[String, ChunkData] + func _init(_base_size : Vector2 = DEFAULT_GARDEN_SIZE): - planet_seed = randi() - garden_size = _base_size - garden_contamination = TerrainData.new(garden_size) - garden_contamination.draw_random_zone( - MAX_DEFAULT_CONTAMINATION_ZONE_SURFACE, - garden_size/2, - planet_seed - ) - contamination_updated.emit(get_decontamination_surface()) + planet_seed = randi() + garden_size = _base_size -#region ------------------ Contamination ------------------ -func impact_contamination(position : Vector2, impact_radius : float, to_value : float = 1.): - garden_contamination.draw_circle( - position, - impact_radius, - to_value - ) - contamination_updated.emit(get_decontamination_surface()) +#region ------------------ Chunks ------------------ -func is_in_garden(point): - return ( - point.x > 0 - and point.y > 0 - and point.x < garden_size.x - and point.y < garden_size.y) +func get_coord_id(coord): + return "%d:%d" % [coord.x, coord.y] -func get_contamination(point : Vector2) -> float: - return garden_contamination.get_value(point) +func has_chunk_data(coord : Vector2i) -> bool: + return chunks_data.has(get_coord_id(coord)) -func get_decontamination_coverage() -> float: - return garden_contamination.get_value_coverage() +func add_chunk_data(coord : Vector2i, data : ChunkData): + chunks_data[get_coord_id(coord)] = data -func get_decontamination_surface() -> float: - return garden_contamination.get_value_surface() +func get_chunk_data(coord : Vector2i) -> ChunkData: + return chunks_data[get_coord_id(coord)] -#endregion +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 #region ------------------ Quotas ------------------ func get_quota_score(q : int = quota) -> int: - var first_quotas = [ - 4, - 10, - 20, - 40, - 80, - ] + var first_quotas = [ + 4, + 10, + 20, + 40, + 80, + ] - if quota >= len(first_quotas): - return pow(q, 3) - else: - return first_quotas[q] + if quota >= len(first_quotas): + return pow(q, 3) + else: + return first_quotas[q] func get_quota_duration(_q = quota) -> int: - return 7 + return 7 #endregion #region ------------------ Score ------------------ func plant_has_gained_score(plant : Plant, amount : int): - plant_gaining_score.emit(plant, amount) + plant_gaining_score.emit(plant, amount) #endregion - + diff --git a/stages/terrain/planet/scripts/terrain_data.gd b/stages/terrain/planet/scripts/terrain_data.gd deleted file mode 100644 index f8c50fa..0000000 --- a/stages/terrain/planet/scripts/terrain_data.gd +++ /dev/null @@ -1,105 +0,0 @@ -extends Resource -class_name TerrainData - -const UNIT_PER_PIXEL = 30 - -@export var image : Image -@export var image_size : Vector2i - -func _init(terrain_size : Vector2): - image_size = terrain_size / UNIT_PER_PIXEL - image = Image.create( - image_size.x, - image_size.y, - false, - Image.Format.FORMAT_L8 - ) - -func draw_random_zone( - zone_max_surface : float, - zone_position : Vector2i, - random_seed : int, -): - var noise: Noise = FastNoiseLite.new() - noise.seed = random_seed - noise.noise_type = FastNoiseLite.TYPE_CELLULAR - noise.frequency = 0.1 - - var noise_image_size : Vector2i = Vector2i.ONE * (image_size) - var noise_image_center = noise_image_size / 2 - - var noise_image = noise.get_image( - noise_image_size.x, - noise_image_size.y, - 1.0, - ) - - ImageTools.flatten(noise_image, 0.5) - - ImageTools.draw_circle( - noise_image, - noise_image_center, - int(round(80./float(UNIT_PER_PIXEL))), - Color.WHITE, - ) - - var random_step = 1 - var zone_radius = noise_image_size.x - random_step - while get_value_surface(noise_image) > zone_max_surface: - zone_radius -= random_step - ImageTools.draw_circle( - noise_image, - noise_image_center, - zone_radius, - Color.BLACK, - true - ) - - image.blit_rect( - noise_image, - Rect2i( - Vector2i.ZERO, - noise_image_size - ), - Vector2i(zone_position / UNIT_PER_PIXEL) - noise_image_size/2 - ) - -func draw_circle(position : Vector2, impact_radius : float, to_value : float = 1.): - ImageTools.draw_circle( - image, - position / UNIT_PER_PIXEL, - roundi(impact_radius / UNIT_PER_PIXEL), - Color(1., 1., 1., to_value) - ) - -func is_in_image(pixel_point : Vector2i): - return ( - pixel_point.x > 0 - and pixel_point.y > 0 - and pixel_point.x < image.get_width() - and pixel_point.y < image.get_height()) - -func is_in_terrain(point : Vector2): - return is_in_image(get_pixel_point(point)) - -func get_value(point : Vector2) -> float: - var pixel_point : Vector2i = get_pixel_point(point) - if (is_in_image(pixel_point)): - return image.get_pixel( - pixel_point.x, - pixel_point.y - ).r - return 0 - -func get_value_coverage(i : Image = image) -> float: - return ImageTools.get_color_coverage(i) - -func get_value_surface(i : Image = image) -> float: - return float(ImageTools.get_color_pixel_count(i)) * UNIT_PER_PIXEL - -func get_pixel_point(point : Vector2) -> Vector2i: - var vec : Vector2 = Vector2(point) / UNIT_PER_PIXEL - Vector2.ONE - return Vector2i( - roundi(vec.x + 0.5), - roundi(vec.y + 0.5) - ) diff --git a/stages/terrain/planet/scripts/terrain_data.gd.uid b/stages/terrain/planet/scripts/terrain_data.gd.uid deleted file mode 100644 index fd8489a..0000000 --- a/stages/terrain/planet/scripts/terrain_data.gd.uid +++ /dev/null @@ -1 +0,0 @@ -uid://we5pyyr1n06v diff --git a/stages/terrain/planet/scripts/tile_map_layers/decontamination_layer.gd b/stages/terrain/planet/scripts/tile_map_layers/decontamination_layer.gd new file mode 100644 index 0000000..e1f44b6 --- /dev/null +++ b/stages/terrain/planet/scripts/tile_map_layers/decontamination_layer.gd @@ -0,0 +1,33 @@ +@tool +extends PlanetLayer +class_name DecontaminationLayer + +const MATERIAL : Material = preload("res://stages/terrain/planet/resources/materials/decontamination_planet_tilemap.tres") +const DECONTAMINATION_TILE_TERRAIN_SET : int = 0 +const DECONTAMINATION_TILE_TERRAIN : int = 2 + +func setup(): + material = MATERIAL + z_index = -99 + +func place_decontamination(coord : Vector2i, save = false): + place_decontaminations([coord], save) + +func place_decontaminations(coords : Array[Vector2i], save = false): + set_cells_terrain_connect( + coords, + DECONTAMINATION_TILE_TERRAIN_SET, + DECONTAMINATION_TILE_TERRAIN + ) + if save: + for coord in coords: + var chunk_coord = Vector2i( + floori(coord.x / float(Planet.CHUNK_TILE_SIZE)), + floori(coord.y / float(Planet.CHUNK_TILE_SIZE)), + ) + (planet.data + .get_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/planet/scripts/tile_map_layers/decontamination_layer.gd.uid b/stages/terrain/planet/scripts/tile_map_layers/decontamination_layer.gd.uid new file mode 100644 index 0000000..3a1e743 --- /dev/null +++ b/stages/terrain/planet/scripts/tile_map_layers/decontamination_layer.gd.uid @@ -0,0 +1 @@ +uid://2p41t6efxudd diff --git a/stages/terrain/planet/scripts/tile_map_layers/ground_layer.gd b/stages/terrain/planet/scripts/tile_map_layers/ground_layer.gd new file mode 100644 index 0000000..4100882 --- /dev/null +++ b/stages/terrain/planet/scripts/tile_map_layers/ground_layer.gd @@ -0,0 +1,18 @@ +@tool +extends PlanetLayer +class_name GroundLayer + +const MATERIAL : Material = preload("res://stages/terrain/planet/resources/materials/ground_planet_tilemap.tres") +const GROUND_TILE_SOURCE_ID : int = 0 +const GROUND_TILE_ATLAS_COORD : Vector2i = Vector2i.ZERO + +func setup(): + material = MATERIAL + z_index = -100 + +func place_ground(tile_position : Vector2i): + set_cell( + tile_position, + GROUND_TILE_SOURCE_ID, + GROUND_TILE_ATLAS_COORD, + ) \ No newline at end of file diff --git a/stages/terrain/planet/scripts/tile_map_layers/ground_layer.gd.uid b/stages/terrain/planet/scripts/tile_map_layers/ground_layer.gd.uid new file mode 100644 index 0000000..07bce75 --- /dev/null +++ b/stages/terrain/planet/scripts/tile_map_layers/ground_layer.gd.uid @@ -0,0 +1 @@ +uid://cui423qbula4a diff --git a/stages/terrain/planet/scripts/tile_map_layers/planet_layer.gd b/stages/terrain/planet/scripts/tile_map_layers/planet_layer.gd new file mode 100644 index 0000000..0bc4d6a --- /dev/null +++ b/stages/terrain/planet/scripts/tile_map_layers/planet_layer.gd @@ -0,0 +1,36 @@ +@abstract +extends TileMapLayer +class_name PlanetLayer + +var planet : Planet +@onready var mutex : Mutex = Mutex.new() + + +func _init( + _planet : Planet = null +): + planet = _planet + +func _ready(): + tile_set = Planet.TILE_SET + scale = Vector2.ONE * Planet.TILE_SCALE + navigation_enabled = false + setup() + +func setup(): + pass + +func get_all_neighbors_cell(coord : Vector2i) -> Array[Vector2i]: + var neighbors : Array[Vector2i] = [] + for x in [-1, 0, 1]: + for y in [-1, 0, 1]: + var neighbor = Vector2i( + coord.x + x, + coord.y + y + ) + if coord != neighbor: + neighbors.append(neighbor) + return neighbors + +func has_cell(tile_position : Vector2i) -> bool: + return get_cell_source_id(tile_position) != -1 \ No newline at end of file diff --git a/stages/terrain/planet/scripts/tile_map_layers/planet_layer.gd.uid b/stages/terrain/planet/scripts/tile_map_layers/planet_layer.gd.uid new file mode 100644 index 0000000..cad9cfe --- /dev/null +++ b/stages/terrain/planet/scripts/tile_map_layers/planet_layer.gd.uid @@ -0,0 +1 @@ +uid://cyqmcmgeb76cp diff --git a/stages/terrain/planet/scripts/tile_map_layers/rock_layer.gd b/stages/terrain/planet/scripts/tile_map_layers/rock_layer.gd new file mode 100644 index 0000000..04d1fa5 --- /dev/null +++ b/stages/terrain/planet/scripts/tile_map_layers/rock_layer.gd @@ -0,0 +1,87 @@ +@tool +extends PlanetLayer +class_name RockLayer + +const MATERIAL : Material = preload("res://stages/terrain/planet/resources/materials/rock_planet_tilemap.tres") +const ROCK_TILE_TERRAIN_SET : int = 0 +const ROCK_TILE_TERRAIN : int = 0 +const CRISTAL_TILE_TERRAIN : int = 1 + +const CRISTAL_LOOT_CHANCE : float = 1 + +enum TileType { EMPTY,ROCK,CRISTAL } + +func setup(): + material = MATERIAL + z_index = 2 + +func place_rock(coord : Vector2i, type := TileType.ROCK): + if type != TileType.EMPTY: + set_cells_terrain_connect( + [coord], + ROCK_TILE_TERRAIN_SET, + ROCK_TILE_TERRAIN if type == TileType.ROCK else CRISTAL_TILE_TERRAIN + ) + +func place_rocks(coords : Array[Vector2i], type := TileType.ROCK): + if type != TileType.EMPTY: + set_cells_terrain_connect( + coords, + ROCK_TILE_TERRAIN_SET, + ROCK_TILE_TERRAIN if type == TileType.ROCK else CRISTAL_TILE_TERRAIN + ) + +func remove_rocks(coords : Array[Vector2i], save = false): + set_cells_terrain_connect( + coords, + ROCK_TILE_TERRAIN_SET, + -1 + ) + if save: + for coord in coords: + var chunk_coord = Vector2i( + floori(coord.x / float(Planet.CHUNK_TILE_SIZE)), + floori(coord.y / float(Planet.CHUNK_TILE_SIZE)), + ) + var chunk_tile_coord : Vector2i = coord - chunk_coord * Planet.CHUNK_TILE_SIZE + (planet.data + .get_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: + if len(GameInfo.game_data.unlocked_plant_types): + var loot = Seed.new( + GameInfo.game_data.unlocked_plant_types.pick_random() + ) + planet.drop_item( + loot, + coord * Planet.TILE_SIZE + Vector2i.ONE * floori(Planet.TILE_SIZE/2.), + floor(Planet.TILE_SIZE/2.) + ) + +func update_cells(coords : Array[Vector2i]): + for coord in coords: + if has_tile(coord): + place_rock(coord) + +func has_tile(coord : Vector2i) -> bool: + return has_cell(coord) + +func get_tile_type(coord : Vector2i) -> TileType: + if has_tile(coord): + return TileType.CRISTAL if get_cell_tile_data(coord).terrain == CRISTAL_TILE_TERRAIN else TileType.ROCK + return TileType.EMPTY diff --git a/stages/terrain/planet/scripts/tile_map_layers/rock_layer.gd.uid b/stages/terrain/planet/scripts/tile_map_layers/rock_layer.gd.uid new file mode 100644 index 0000000..46df1e4 --- /dev/null +++ b/stages/terrain/planet/scripts/tile_map_layers/rock_layer.gd.uid @@ -0,0 +1 @@ +uid://cjys51dllryqk diff --git a/stages/terrain/scripts/terrain.gd b/stages/terrain/scripts/terrain.gd index 7835c9a..f3bdac4 100644 --- a/stages/terrain/scripts/terrain.gd +++ b/stages/terrain/scripts/terrain.gd @@ -5,9 +5,8 @@ const BORDER_WIDTH = 100 var player : Player -@export var import_entities_from_node : Node2D = null +@export var entity_container : Node2D -@onready var entity_container : Node2D = create_entity_container() func instantiate_entity(s: PackedScene, entity_position : Vector2): var entity = s.instantiate() as Node2D @@ -23,15 +22,18 @@ func add_entity(entity : Node2D, entity_global_position : Vector2 = Vector2.ZERO else: entity.get_parent().remove_child(entity) + enroll_entity(entity) + + container.add_child(entity) + entity.global_position = entity_global_position + +func enroll_entity(entity : Node2D): if "terrain" in entity: entity.terrain = self if entity is Player: player = entity - container.add_child(entity) - entity.global_position = entity_global_position - func save_entities() -> Array[EntityData]: var saved_entities_data : Array[EntityData] = [] for e in entity_container.get_children(): @@ -42,6 +44,9 @@ func save_entities() -> Array[EntityData]: return saved_entities_data func load_entities(saved_entities_data : Array[EntityData]): + for static_entity in entity_container.get_children(): + enroll_entity(static_entity) + for save_data in saved_entities_data: var entity = save_data.load() if entity: @@ -57,14 +62,6 @@ func create_entity_container() -> Node2D: add_child(container) - if import_entities_from_node: - for child in import_entities_from_node.get_children(): - add_entity( - child, - child.global_position + (container.global_position - import_entities_from_node.global_position), - container - ) - return container func drop_item(item: Item, item_position : Vector2, random_displacement_factor = 0) -> ItemObject: diff --git a/stages/terrain/truck/truck.tscn b/stages/terrain/truck/truck.tscn index bea6a47..4d44a06 100644 --- a/stages/terrain/truck/truck.tscn +++ b/stages/terrain/truck/truck.tscn @@ -11,16 +11,17 @@ [node name="GameGui" parent="CanvasLayer" instance=ExtResource("2_dw1sv")] -[node name="TruckInterior" parent="." node_paths=PackedStringArray("import_entities_from_node") instance=ExtResource("1_ycq4y")] +[node name="TruckInterior" parent="." node_paths=PackedStringArray("entity_container") instance=ExtResource("1_ycq4y")] position = Vector2(0, 0) -import_entities_from_node = NodePath("../Entities") +entity_container = NodePath("Entities") + +[node name="Entities" type="Node2D" parent="TruckInterior"] +y_sort_enabled = true + +[node name="Player" parent="TruckInterior/Entities" instance=ExtResource("5_dw1sv")] +position = Vector2(51, 492) [node name="Camera" type="Camera2D" parent="."] position = Vector2(385, 343) script = ExtResource("2_063c3") metadata/_custom_type_script = "uid://d1nsr56bh1a1y" - -[node name="Entities" type="Node2D" parent="."] - -[node name="Player" parent="Entities" instance=ExtResource("5_dw1sv")] -position = Vector2(51, 492)