Added current inventory item visualization and improved UI management

mapsaving
Yan Wittmann 2025-01-11 13:43:57 +01:00
parent 7d5f91adcb
commit 947b762774
6 changed files with 77 additions and 56 deletions

View File

@ -1,4 +1,4 @@
[gd_scene load_steps=25 format=4 uid="uid://b88asko1ugyd2"]
[gd_scene load_steps=26 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/tilemap/World.gd" id="1_k0rw8"]
@ -6,6 +6,7 @@
[ext_resource type="Script" path="res://scripts/global/CameraController.gd" id="2_k51iv"]
[ext_resource type="Material" uid="uid://ckg3be082ny3h" path="res://assets/shader/shader_vignette.tres" id="3_7waul"]
[ext_resource type="Script" path="res://scripts/player/PlayerManager.gd" id="4_1xqo1"]
[ext_resource type="Texture2D" uid="uid://1ae5agveqddp" path="res://icon.svg" id="4_o8ona"]
[ext_resource type="Script" path="res://scripts/tilemap/StepVisualization.gd" id="5_sr2su"]
[ext_resource type="Script" path="res://scripts/player/tree/BehaviorTree.gd" id="6_efs30"]
[ext_resource type="Script" path="res://scripts/player/tree/impl/base/TaskSelector.gd" id="7_1jajd"]
@ -49,53 +50,67 @@ size_flags_horizontal = 4
offset_right = 40.0
offset_bottom = 40.0
[node name="InventoryLabel" type="Label" parent="Camera2D/CanvasLayer/VBoxContainer"]
unique_name_in_owner = true
layout_mode = 2
text = "INV"
[node name="HealthBar" type="ProgressBar" parent="Camera2D/CanvasLayer/VBoxContainer"]
modulate = Color(0.787561, 0.0888135, 0.00437393, 1)
self_modulate = Color(0.788235, 0.0901961, 0.00392157, 1)
custom_minimum_size = Vector2(150, 20)
layout_mode = 2
tooltip_text = "
"
show_percentage = false
[node name="HealthLabel" type="Label" parent="Camera2D/CanvasLayer/VBoxContainer/HealthBar"]
layout_mode = 1
anchors_preset = 15
anchor_right = 1.0
anchor_bottom = 1.0
grow_horizontal = 2
grow_vertical = 2
[node name="FoodBar" type="ProgressBar" parent="Camera2D/CanvasLayer/VBoxContainer"]
modulate = Color(0.166826, 0.552224, 0.153144, 1)
self_modulate = Color(0.168627, 0.552941, 0.152941, 1)
custom_minimum_size = Vector2(0, 20)
layout_mode = 2
show_percentage = false
[node name="FoodLabel" type="Label" parent="Camera2D/CanvasLayer/VBoxContainer/FoodBar"]
layout_mode = 1
anchors_preset = 15
anchor_right = 1.0
anchor_bottom = 1.0
grow_horizontal = 2
grow_vertical = 2
[node name="TemperatureBar" type="ProgressBar" parent="Camera2D/CanvasLayer/VBoxContainer"]
modulate = Color(0.0235294, 0.0392157, 1, 1)
self_modulate = Color(0.0235294, 0.0392157, 1, 1)
custom_minimum_size = Vector2(0, 20)
layout_mode = 2
max_value = 50.0
show_percentage = false
[node name="TextureRect" type="TextureRect" parent="Camera2D/CanvasLayer/VBoxContainer"]
[node name="TemperatureLabel" type="Label" parent="Camera2D/CanvasLayer/VBoxContainer/TemperatureBar"]
layout_mode = 1
anchors_preset = 15
anchor_right = 1.0
anchor_bottom = 1.0
grow_horizontal = 2
grow_vertical = 2
[node name="HBoxContainer" type="HBoxContainer" parent="Camera2D/CanvasLayer/VBoxContainer"]
layout_mode = 2
expand_mode = 5
size_flags_horizontal = 0
size_flags_vertical = 4
[node name="TemperatureLabel" type="Label" parent="Camera2D/CanvasLayer/VBoxContainer/HBoxContainer"]
layout_mode = 2
theme_override_font_sizes/font_size = 32
[node name="InventoryContentRect" type="TextureRect" parent="Camera2D/CanvasLayer/VBoxContainer/HBoxContainer"]
unique_name_in_owner = true
layout_mode = 2
texture = ExtResource("4_o8ona")
expand_mode = 2
stretch_mode = 5
[node name="HealthLabel" type="Label" parent="Camera2D/CanvasLayer"]
offset_left = 1.0
offset_top = 26.0
offset_right = 151.0
offset_bottom = 49.0
[node name="FoodLabel" type="Label" parent="Camera2D/CanvasLayer"]
offset_top = 50.0
offset_right = 150.0
offset_bottom = 73.0
[node name="TemperatureLabel" type="Label" parent="Camera2D/CanvasLayer"]
offset_top = 74.0
offset_right = 150.0
offset_bottom = 97.0
[node name="Tileset" type="Node2D" parent="."]
script = ExtResource("1_k0rw8")
@ -116,7 +131,7 @@ tile_map_data = PackedByteArray("AAAQAA4AAwAAAAAAAAA=")
tile_set = ExtResource("1_vlccq")
[node name="TemperatureLayer" type="TileMapLayer" parent="Tileset"]
tile_map_data = PackedByteArray("AAAAAAAAAgABAAAAAAAsAAYAAgABAAAAAAApAAYAAgABAAAAAAAqAAYAAgABAAAAAAArAAYAAgABAAAAAAAtAAYAAgABAAAAAAAuAAYAAgABAAAAAAAvAAYAAgABAAAAAAAwAAYAAgABAAAAAAAwAAcAAgABAAAAAAAvAAcAAgABAAAAAAAuAAcAAgABAAAAAAAtAAcAAgABAAAAAAAsAAcAAgABAAAAAAArAAcAAgABAAAAAAAqAAcAAgABAAAAAAAqAAgAAgABAAAAAAAqAAkAAgABAAAAAAArAAkAAgABAAAAAAAsAAkAAgABAAAAAAAtAAkAAgABAAAAAAAuAAkAAgABAAAAAAAuAAgAAgABAAAAAAAvAAgAAgABAAAAAAAwAAgAAgABAAAAAAAtAAgAAgABAAAAAAAsAAgAAgABAAAAAAArAAgAAgABAAAAAAALAAsAAgAAAAAAAAALAAwAAgAAAAAAAAALAA0AAgAAAAAAAAALAA4AAgAAAAAAAAALAA8AAgAAAAAAAAALABAAAgAAAAAAAAALABEAAgAAAAAAAAAMAAsAAgAAAAAAAAAMAAwAAgAAAAAAAAAMAA0AAgAAAAAAAAAMAA4AAgAAAAAAAAAMAA8AAgAAAAAAAAAMABAAAgAAAAAAAAAMABEAAgAAAAAAAAANAAsAAgAAAAAAAAANAAwAAgAAAAAAAAANAA0AAgAAAAAAAAANAA4AAgAAAAAAAAANAA8AAgAAAAAAAAANABAAAgAAAAAAAAANABEAAgAAAAAAAAAOAAsAAgAAAAAAAAAOAAwAAgAAAAAAAAAOAA0AAgABAAAAAAAOAA4AAgABAAAAAAAOAA8AAgABAAAAAAAOABAAAgABAAAAAAAOABEAAgAAAAAAAAAPAAsAAgAAAAAAAAAPAAwAAgAAAAAAAAAPAA0AAgABAAAAAAAPAA4AAgABAAAAAAAPAA8AAgABAAAAAAAPABAAAgABAAAAAAAPABEAAgAAAAAAAAAQAAsAAgAAAAAAAAAQAAwAAgAAAAAAAAAQAA0AAgABAAAAAAAQAA4AAgABAAAAAAAQAA8AAgABAAAAAAAQABAAAgABAAAAAAAQABEAAgAAAAAAAAARAAsAAgAAAAAAAAARAAwAAgAAAAAAAAARAA0AAgABAAAAAAARAA4AAgABAAAAAAARAA8AAgABAAAAAAARABAAAgABAAAAAAARABEAAgAAAAAAAAASAAsAAgAAAAAAAAASAAwAAgAAAAAAAAASAA0AAgABAAAAAAASAA4AAgABAAAAAAASAA8AAgABAAAAAAASABAAAgABAAAAAAASABEAAgAAAAAAAAATAAsAAgAAAAAAAAATAAwAAgAAAAAAAAATAA0AAgAAAAAAAAATAA4AAgAAAAAAAAATAA8AAgAAAAAAAAATABAAAgAAAAAAAAATABEAAgAAAAAAAAAUAAsAAgAAAAAAAAAUAAwAAgAAAAAAAAAUAA0AAgAAAAAAAAAUAA4AAgAAAAAAAAAUAA8AAgAAAAAAAAAUABAAAgAAAAAAAAAUABEAAgAAAAAAAAAVAAsAAgAAAAAAAAAVAAwAAgAAAAAAAAAVAA0AAgAAAAAAAAAVAA4AAgAAAAAAAAAVAA8AAgAAAAAAAAAVABAAAgAAAAAAAAAVABEAAgAAAAAAAAA=")
tile_map_data = PackedByteArray("AAAAAAAAAgABAAAAAAAsAAYAAgABAAAAAAApAAYAAgABAAAAAAAqAAYAAgABAAAAAAArAAYAAgABAAAAAAAtAAYAAgABAAAAAAAuAAYAAgABAAAAAAAvAAYAAgABAAAAAAAwAAYAAgABAAAAAAAwAAcAAgABAAAAAAAvAAcAAgABAAAAAAAuAAcAAgABAAAAAAAtAAcAAgABAAAAAAAsAAcAAgABAAAAAAArAAcAAgABAAAAAAAqAAcAAgABAAAAAAAqAAgAAgABAAAAAAAqAAkAAgABAAAAAAArAAkAAgABAAAAAAAsAAkAAgABAAAAAAAtAAkAAgABAAAAAAAuAAkAAgABAAAAAAAuAAgAAgABAAAAAAAvAAgAAgABAAAAAAAwAAgAAgABAAAAAAAtAAgAAgABAAAAAAAsAAgAAgABAAAAAAArAAgAAgABAAAAAAAOAAwAAgAAAAAAAAAOAA0AAgABAAAAAAAOAA4AAgABAAAAAAAOAA8AAgABAAAAAAAPAAwAAgAAAAAAAAAPAA0AAgABAAAAAAAPAA4AAgABAAAAAAAPAA8AAgABAAAAAAAQAAwAAgAAAAAAAAAQAA0AAgABAAAAAAAQAA4AAgABAAAAAAAQAA8AAgABAAAAAAARAAsAAgAAAAAAAAARAAwAAgAAAAAAAAARAA0AAgABAAAAAAARAA4AAgABAAAAAAARAA8AAgABAAAAAAASAAsAAgAAAAAAAAASAAwAAgAAAAAAAAASAA0AAgABAAAAAAASAA4AAgABAAAAAAASAA8AAgABAAAAAAATAAsAAgAAAAAAAAATAAwAAgAAAAAAAAATAA0AAgAAAAAAAAATAA4AAgAAAAAAAAATAA8AAgAAAAAAAAAUAAsAAgAAAAAAAAAUAAwAAgAAAAAAAAAUAA0AAgAAAAAAAAAUAA4AAgAAAAAAAAAUAA8AAgAAAAAAAAAVAAsAAgAAAAAAAAAVAAwAAgAAAAAAAAAVAA0AAgAAAAAAAAA=")
tile_set = ExtResource("1_vlccq")
[node name="NavigationVisualization" type="TileMapLayer" parent="Tileset"]

View File

@ -24,7 +24,6 @@ func _ready() -> void:
world.step_visualizer.game_manager = self
world.step_visualizer.world = world
update_bars()
$Camera2D/CanvasLayer/VBoxContainer/TextureRect.texture = world.tilemap_interactive.get_cell_texture(tilemap_types.OBJECT_I_BOAT_PART_CHEST)
# game_ticker.start()
@ -66,18 +65,18 @@ func update_bars() -> void:
if health_bar != null:
health_bar.max_value = player.max_health
health_bar.value = clamp(player.health, 0, 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/VBoxContainer/HealthBar/HealthLabel.text = str(health_bar.value) + "/" + str(player.max_health)
$Camera2D/CanvasLayer/VBoxContainer/HealthBar/HealthLabel.add_theme_color_override("font_color", Color(1, 1, 1))
if food_bar != null:
food_bar.max_value = player.max_food
food_bar.value = clamp(player.food, 0, player.max_food)
$Camera2D/CanvasLayer/FoodLabel.text = str(food_bar.value) + "/" + str(player.max_food)
$Camera2D/CanvasLayer/VBoxContainer/FoodBar/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)
$Camera2D/CanvasLayer/VBoxContainer/TemperatureBar/TemperatureLabel.text = str(temperature_bar.value) + "/" + str(player.temperature_set_buff_value)
func toggle_temperature_layer() -> void:

View File

@ -1,8 +1,6 @@
class_name PlayerManager
extends Node
@onready var inventory_label: Label = %InventoryLabel
@export var max_health: int = 100
# food system
@export var max_food: int = 100
@ -75,10 +73,11 @@ func update_board() -> void:
# decide what direction the player is facing tilemap_types.PLAYER_DOWN, ...
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))
if inventory_slot and inventory_slot != tilemap_types.EMPTY:
inventory_label.text = str(inventory_slot)
%InventoryContentRect.texture = game_manager.world.tilemap_interactive.get_cell_texture(inventory_slot)
else:
inventory_label.text = "empty"
%InventoryContentRect.texture = null
# SECTION: inventory system
@ -209,7 +208,11 @@ 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) -> void:
if temperature_buff_timer > 0:
temperature_buff_timer -= 1
return
if cell_temperature == 0:
temperature_timer = 0
elif temperature_timer > temperature_endure:

