Compare commits

...

3 Commits

Author SHA1 Message Date
Yan Wittmann 7d5f91adcb Fixed temperature bar 2025-01-11 13:15:28 +01:00
Yan Wittmann 5c0fc2beed Merge remote-tracking branch 'origin/main'
# Conflicts:
#	project/scripts/global/GameManager.gd
#	project/scripts/player/PlayerManager.gd
2025-01-11 13:09:54 +01:00
Yan Wittmann 30ee500ae9 Started temperature implementation 2025-01-11 12:58:45 +01:00
17 changed files with 463 additions and 234 deletions

View File

@ -1,4 +1,4 @@
[gd_scene load_steps=16 format=4 uid="uid://b88asko1ugyd2"] [gd_scene load_steps=25 format=4 uid="uid://b88asko1ugyd2"]
[ext_resource type="Script" path="res://scripts/global/GameManager.gd" id="1_eeg2d"] [ext_resource type="Script" path="res://scripts/global/GameManager.gd" id="1_eeg2d"]
[ext_resource type="Script" path="res://scripts/tilemap/World.gd" id="1_k0rw8"] [ext_resource type="Script" path="res://scripts/tilemap/World.gd" id="1_k0rw8"]
@ -14,7 +14,16 @@
[ext_resource type="Script" path="res://scripts/player/tree/impl/base/GoToWhileRunningSuccessStop.gd" id="10_4v1m1"] [ext_resource type="Script" path="res://scripts/player/tree/impl/base/GoToWhileRunningSuccessStop.gd" id="10_4v1m1"]
[ext_resource type="Script" path="res://scripts/player/tree/impl/game/inventory/TaskEatFoodFromInventory.gd" id="10_70s0w"] [ext_resource type="Script" path="res://scripts/player/tree/impl/game/inventory/TaskEatFoodFromInventory.gd" id="10_70s0w"]
[ext_resource type="Script" path="res://scripts/player/tree/impl/game/critical_survival/TaskCheckFoodCritical.gd" id="10_sf2pi"] [ext_resource type="Script" path="res://scripts/player/tree/impl/game/critical_survival/TaskCheckFoodCritical.gd" id="10_sf2pi"]
[ext_resource type="Script" path="res://scripts/player/tree/impl/game/inventory/TaskPickupBerry.gd" id="13_mljce"] [ext_resource type="Script" path="res://scripts/player/tree/impl/game/critical_survival/TaskFindClosestFood.gd" id="13_60fwc"]
[ext_resource type="Script" path="res://scripts/player/tree/impl/game/inventory/TaskPickupTheBerry.gd" id="15_ccdxl"]
[ext_resource type="Script" path="res://scripts/player/tree/impl/game/critical_survival/TaskCheckTemperatureCold.gd" id="16_e38ya"]
[ext_resource type="Script" path="res://scripts/player/tree/impl/game/critical_survival/TaskCheckTemperatureNoBuff.gd" id="17_4plsj"]
[ext_resource type="Script" path="res://scripts/player/tree/impl/game/inventory/TaskUseStickFromInventory.gd" id="18_22dkn"]
[ext_resource type="Script" path="res://scripts/player/tree/impl/game/critical_survival/TaskFindClosestStick.gd" id="19_1orqu"]
[ext_resource type="Script" path="res://scripts/player/tree/impl/base/GoToRunning.gd" id="20_6aw6j"]
[ext_resource type="Script" path="res://scripts/player/tree/impl/game/inventory/TaskPickupStick.gd" id="20_uw2ce"]
[ext_resource type="Script" path="res://scripts/player/tree/impl/game/camp/TaskFindCamp.gd" id="21_cseat"]
[ext_resource type="Script" path="res://scripts/player/tree/impl/game/critical_survival/TaskFindClosestWarmTile.gd" id="21_np756"]
[node name="Island-scene" type="Node2D"] [node name="Island-scene" type="Node2D"]
script = ExtResource("1_eeg2d") script = ExtResource("1_eeg2d")
@ -99,7 +108,7 @@ tile_map_data = PackedByteArray("AAAOAAkAAQACAAAAAAANAAkAAQACAAAAAAANAAoAAQACAAA
tile_set = ExtResource("1_vlccq") tile_set = ExtResource("1_vlccq")
[node name="InteractiveObjectsLayer" type="TileMapLayer" parent="Tileset"] [node name="InteractiveObjectsLayer" type="TileMapLayer" parent="Tileset"]
tile_map_data = PackedByteArray("AAAKABkAAQAAAAQAAAAUAAYAAQADAAEAAAAXAAYAAQADAAAAAAAJAAkAAQADAAEAAAAFAAgAAQADAAEAAAAFAAwAAQADAAEAAAAJAAwAAQADAAEAAAAYABAAAQACAAQAAAARAAYAAQAEAAAAAAARABEAAQAGAAIAAAAQABEAAQAGAAEAAAAcABUAAQABAAEAAABCACMAAQACAAEAAABdAAkAAQACAAIAAABXADMAAQABAAIAAAA7ADUAAQADAAIAAAA8AAQAAQAEAAIAAAA=") tile_map_data = PackedByteArray("AAAKABkAAQAAAAQAAAAUAAYAAQADAAEAAAAXAAYAAQADAAAAAAAJAAkAAQADAAEAAAAFAAgAAQADAAEAAAAFAAwAAQADAAEAAAAJAAwAAQADAAEAAAAYABAAAQACAAQAAAARABEAAQAGAAIAAAAQABEAAQAGAAEAAAAcABUAAQABAAEAAABCACMAAQACAAEAAABdAAkAAQACAAIAAABXADMAAQABAAIAAAA7ADUAAQADAAIAAAA8AAQAAQAEAAIAAAAPAAkAAQAEAAAAAAA=")
tile_set = ExtResource("1_vlccq") tile_set = ExtResource("1_vlccq")
[node name="PlayerLayer" type="TileMapLayer" parent="Tileset"] [node name="PlayerLayer" type="TileMapLayer" parent="Tileset"]
@ -107,7 +116,7 @@ tile_map_data = PackedByteArray("AAAQAA4AAwAAAAAAAAA=")
tile_set = ExtResource("1_vlccq") tile_set = ExtResource("1_vlccq")
[node name="TemperatureLayer" type="TileMapLayer" parent="Tileset"] [node name="TemperatureLayer" type="TileMapLayer" parent="Tileset"]
tile_map_data = PackedByteArray("AAAAAAAAAgABAAAAAAAsAAYAAgABAAAAAAApAAYAAgABAAAAAAAqAAYAAgABAAAAAAArAAYAAgABAAAAAAAtAAYAAgABAAAAAAAuAAYAAgABAAAAAAAvAAYAAgABAAAAAAAwAAYAAgABAAAAAAAwAAcAAgABAAAAAAAvAAcAAgABAAAAAAAuAAcAAgABAAAAAAAtAAcAAgABAAAAAAAsAAcAAgABAAAAAAArAAcAAgABAAAAAAAqAAcAAgABAAAAAAAqAAgAAgABAAAAAAAqAAkAAgABAAAAAAArAAkAAgABAAAAAAAsAAkAAgABAAAAAAAtAAkAAgABAAAAAAAuAAkAAgABAAAAAAAuAAgAAgABAAAAAAAvAAgAAgABAAAAAAAwAAgAAgABAAAAAAAtAAgAAgABAAAAAAAsAAgAAgABAAAAAAArAAgAAgABAAAAAAA=") tile_map_data = PackedByteArray("AAAAAAAAAgABAAAAAAAsAAYAAgABAAAAAAApAAYAAgABAAAAAAAqAAYAAgABAAAAAAArAAYAAgABAAAAAAAtAAYAAgABAAAAAAAuAAYAAgABAAAAAAAvAAYAAgABAAAAAAAwAAYAAgABAAAAAAAwAAcAAgABAAAAAAAvAAcAAgABAAAAAAAuAAcAAgABAAAAAAAtAAcAAgABAAAAAAAsAAcAAgABAAAAAAArAAcAAgABAAAAAAAqAAcAAgABAAAAAAAqAAgAAgABAAAAAAAqAAkAAgABAAAAAAArAAkAAgABAAAAAAAsAAkAAgABAAAAAAAtAAkAAgABAAAAAAAuAAkAAgABAAAAAAAuAAgAAgABAAAAAAAvAAgAAgABAAAAAAAwAAgAAgABAAAAAAAtAAgAAgABAAAAAAAsAAgAAgABAAAAAAArAAgAAgABAAAAAAALAAsAAgAAAAAAAAALAAwAAgAAAAAAAAALAA0AAgAAAAAAAAALAA4AAgAAAAAAAAALAA8AAgAAAAAAAAALABAAAgAAAAAAAAALABEAAgAAAAAAAAAMAAsAAgAAAAAAAAAMAAwAAgAAAAAAAAAMAA0AAgAAAAAAAAAMAA4AAgAAAAAAAAAMAA8AAgAAAAAAAAAMABAAAgAAAAAAAAAMABEAAgAAAAAAAAANAAsAAgAAAAAAAAANAAwAAgAAAAAAAAANAA0AAgAAAAAAAAANAA4AAgAAAAAAAAANAA8AAgAAAAAAAAANABAAAgAAAAAAAAANABEAAgAAAAAAAAAOAAsAAgAAAAAAAAAOAAwAAgAAAAAAAAAOAA0AAgABAAAAAAAOAA4AAgABAAAAAAAOAA8AAgABAAAAAAAOABAAAgABAAAAAAAOABEAAgAAAAAAAAAPAAsAAgAAAAAAAAAPAAwAAgAAAAAAAAAPAA0AAgABAAAAAAAPAA4AAgABAAAAAAAPAA8AAgABAAAAAAAPABAAAgABAAAAAAAPABEAAgAAAAAAAAAQAAsAAgAAAAAAAAAQAAwAAgAAAAAAAAAQAA0AAgABAAAAAAAQAA4AAgABAAAAAAAQAA8AAgABAAAAAAAQABAAAgABAAAAAAAQABEAAgAAAAAAAAARAAsAAgAAAAAAAAARAAwAAgAAAAAAAAARAA0AAgABAAAAAAARAA4AAgABAAAAAAARAA8AAgABAAAAAAARABAAAgABAAAAAAARABEAAgAAAAAAAAASAAsAAgAAAAAAAAASAAwAAgAAAAAAAAASAA0AAgABAAAAAAASAA4AAgABAAAAAAASAA8AAgABAAAAAAASABAAAgABAAAAAAASABEAAgAAAAAAAAATAAsAAgAAAAAAAAATAAwAAgAAAAAAAAATAA0AAgAAAAAAAAATAA4AAgAAAAAAAAATAA8AAgAAAAAAAAATABAAAgAAAAAAAAATABEAAgAAAAAAAAAUAAsAAgAAAAAAAAAUAAwAAgAAAAAAAAAUAA0AAgAAAAAAAAAUAA4AAgAAAAAAAAAUAA8AAgAAAAAAAAAUABAAAgAAAAAAAAAUABEAAgAAAAAAAAAVAAsAAgAAAAAAAAAVAAwAAgAAAAAAAAAVAA0AAgAAAAAAAAAVAA4AAgAAAAAAAAAVAA8AAgAAAAAAAAAVABAAAgAAAAAAAAAVABEAAgAAAAAAAAA=")
tile_set = ExtResource("1_vlccq") tile_set = ExtResource("1_vlccq")
[node name="NavigationVisualization" type="TileMapLayer" parent="Tileset"] [node name="NavigationVisualization" type="TileMapLayer" parent="Tileset"]
@ -129,26 +138,80 @@ script = ExtResource("7_1jajd")
[node name="sl_CriticalSurvival" type="Node" parent="PlayerManager/BehaviorTree/sl_Root"] [node name="sl_CriticalSurvival" type="Node" parent="PlayerManager/BehaviorTree/sl_Root"]
script = ExtResource("7_1jajd") script = ExtResource("7_1jajd")
[node name="sl_Food" type="Node" parent="PlayerManager/BehaviorTree/sl_Root/sl_CriticalSurvival"] [node name="sq_Food" type="Node" parent="PlayerManager/BehaviorTree/sl_Root/sl_CriticalSurvival"]
script = ExtResource("7_1jajd")
[node name="sq_FoodInInventory" type="Node" parent="PlayerManager/BehaviorTree/sl_Root/sl_CriticalSurvival/sl_Food"]
script = ExtResource("9_i67mw") script = ExtResource("9_i67mw")
[node name="TaskEatFoodFromInventory" type="Node" parent="PlayerManager/BehaviorTree/sl_Root/sl_CriticalSurvival/sl_Food/sq_FoodInInventory"] [node name="TaskCheckFoodCritical" type="Node" parent="PlayerManager/BehaviorTree/sl_Root/sl_CriticalSurvival/sq_Food"]
script = ExtResource("10_70s0w")
[node name="sq_NextFood" type="Node" parent="PlayerManager/BehaviorTree/sl_Root/sl_CriticalSurvival/sl_Food"]
script = ExtResource("9_i67mw")
[node name="TaskCheckFoodCritical" type="Node" parent="PlayerManager/BehaviorTree/sl_Root/sl_CriticalSurvival/sl_Food/sq_NextFood"]
script = ExtResource("10_sf2pi") script = ExtResource("10_sf2pi")
[node name="GoToWhileRunningSuccessStop" type="Node" parent="PlayerManager/BehaviorTree/sl_Root/sl_CriticalSurvival/sl_Food/sq_NextFood"] [node name="sl_PickMostRelevantFoodSource" type="Node" parent="PlayerManager/BehaviorTree/sl_Root/sl_CriticalSurvival/sq_Food"]
script = ExtResource("7_1jajd")
[node name="sq_FoodInInventory" type="Node" parent="PlayerManager/BehaviorTree/sl_Root/sl_CriticalSurvival/sq_Food/sl_PickMostRelevantFoodSource"]
script = ExtResource("9_i67mw")
[node name="TaskEatFoodFromInventory" type="Node" parent="PlayerManager/BehaviorTree/sl_Root/sl_CriticalSurvival/sq_Food/sl_PickMostRelevantFoodSource/sq_FoodInInventory"]
script = ExtResource("10_70s0w")
[node name="sq_NextFood" type="Node" parent="PlayerManager/BehaviorTree/sl_Root/sl_CriticalSurvival/sq_Food/sl_PickMostRelevantFoodSource"]
script = ExtResource("9_i67mw")
[node name="TaskFindClosestFood" type="Node" parent="PlayerManager/BehaviorTree/sl_Root/sl_CriticalSurvival/sq_Food/sl_PickMostRelevantFoodSource/sq_NextFood"]
script = ExtResource("13_60fwc")
[node name="GoToWhileRunningSuccessStop" type="Node" parent="PlayerManager/BehaviorTree/sl_Root/sl_CriticalSurvival/sq_Food/sl_PickMostRelevantFoodSource/sq_NextFood"]
script = ExtResource("10_4v1m1") script = ExtResource("10_4v1m1")
[node name="TaskPickupBerry" type="Node" parent="PlayerManager/BehaviorTree/sl_Root/sl_CriticalSurvival/sl_Food/sq_NextFood"] [node name="TaskPickupTheBerry" type="Node" parent="PlayerManager/BehaviorTree/sl_Root/sl_CriticalSurvival/sq_Food/sl_PickMostRelevantFoodSource/sq_NextFood"]
script = ExtResource("13_mljce") script = ExtResource("15_ccdxl")
[node name="sq_Temperature" type="Node" parent="PlayerManager/BehaviorTree/sl_Root/sl_CriticalSurvival"]
script = ExtResource("9_i67mw")
[node name="TaskCheckTemperatureCold" type="Node" parent="PlayerManager/BehaviorTree/sl_Root/sl_CriticalSurvival/sq_Temperature"]
script = ExtResource("16_e38ya")
[node name="TaskCheckTemperatureNoBuff" type="Node" parent="PlayerManager/BehaviorTree/sl_Root/sl_CriticalSurvival/sq_Temperature"]
script = ExtResource("17_4plsj")
[node name="sl_PickMostRelevantTemperatureRemediation" type="Node" parent="PlayerManager/BehaviorTree/sl_Root/sl_CriticalSurvival/sq_Temperature"]
script = ExtResource("7_1jajd")
[node name="sq_HasStick" type="Node" parent="PlayerManager/BehaviorTree/sl_Root/sl_CriticalSurvival/sq_Temperature/sl_PickMostRelevantTemperatureRemediation"]
script = ExtResource("9_i67mw")
[node name="TaskUseStickFromInventory" type="Node" parent="PlayerManager/BehaviorTree/sl_Root/sl_CriticalSurvival/sq_Temperature/sl_PickMostRelevantTemperatureRemediation/sq_HasStick"]
script = ExtResource("18_22dkn")
[node name="sq_DoesNotHaveStick" type="Node" parent="PlayerManager/BehaviorTree/sl_Root/sl_CriticalSurvival/sq_Temperature/sl_PickMostRelevantTemperatureRemediation"]
script = ExtResource("9_i67mw")
[node name="TaskFindClosestStick" type="Node" parent="PlayerManager/BehaviorTree/sl_Root/sl_CriticalSurvival/sq_Temperature/sl_PickMostRelevantTemperatureRemediation/sq_DoesNotHaveStick"]
script = ExtResource("19_1orqu")
[node name="GoToRunning" type="Node" parent="PlayerManager/BehaviorTree/sl_Root/sl_CriticalSurvival/sq_Temperature/sl_PickMostRelevantTemperatureRemediation/sq_DoesNotHaveStick"]
script = ExtResource("20_6aw6j")
[node name="TaskPickupStick" type="Node" parent="PlayerManager/BehaviorTree/sl_Root/sl_CriticalSurvival/sq_Temperature/sl_PickMostRelevantTemperatureRemediation/sq_DoesNotHaveStick"]
script = ExtResource("20_uw2ce")
[node name="sq_LeaveColdArea" type="Node" parent="PlayerManager/BehaviorTree/sl_Root/sl_CriticalSurvival/sq_Temperature/sl_PickMostRelevantTemperatureRemediation"]
script = ExtResource("9_i67mw")
[node name="TaskFindClosestWarmTile" type="Node" parent="PlayerManager/BehaviorTree/sl_Root/sl_CriticalSurvival/sq_Temperature/sl_PickMostRelevantTemperatureRemediation/sq_LeaveColdArea"]
script = ExtResource("21_np756")
[node name="GoToWhileRunningSuccessStop" type="Node" parent="PlayerManager/BehaviorTree/sl_Root/sl_CriticalSurvival/sq_Temperature/sl_PickMostRelevantTemperatureRemediation/sq_LeaveColdArea"]
script = ExtResource("10_4v1m1")
[node name="sq_GoBackToCamp" type="Node" parent="PlayerManager/BehaviorTree/sl_Root/sl_CriticalSurvival/sq_Temperature/sl_PickMostRelevantTemperatureRemediation"]
script = ExtResource("9_i67mw")
[node name="TaskFindCamp" type="Node" parent="PlayerManager/BehaviorTree/sl_Root/sl_CriticalSurvival/sq_Temperature/sl_PickMostRelevantTemperatureRemediation/sq_GoBackToCamp"]
script = ExtResource("21_cseat")
[node name="GoToWhileRunningSuccessStop" type="Node" parent="PlayerManager/BehaviorTree/sl_Root/sl_CriticalSurvival/sq_Temperature/sl_PickMostRelevantTemperatureRemediation/sq_GoBackToCamp"]
script = ExtResource("10_4v1m1")
[node name="WalkUpToMouse" type="Node" parent="PlayerManager/BehaviorTree/sl_Root"] [node name="WalkUpToMouse" type="Node" parent="PlayerManager/BehaviorTree/sl_Root"]
script = ExtResource("8_s6mqc") script = ExtResource("8_s6mqc")

View File

@ -107,4 +107,3 @@ key_6={
textures/canvas_textures/default_texture_filter=0 textures/canvas_textures/default_texture_filter=0
renderer/rendering_method="gl_compatibility" renderer/rendering_method="gl_compatibility"
renderer/rendering_method.mobile="gl_compatibility" renderer/rendering_method.mobile="gl_compatibility"
environment/defaults/default_clear_color=Color(0.356863, 0.431373, 0.882353, 1)

View File

@ -5,8 +5,8 @@ extends Camera2D
@export var border_acceleration: float = 2000.0 @export var border_acceleration: float = 2000.0
@export var max_speed: float = 500.0 @export var max_speed: float = 500.0
@export var inner_border_threshold: float = 60.0 @export var inner_border_threshold: float = 0.0 # 60.0
@export var outer_border_threshold: float = 40.0 @export var outer_border_threshold: float = 0.0 # 40.0
@export var min_position: Vector2 = Vector2(0, 0) @export var min_position: Vector2 = Vector2(0, 0)
@export var max_position: Vector2 = Vector2(1375, 660) @export var max_position: Vector2 = Vector2(1375, 660)

View File

@ -7,6 +7,7 @@ var tilemap_types: TileMapTileTypes = TileMapTileTypes.new()
@onready var player: PlayerManager = $PlayerManager @onready var player: PlayerManager = $PlayerManager
@onready var camera: CameraController = $Camera2D as CameraController @onready var camera: CameraController = $Camera2D as CameraController
@onready var game_ticker: Timer = $GameTick @onready var game_ticker: Timer = $GameTick
#
@onready var health_bar: ProgressBar = $Camera2D/CanvasLayer/VBoxContainer/HealthBar @onready var health_bar: ProgressBar = $Camera2D/CanvasLayer/VBoxContainer/HealthBar
@onready var food_bar: ProgressBar = $Camera2D/CanvasLayer/VBoxContainer/FoodBar @onready var food_bar: ProgressBar = $Camera2D/CanvasLayer/VBoxContainer/FoodBar
@onready var temperature_bar: ProgressBar = $Camera2D/CanvasLayer/VBoxContainer/TemperatureBar @onready var temperature_bar: ProgressBar = $Camera2D/CanvasLayer/VBoxContainer/TemperatureBar
@ -16,73 +17,72 @@ var tilemap_navigation: TilemapNavigation = TilemapNavigation.new()
func _ready() -> void: func _ready() -> void:
tilemap_navigation.world = world tilemap_navigation.world = world
tilemap_navigation.player = player tilemap_navigation.player = player
player.game_manager = self player.game_manager = self
world.camp_manager.game_manager = self world.camp_manager.game_manager = self
world.step_visualizer.game_manager = self world.step_visualizer.game_manager = self
world.step_visualizer.world = world world.step_visualizer.world = world
update_bars() update_bars()
$Camera2D/CanvasLayer/VBoxContainer/TextureRect.texture = world.tilemap_interactive.get_cell_texture(tilemap_types.OBJECT_I_BOAT_PART_CHEST) $Camera2D/CanvasLayer/VBoxContainer/TextureRect.texture = world.tilemap_interactive.get_cell_texture(tilemap_types.OBJECT_I_BOAT_PART_CHEST)
# game_ticker.start() # game_ticker.start()
func _process(delta: float) -> void: func _process(delta: float) -> void:
if Input.is_action_just_pressed("key_1"): if Input.is_action_just_pressed("key_1"):
camera.go_to_zooming(Vector2(517.469787597656, 289.846008300781), 1.771561) camera.go_to_zooming(Vector2(517.469787597656, 289.846008300781), 1.771561)
if Input.is_action_just_pressed("key_2"): if Input.is_action_just_pressed("key_2"):
camera.go_to_zooming(Vector2(789.883972167969, 450.102813720703), 0.56015348434448) camera.go_to_zooming(Vector2(789.883972167969, 450.102813720703), 0.56015348434448)
if Input.is_action_just_pressed("key_9"): if Input.is_action_just_pressed("key_9"):
world.camp_manager.campfire_light() world.camp_manager.campfire_light()
world.camp_manager.sleep_effect() world.camp_manager.sleep_effect()
world.camp_manager.campfire_extinguish() world.camp_manager.campfire_extinguish()
if Input.is_action_just_pressed("force_game_tick"): if Input.is_action_just_pressed("force_game_tick"):
_on_game_tick_timeout() _on_game_tick_timeout()
if Input.is_action_just_pressed("key_6"): if Input.is_action_just_pressed("key_6"):
toggle_temperature_layer() toggle_temperature_layer()
func player_health_depleted(): func player_health_depleted():
# TODO # TODO
pass pass
func _on_game_tick_timeout() -> void: func _on_game_tick_timeout() -> void:
var timer_on_game_tick_timeout: PerformanceTimer = PerformanceTimer.new() var timer_on_game_tick_timeout: PerformanceTimer = PerformanceTimer.new()
timer_on_game_tick_timeout.display_name = "game tick duration" timer_on_game_tick_timeout.display_name = "game tick duration"
tilemap_navigation.game_tick_start() tilemap_navigation.game_tick_start()
world.step_visualizer.game_tick_start() world.step_visualizer.game_tick_start()
player.game_tick() player.game_tick()
tilemap_navigation.game_tick_end() tilemap_navigation.game_tick_end()
world.step_visualizer.game_tick_end() world.step_visualizer.game_tick_end()
timer_on_game_tick_timeout.stop() update_bars()
update_bars() timer_on_game_tick_timeout.stop()
func update_bars() -> void: func update_bars() -> void:
if health_bar != null: if health_bar != null:
health_bar.max_value = player.max_health health_bar.max_value = player.max_health
health_bar.value = clamp(player.health, 0, player.max_health) health_bar.value = clamp(player.health, 0, player.max_health)
$Camera2D/CanvasLayer/HealthLabel.text = str(player.health) + "/" + str(player.max_health) $Camera2D/CanvasLayer/HealthLabel.text = str(health_bar.value) + "/" + str(player.max_health)
$Camera2D/CanvasLayer/HealthLabel.add_theme_color_override("font_color", Color(1, 1, 1)) $Camera2D/CanvasLayer/HealthLabel.add_theme_color_override("font_color", Color(1, 1, 1))
if food_bar != null: if food_bar != null:
food_bar.max_value = player.max_food food_bar.max_value = player.max_food
food_bar.value = clamp(player.food, 0, player.max_food) food_bar.value = clamp(player.food, 0, player.max_food)
$Camera2D/CanvasLayer/FoodLabel.text = str(player.food) + "/" + str(player.max_food) $Camera2D/CanvasLayer/FoodLabel.text = str(food_bar.value) + "/" + str(player.max_food)
if temperature_bar != null:
temperature_bar.max_value = player.temperature_set_buff_value
temperature_bar.value = clamp(player.temperature_buff_timer, 0, player.temperature_set_buff_value)
$Camera2D/CanvasLayer/TemperatureLabel.text = str(temperature_bar.value) + "/" + str(player.temperature_set_buff_value)
if temperature_bar != null:
var temperature_value = player.temperature_endure - player.temperature_timer
temperature_bar.max_value = player.temperature_endure
temperature_bar.value = clamp(temperature_value, 0, player.temperature_endure)
$Camera2D/CanvasLayer/TemperatureLabel.text = str(player.temperature_endure) + "/" + str(player.max_temperature)
func toggle_temperature_layer() -> void: func toggle_temperature_layer() -> void:
if temperature_layer != null: if temperature_layer != null:
temperature_layer.visible = not temperature_layer.visible temperature_layer.visible = not temperature_layer.visible
print("TemperatureLayer visibility:", temperature_layer.visible) print("TemperatureLayer visibility:", temperature_layer.visible)
else: else:
print("TemperatureLayer is null!") print("TemperatureLayer is null!")

View File

@ -10,8 +10,7 @@ extends Node
@export var food_addon_per_berry: int = 100 @export var food_addon_per_berry: int = 100
@export var food_critical_threshold: int = 50 @export var food_critical_threshold: int = 50
# temperature # temperature
@export var max_temperature: int = 50 @export var temperature_set_buff_value: int = 50
@export var temperature: int
@export var temperature_damage: int = 1 @export var temperature_damage: int = 1
@export var temperature_endure: int = 50 @export var temperature_endure: int = 50
# viewing # viewing
@ -23,203 +22,215 @@ var game_manager: GameManager = null
var last_board_position: Vector2i = Vector2i(0, 0) var last_board_position: Vector2i = Vector2i(0, 0)
var board_position: Vector2i = Vector2i(0, 0): var board_position: Vector2i = Vector2i(0, 0):
set(value): set(value):
last_board_position = board_position last_board_position = board_position
board_position = value board_position = value
update_board() update_board()
@onready var behavior_tree: BehaviorTree = $BehaviorTree @onready var behavior_tree: BehaviorTree = $BehaviorTree
var food: int = max_food var food: int = max_food
# var water: int = 0 # var water: int = 0
var temperature_timer: int = 0 var temperature_buff_timer: int = 0
var health: int = max_health var temperature_timer: int = 0
var health: int = max_health
# #
var inventory_slot: Vector2i = tilemap_types.EMPTY: var inventory_slot: Vector2i = tilemap_types.EMPTY:
set(value): set(value):
inventory_slot = value inventory_slot = value
update_board() update_board()
func _ready() -> void: func _ready() -> void:
call_deferred("defer_ready") call_deferred("defer_ready")
func defer_ready() -> void: func defer_ready() -> void:
behavior_tree.game_manager = game_manager behavior_tree.game_manager = game_manager
var player_start_position: Array[Vector2i] = game_manager.world.tilemap_player.get_cells_by_type(tilemap_types.PLAYER_DOWN) var player_start_position: Array[Vector2i] = game_manager.world.tilemap_player.get_cells_by_type(tilemap_types.PLAYER_DOWN)
if len(player_start_position) > 0: if len(player_start_position) > 0:
board_position = player_start_position[0] board_position = player_start_position[0]
else: else:
push_error("No player start position found on tilemap") push_error("No player start position found on tilemap")
update_board() update_board()
func _process(delta: float) -> void: func _process(delta: float) -> void:
if Input.is_action_just_pressed("key_3"): if Input.is_action_just_pressed("key_3"):
game_manager.camera.go_to_zooming(game_manager.world.tilemap_player.cell_to_local(board_position), 2) game_manager.camera.go_to_zooming(game_manager.world.tilemap_player.cell_to_local(board_position), 2)
if Input.is_action_just_pressed("key_5"): if Input.is_action_just_pressed("key_5"):
pick_up_item(Vector2i(5, 8)) pick_up_item(Vector2i(5, 8))
pick_up_item(Vector2i(9, 9)) pick_up_item(Vector2i(9, 9))
if Input.is_action_just_pressed("key_4"): if Input.is_action_just_pressed("key_4"):
var nearest: Vector2i = find_nearest_object([game_manager.world.tilemap_types.OBJECT_I_TREE_FULL]) var nearest: Vector2i = find_nearest_object([game_manager.world.tilemap_types.OBJECT_I_TREE_FULL])
# nearest.x = nearest.x - 1 # nearest.x = nearest.x - 1
walk_towards(nearest) walk_towards(nearest)
# SECTION: board access/mangement # SECTION: board access/mangement
func update_board() -> void: func update_board() -> void:
game_manager.world.tilemap_player.clear_cells() game_manager.world.tilemap_player.clear_cells()
# decide what direction the player is facing tilemap_types.PLAYER_DOWN, ... # decide what direction the player is facing tilemap_types.PLAYER_DOWN, ...
var direction: Vector2i = find_direction(last_board_position, board_position) var direction: Vector2i = find_direction(last_board_position, board_position)
game_manager.world.tilemap_player.set_cell(board_position, tilemap_types.player_sprite_from_direction(direction)) game_manager.world.tilemap_player.set_cell(board_position, tilemap_types.player_sprite_from_direction(direction))
if inventory_slot and inventory_slot != tilemap_types.EMPTY: if inventory_slot and inventory_slot != tilemap_types.EMPTY:
inventory_label.text = str(inventory_slot) inventory_label.text = str(inventory_slot)
else: else:
inventory_label.text = "empty" inventory_label.text = "empty"
# SECTION: inventory system # SECTION: inventory system
func pick_up_item(tilemap_pos: Vector2i) -> void: func pick_up_item(tilemap_pos: Vector2i) -> void:
var pick_up_cell: TileData = game_manager.world.tilemap_interactive.get_cell(tilemap_pos) var pick_up_cell: TileData = game_manager.world.tilemap_interactive.get_cell(tilemap_pos)
if not pick_up_cell: if not pick_up_cell:
push_warning("Player trying to pick up item that does not exist at ", tilemap_pos) push_warning("Player trying to pick up item that does not exist at ", tilemap_pos)
return return
var pick_up_item_type: Vector2i = game_manager.world.tilemap_interactive.tilemap.get_cell_atlas_coords(tilemap_pos) var pick_up_item_type: Vector2i = game_manager.world.tilemap_interactive.tilemap.get_cell_atlas_coords(tilemap_pos)
# check if tile will transform into another tile upon pickup # check if tile will transform into another tile upon pickup
var tile_after_pickup_transform = null var tile_after_pickup_transform = null
var tile_drop_item: Vector2i = inventory_slot var tile_drop_item: Vector2i = inventory_slot
if tilemap_types.OBJECT_I_FILLED_BUSH == pick_up_item_type: if pick_up_item_type == tilemap_types.OBJECT_I_FILLED_BUSH:
tile_after_pickup_transform = tilemap_types.OBJECT_I_EMPTY_BUSH tile_after_pickup_transform = tilemap_types.OBJECT_I_EMPTY_BUSH
pick_up_item_type = tilemap_types.OBJECT_I_BERRY pick_up_item_type = tilemap_types.OBJECT_I_BERRY
tile_drop_item = tilemap_types.OBJECT_I_BERRY tile_drop_item = tilemap_types.OBJECT_I_BERRY
if pick_up_item_type == tilemap_types.OBJECT_I_TREE_FULL:
tile_after_pickup_transform = tilemap_types.OBJECT_I_TREE_CUT
pick_up_item_type = tilemap_types.OBJECT_I_STICK
tile_drop_item = tilemap_types.OBJECT_I_STICK
# check if the inventory slot is empty # check if the inventory slot is empty
if inventory_slot == tilemap_types.EMPTY: if inventory_slot == tilemap_types.EMPTY:
inventory_slot = pick_up_item_type inventory_slot = pick_up_item_type
if tile_after_pickup_transform: if tile_after_pickup_transform:
game_manager.world.tilemap_interactive.set_cell(tilemap_pos, tile_after_pickup_transform) game_manager.world.tilemap_interactive.set_cell(tilemap_pos, tile_after_pickup_transform)
else: else:
game_manager.world.tilemap_interactive.clear_cell(tilemap_pos) game_manager.world.tilemap_interactive.clear_cell(tilemap_pos)
print("Picked up item: ", pick_up_item_type) print("Picked up item: ", pick_up_item_type)
EventsTracker.track(EventsTracker.Event.PLAYER_PICKED_UP_ITEM, {"item": pick_up_item_type}) EventsTracker.track(EventsTracker.Event.PLAYER_PICKED_UP_ITEM, {"item": pick_up_item_type})
else: else:
# inventory is full, swap the item # inventory is full, swap the item
print("Inventory is full. Swapping item: ", inventory_slot, " with item: ", pick_up_item_type) print("Inventory is full. Swapping item: ", inventory_slot, " with item: ", pick_up_item_type)
EventsTracker.track(EventsTracker.Event.PLAYER_DROPPED_ITEM, {"item": inventory_slot}) EventsTracker.track(EventsTracker.Event.PLAYER_DROPPED_ITEM, {"item": inventory_slot})
EventsTracker.track(EventsTracker.Event.PLAYER_PICKED_UP_ITEM, {"item": pick_up_item_type}) EventsTracker.track(EventsTracker.Event.PLAYER_PICKED_UP_ITEM, {"item": pick_up_item_type})
if tile_after_pickup_transform: if tile_after_pickup_transform:
game_manager.world.tilemap_interactive.set_cell(tilemap_pos, tile_after_pickup_transform) game_manager.world.tilemap_interactive.set_cell(tilemap_pos, tile_after_pickup_transform)
var drop_location: Vector2i = game_manager.world.find_item_drop_location(tilemap_pos) var drop_location: Vector2i = game_manager.world.find_item_drop_location(tilemap_pos)
if drop_location != tilemap_types.EMPTY: if drop_location != tilemap_types.EMPTY:
game_manager.world.tilemap_interactive.set_cell(drop_location, tile_drop_item) game_manager.world.tilemap_interactive.set_cell(drop_location, tile_drop_item)
else: else:
push_warning("Could not find valid drop position for ", inventory_slot) push_warning("Could not find valid drop position for ", inventory_slot)
else: else:
game_manager.world.tilemap_interactive.set_cell(tilemap_pos, tile_drop_item) game_manager.world.tilemap_interactive.set_cell(tilemap_pos, tile_drop_item)
inventory_slot = pick_up_item_type inventory_slot = pick_up_item_type
# SECTION: player movement # SECTION: player movement
func walk_towards(position: Vector2i) -> void: func walk_towards(position: Vector2i) -> void:
var path: Array[Vector2i] = game_manager.tilemap_navigation.find_path(board_position, position) var path: Array[Vector2i] = game_manager.tilemap_navigation.find_path(board_position, position)
walk_along(path) walk_along(path)
func walk_along(path: Array[Vector2i]) -> void: func walk_along(path: Array[Vector2i]) -> void:
if len(path) > 1: if len(path) > 1:
var next_position: Vector2i = path[1]
var direction: Vector2i = find_direction(board_position, next_position) var next_position: Vector2i
move_player(direction) if path.has(board_position):
game_manager.tilemap_navigation.chosen_path = path var current_index: int = path.find(board_position)
else: if current_index < path.size() - 1:
push_warning("walk_along path is empty") next_position = path[current_index + 1]
else:
next_position = path[1]
else:
next_position = path[1]
var direction: Vector2i = find_direction(board_position, next_position)
move_player(direction)
game_manager.tilemap_navigation.chosen_path = path
else:
push_warning("walk_along path is empty")
func move_player(direction: Vector2i) -> void: func move_player(direction: Vector2i) -> void:
var new_position: Vector2 = board_position + direction var new_position: Vector2 = board_position + direction
if game_manager.world.is_walkable(new_position): if game_manager.world.is_walkable(new_position):
board_position = new_position board_position = new_position
else: else:
push_warning("Player trying to move to non-walkable position, prevented ", new_position) push_warning("Player trying to move to non-walkable position, prevented ", new_position)
func find_nearest_object(object_collection: Array[Vector2i]) -> Vector2i: func find_nearest_object(object_collection: Array[Vector2i]) -> Vector2i:
var object_positions: Array[Vector2i] = [] var object_positions: Array[Vector2i] = []
for obj in object_collection: for obj in object_collection:
object_positions.append_array(game_manager.world.tilemap_interactive.get_cells_by_type(obj)) object_positions.append_array(game_manager.world.tilemap_interactive.get_cells_by_type(obj))
if object_positions.size() == 0: if object_positions.size() == 0:
push_warning("No " + str(object_collection) + " found!") push_warning("No " + str(object_collection) + " found!")
return tilemap_types.NO_TILE_FOUND return tilemap_types.NO_TILE_FOUND
var closest_object: Vector2i = tilemap_types.NO_TILE_FOUND var closest_object: Vector2i = tilemap_types.NO_TILE_FOUND
var shortest_distance: float = 99999999 var shortest_distance: float = 99999999
for position in object_positions: for position in object_positions:
var distance: float = game_manager.tilemap_navigation.manhattan_distance(board_position, position) var distance: float = game_manager.tilemap_navigation.manhattan_distance(board_position, position)
if closest_object == tilemap_types.NO_TILE_FOUND or distance < shortest_distance: if closest_object == tilemap_types.NO_TILE_FOUND or distance < shortest_distance:
closest_object = position closest_object = position
shortest_distance = distance shortest_distance = distance
print("Find nearest " + str(object_collection) + " at:", closest_object) print("Find nearest " + str(object_collection) + " at:", closest_object)
return closest_object return closest_object
func find_direction(pos_a: Vector2i, pos_b: Vector2i) -> Vector2i: func find_direction(pos_a: Vector2i, pos_b: Vector2i) -> Vector2i:
var direction: Vector2i = Vector2i(0, 0) var direction: Vector2i = Vector2i(0, 0)
if pos_a.x < pos_b.x: if pos_a.x < pos_b.x:
direction.x = 1 direction.x = 1
elif pos_a.x > pos_b.x: elif pos_a.x > pos_b.x:
direction.x = -1 direction.x = -1
if pos_a.y < pos_b.y: if pos_a.y < pos_b.y:
direction.y = 1 direction.y = 1
elif pos_a.y > pos_b.y: elif pos_a.y > pos_b.y:
direction.y = -1 direction.y = -1
return direction return direction
# SECTION: game tick # SECTION: game tick
func get_current_temperature() -> int:
return game_manager.world.tilemap_temperature.get_custom_data(board_position, "temperature", 0) as int
func tick_handle_temperature(cell_temperature: int): func tick_handle_temperature(cell_temperature: int):
if cell_temperature == 0: if cell_temperature == 0:
temperature_timer = 0 temperature_timer = 0
elif temperature_timer > temperature_endure: elif temperature_timer > temperature_endure:
temperature_timer += cell_temperature temperature_timer += cell_temperature
health -= temperature_damage health -= temperature_damage
func tick_handle_food(): func tick_handle_food():
if food > 0: if food > 0:
food -= 1 food -= 1
if food <= 0: if food <= 0:
health -= food_damage health -= food_damage
func game_tick() -> void: func game_tick() -> void:
behavior_tree.game_tick() behavior_tree.game_tick()
var player_positon_array: Array[Vector2i] = game_manager.world.tilemap_player.get_cells_by_type(tilemap_types.PLAYER_DOWN) tick_handle_temperature(get_current_temperature())
if len(player_positon_array) > 0: tick_handle_food()
var player_positon: Vector2i = player_positon_array[0]
var cell_temperature: int = game_manager.world.tilemap_temperature.get_custom_data(player_positon, "temperature", 0) as int
tick_handle_temperature(cell_temperature)
else:
push_error("No player found on tilemap")
tick_handle_food() if health < 0:
game_manager.player_health_depleted()
if health < 0: update_board()
game_manager.player_health_depleted()
update_board()

View File

@ -0,0 +1,19 @@
class_name TaskFindCamp
extends Task
func run(blackboard: Dictionary) -> void:
var world: World = blackboard["world"]
var player: PlayerManager = blackboard["player"]
var navigation: TilemapNavigation = blackboard["navigation"]
blackboard["location_camp"] = world.camp_manager.camp
var path: Array[Vector2i] = navigation.find_path_allow_neighbors(player.board_position, world.camp_manager.camp, 99999999)
if path.size() > 0:
blackboard["path"] = path
status = SUCCESS
status_reason = "Found camp at " + str(blackboard["location_camp"])
return
status = FAILURE
status_reason = "No path found to camp " + str(blackboard["location_camp"])

View File

@ -11,27 +11,5 @@ func run(blackboard: Dictionary) -> void:
status_reason = "Player food is not critical (" + str(player.food) + " > " + str(player.food_critical_threshold) + ")" status_reason = "Player food is not critical (" + str(player.food) + " > " + str(player.food_critical_threshold) + ")"
return return
var active_foods: Array[Vector2i] = world.tilemap_interactive.get_cells_by_type_collection( status = SUCCESS
tilemap_types.OBJECT_COLLECTION_BERRY_SOURCE, player.board_position, player.view_distance) status_reason = "Player food is critical (" + str(player.food) + " <= " + str(player.food_critical_threshold) + ")"
if len(active_foods) == 0:
status = FAILURE
status_reason = "No active foods found"
return
var closest_berry: Vector2i = navigation.manhattan_distance_closest(active_foods, player.board_position)
if closest_berry == tilemap_types.NO_TILE_FOUND:
status = FAILURE
status_reason = "No closest berry found"
return
blackboard["closest_berry"] = closest_berry
var path: Array[Vector2i] = navigation.find_path_allow_neighbors(player.board_position, closest_berry, player.view_distance)
if path.size() > 0:
blackboard["path"] = path
status_reason = "Found path to closest berry"
status = SUCCESS
return
status = FAILURE
status_reason = "No path found to closest berry " + str(closest_berry)

View File

@ -0,0 +1,13 @@
class_name TaskCheckTemperatureCold
extends Task
func run(blackboard: Dictionary) -> void:
var player: PlayerManager = blackboard["player"]
if player.get_current_temperature() > 0:
status = SUCCESS
status_reason = "cold: " + str(player.get_current_temperature())
return
status = FAILURE
status_reason = "not cold: " + str(player.get_current_temperature())

View File

@ -0,0 +1,13 @@
class_name TaskCheckTemperatureNoBuff
extends Task
func run(blackboard: Dictionary) -> void:
var player: PlayerManager = blackboard["player"]
if player.temperature_buff_timer > 0:
status = FAILURE
status_reason = "Player already has a temperature buff: " + str(player.temperature_buff_timer)
return
status = SUCCESS
status_reason = "Player does not have a temperature buff"

View File

@ -0,0 +1,32 @@
class_name TaskFindClosestFood
extends Task
func run(blackboard: Dictionary) -> void:
var world: World = blackboard["world"]
var player: PlayerManager = blackboard["player"]
var navigation: TilemapNavigation = blackboard["navigation"]
var active_foods: Array[Vector2i] = world.tilemap_interactive.get_cells_by_type_collection(
tilemap_types.OBJECT_COLLECTION_BERRY_SOURCE, player.board_position, player.view_distance)
if len(active_foods) == 0:
status = FAILURE
status_reason = "No active foods found"
return
var closest_berry: Vector2i = navigation.manhattan_distance_closest(active_foods, player.board_position)
if closest_berry == tilemap_types.NO_TILE_FOUND:
status = FAILURE
status_reason = "No closest berry found"
return
blackboard["closest_berry"] = closest_berry
var path: Array[Vector2i] = navigation.find_path_allow_neighbors(player.board_position, closest_berry, player.view_distance)
if path.size() > 0:
blackboard["path"] = path
status_reason = "Found path to closest berry"
status = SUCCESS
return
status = FAILURE
status_reason = "No path found to closest berry " + str(closest_berry)

View File

@ -0,0 +1,32 @@
class_name TaskFindClosestStick
extends Task
func run(blackboard: Dictionary) -> void:
var world: World = blackboard["world"]
var player: PlayerManager = blackboard["player"]
var navigation: TilemapNavigation = blackboard["navigation"]
var sticks: Array[Vector2i] = world.tilemap_interactive.get_cells_by_type_collection(
tilemap_types.OBJECT_COLLECTION_STICK_SOURCE, player.board_position, player.view_distance)
if len(sticks) == 0:
status = FAILURE
status_reason = "No active sticks found"
return
var closest_stick: Vector2i = navigation.manhattan_distance_closest(sticks, player.board_position)
if closest_stick == tilemap_types.NO_TILE_FOUND:
status = FAILURE
status_reason = "No closest stick found"
return
blackboard["closest_stick"] = closest_stick
var path: Array[Vector2i] = navigation.find_path_allow_neighbors(player.board_position, closest_stick, player.view_distance)
if path.size() > 0:
blackboard["path"] = path
status_reason = "Found path to closest stick"
status = SUCCESS
return
status = FAILURE
status_reason = "No path found to closest stick " + str(closest_stick)

View File

@ -0,0 +1,32 @@
class_name TaskFindClosestWarmTile
extends Task
func run(blackboard: Dictionary) -> void:
var world: World = blackboard["world"]
var player: PlayerManager = blackboard["player"]
var navigation: TilemapNavigation = blackboard["navigation"]
var warm_tiles: Array[Vector2i] = world.tilemap_temperature.get_cells_by_type(
tilemap_types.TEMPERATURE_NORMAL, player.board_position, player.view_distance)
if len(warm_tiles) == 0:
status = FAILURE
status_reason = "No warm tiles found"
return
var closest_warm_tile: Vector2i = navigation.manhattan_distance_closest(warm_tiles, player.board_position)
if closest_warm_tile == tilemap_types.NO_TILE_FOUND:
status = FAILURE
status_reason = "No closest warm tile found"
return
blackboard["closest_warm_tile"] = closest_warm_tile
var path: Array[Vector2i] = navigation.find_path_allow_neighbors(player.board_position, closest_warm_tile, player.view_distance)
if path.size() > 0:
blackboard["path"] = path
status_reason = "Found path to closest warm tile"
status = SUCCESS
return
status = FAILURE
status_reason = "No path found to closest warm tile " + str(closest_warm_tile)

View File

@ -0,0 +1,11 @@
class_name TaskPickupStick
extends Task
func run(blackboard: Dictionary) -> void:
var player: PlayerManager = blackboard["player"]
var closest_stick: Vector2i = blackboard["closest_stick"]
player.pick_up_item(closest_stick)
status = SUCCESS
status_reason = "Picked up stick"

View File

@ -1,4 +1,4 @@
class_name TaskPickupBerry class_name TaskPickupTheBerry
extends Task extends Task
func run(blackboard: Dictionary) -> void: func run(blackboard: Dictionary) -> void:

View File

@ -0,0 +1,15 @@
class_name TaskUseStickFromInventory
extends Task
func run(blackboard: Dictionary) -> void:
var player: PlayerManager = blackboard["player"]
if player.inventory_slot != tilemap_types.OBJECT_I_STICK:
status = FAILURE
status_reason = "Player does not have a stick in inventory"
return
player.inventory_slot = tilemap_types.EMPTY
player.temperature_buff_timer = player.temperature_set_buff_value
status = SUCCESS
status_reason = "Player used a stick from inventory, now has temperature buff: " + str(player.temperature_buff_timer)

View File

@ -9,8 +9,18 @@ func setup() -> void:
pass pass
func get_cells_by_type(atlas_coords: Vector2i) -> Array[Vector2i]: func get_cells_by_type(
return tilemap.get_used_cells_by_id(sid, atlas_coords) atlas_coords: Vector2i,
center: Vector2i = Vector2i(-1, -1), max_distance: int = 99999999
) -> Array[Vector2i]:
var tiles_with_type: Array[Vector2i] = tilemap.get_used_cells_by_id(sid, atlas_coords)
if max_distance < 99999999:
var filtered_tiles: Array[Vector2i] = []
for tile in tiles_with_type:
if TilemapNavigation.manhattan_distance(center, tile, true) <= max_distance:
filtered_tiles.append(tile)
return filtered_tiles
return tiles_with_type
func get_cells_by_type_collection( func get_cells_by_type_collection(

View File

@ -44,6 +44,7 @@ const OBJECT_I_TREE_FULL: Vector2i = Vector2i(4, 0)
const OBJECT_I_TREE_CUT: Vector2i = Vector2i(5, 0) const OBJECT_I_TREE_CUT: Vector2i = Vector2i(5, 0)
# collections # collections
const OBJECT_COLLECTION_BERRY_SOURCE: Array[Vector2i] = [OBJECT_I_FILLED_BUSH, OBJECT_I_BERRY] const OBJECT_COLLECTION_BERRY_SOURCE: Array[Vector2i] = [OBJECT_I_FILLED_BUSH, OBJECT_I_BERRY]
const OBJECT_COLLECTION_STICK_SOURCE: Array[Vector2i] = [OBJECT_I_TREE_FULL, OBJECT_I_STICK]
const OBJECT_COLLECTION_FIREPIT: Array[Vector2i] = [OBJECT_I_FIREPIT_OFF, OBJECT_I_FIREPIT_ON] const OBJECT_COLLECTION_FIREPIT: Array[Vector2i] = [OBJECT_I_FIREPIT_OFF, OBJECT_I_FIREPIT_ON]
const OBJECT_COLLECTION_BOAT_PARTS: Array[Vector2i] = [ # @formatter:off const OBJECT_COLLECTION_BOAT_PARTS: Array[Vector2i] = [ # @formatter:off
OBJECT_I_BOAT_PART_GENERIC, OBJECT_I_BOAT_PART_GENERIC,
@ -53,7 +54,7 @@ const OBJECT_COLLECTION_BOAT_PARTS: Array[Vector2i] = [ # @formatter:off
] # @formatter:on ] # @formatter:on
# #
# temperature, sid = 2 # temperature, sid = 2
const TEMPERATURE_NORMAL: Vector2i = EMPTY const TEMPERATURE_NORMAL: Vector2i = Vector2i(2, 0)
const TEMPERATURE_COLD_1: Vector2i = Vector2i(0, 0) const TEMPERATURE_COLD_1: Vector2i = Vector2i(0, 0)
const TEMPERATURE_COLD_2: Vector2i = Vector2i(1, 0) const TEMPERATURE_COLD_2: Vector2i = Vector2i(1, 0)
# #