Added current inventory item visualization and improved UI management
parent
7d5f91adcb
commit
947b762774
|
@ -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"]
|
||||
|
|
|
@ -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:
|
||||
|
|
|
@ -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:
|
||||
|
|
|
@ -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()
|
||||
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())
|
||||
run(blackboard)
|
||||
print(" <- ", human_readable())
|
||||
else:
|
||||
print(" -> ", human_readable())
|
||||
run(blackboard)
|
||||
print(" <- ", human_readable())
|
||||
var running_child: Task = find_running_child()
|
||||
var extra_string: String = ""
|
||||
if running_child != null:
|
||||
extra_string = running_child.name
|
||||
|
||||
print(" -> ", human_readable(extra_string))
|
||||
run(blackboard)
|
||||
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
|
||||
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
Loading…
Reference in New Issue