View File

@ -17,22 +17,14 @@ func _ready() -> void:
func internal_run(blackboard: Dictionary) -> void:
blackboard["current_task"] = self
if status == RUNNING:
var running_child: Task = find_running_child()
var extra_string: String = ""
if running_child != null:
print(" -> ", human_readable(running_child.name))
running_child.internal_run(blackboard)
print(" <- ", human_readable(running_child.name))
status = running_child.status
return
else:
print(" -> ", human_readable())
extra_string = running_child.name
print(" -> ", human_readable(extra_string))
run(blackboard)
print(" <- ", human_readable())
else:
print(" -> ", human_readable())
run(blackboard)
print(" <- ", human_readable())
print(" <- ", human_readable(extra_string))
func find_running_child() -> Task:
@ -48,6 +40,16 @@ func run_child(blackboard: Dictionary, p_child: Task) -> void:
status = RUNNING
func slice_at_child(start_child: Task) -> Array:
var children: Array[Node] = get_children()
if start_child == null:
return children
var start_index: int = children.find(start_child)
if start_index == -1:
return children
return children.slice(start_index, children.size())
func run(blackboard: Dictionary) -> void:
pass

View File

@ -2,7 +2,8 @@ class_name TaskSelector
extends Task
func run(blackboard: Dictionary) -> void:
for c in self.get_children():
var running_child: Task = find_running_child()
for c in slice_at_child(running_child):
run_child(blackboard, c)
if c.status == SUCCESS_STOP:
c.status = SUCCESS

View File

@ -2,7 +2,8 @@ class_name TaskSequence
extends Task
func run(blackboard: Dictionary) -> void:
for c in self.get_children():
var running_child: Task = find_running_child()
for c in slice_at_child(running_child):
run_child(blackboard, c)
if c.status == SUCCESS_STOP:
c.status = SUCCESS