Added inventory UI

master
hheik 2025-09-11 19:46:12 +03:00
parent f74dcdba2c
commit cd378a9e82
26 changed files with 423 additions and 51 deletions

View File

@ -2,12 +2,19 @@ class_name Player
extends GridPosition extends GridPosition
@export var gatherer: Gatherer @export var gatherer: Gatherer
@export var entity_inventory: EntityInventory
static func is_player(node: Node) -> bool: static func is_player(node: Node) -> bool:
return node is Player || node.get_parent() is Player return node is Player || node.get_parent() is Player
func get_inventory() -> Inventory:
return entity_inventory.inventory
func _ready() -> void: func _ready() -> void:
gatherer.gathered.connect(_on_gathered) gatherer.gathered.connect(_on_gathered)
func _on_gathered(item: String, count: int): func _on_gathered(item: String, count: int):
print("gathered: ", count, " x ", item) insert_into_inventory(item, count)
func insert_into_inventory(item: String, count: int):
entity_inventory.inventory.insert(item, count)

View File

@ -1,12 +1,14 @@
[gd_scene load_steps=4 format=3 uid="uid://drs6h7ks4r2ta"] [gd_scene load_steps=5 format=3 uid="uid://drs6h7ks4r2ta"]
[ext_resource type="Texture2D" uid="uid://doscvutq8uqmd" path="res://sprites/sheet.png" id="1_72ieh"] [ext_resource type="Texture2D" uid="uid://doscvutq8uqmd" path="res://sprites/sheet.png" id="1_72ieh"]
[ext_resource type="Script" uid="uid://cvviym6gdlod8" path="res://prefabs/player/player.gd" id="1_wv1mm"] [ext_resource type="Script" uid="uid://cvviym6gdlod8" path="res://prefabs/player/player.gd" id="1_wv1mm"]
[ext_resource type="Script" uid="uid://sxo578w2yds2" path="res://prefabs/player/player_input.gd" id="2_rdx4y"] [ext_resource type="Script" uid="uid://sxo578w2yds2" path="res://prefabs/player/player_input.gd" id="2_rdx4y"]
[ext_resource type="Inventory" uid="uid://dm71wjetr4e52" path="res://prefabs/player/player_inventory.tres" id="4_binfn"]
[node name="Player" type="GridPosition" node_paths=PackedStringArray("gatherer")] [node name="Player" type="GridPosition" node_paths=PackedStringArray("gatherer", "entity_inventory")]
script = ExtResource("1_wv1mm") script = ExtResource("1_wv1mm")
gatherer = NodePath("Gatherer") gatherer = NodePath("Gatherer")
entity_inventory = NodePath("EntityInventory")
[node name="Sprite2D" type="Sprite2D" parent="."] [node name="Sprite2D" type="Sprite2D" parent="."]
texture = ExtResource("1_72ieh") texture = ExtResource("1_72ieh")
@ -29,3 +31,6 @@ grid = NodePath("..")
mover = NodePath("../Mover") mover = NodePath("../Mover")
actor = NodePath("../TurnActor") actor = NodePath("../TurnActor")
metadata/_custom_type_script = "uid://okxdlbfuvb1b" metadata/_custom_type_script = "uid://okxdlbfuvb1b"
[node name="EntityInventory" type="EntityInventory" parent="."]
inventory = ExtResource("4_binfn")

View File

@ -0,0 +1,3 @@
[gd_resource type="Inventory" format=3 uid="uid://dm71wjetr4e52"]
[resource]

View File

@ -1,7 +1,8 @@
[gd_scene load_steps=3 format=3 uid="uid://8xuvjmyjkpeo"] [gd_scene load_steps=4 format=3 uid="uid://8xuvjmyjkpeo"]
[ext_resource type="Texture2D" uid="uid://doscvutq8uqmd" path="res://sprites/sheet.png" id="1_gjkx7"]
[ext_resource type="Script" uid="uid://jd6ce3f7e1bh" path="res://prefabs/tiles/gatherable_animation.gd" id="1_jqgth"] [ext_resource type="Script" uid="uid://jd6ce3f7e1bh" path="res://prefabs/tiles/gatherable_animation.gd" id="1_jqgth"]
[ext_resource type="Texture2D" uid="uid://noksw27wlt1y" path="res://sprites/blueberry_plant.png" id="2_c8jpc"]
[ext_resource type="Texture2D" uid="uid://1udkm2j25i8o" path="res://sprites/generic_picked.png" id="3_c8jpc"]
[node name="Blueberry" type="GridPosition" node_paths=PackedStringArray("gatherable", "picked", "not_picked")] [node name="Blueberry" type="GridPosition" node_paths=PackedStringArray("gatherable", "picked", "not_picked")]
script = ExtResource("1_jqgth") script = ExtResource("1_jqgth")
@ -10,17 +11,11 @@ picked = NodePath("Picked")
not_picked = NodePath("Not Picked") not_picked = NodePath("Not Picked")
[node name="Not Picked" type="Sprite2D" parent="."] [node name="Not Picked" type="Sprite2D" parent="."]
texture = ExtResource("1_gjkx7") texture = ExtResource("2_c8jpc")
hframes = 8
vframes = 8
frame = 16
[node name="Picked" type="Sprite2D" parent="."] [node name="Picked" type="Sprite2D" parent="."]
visible = false visible = false
texture = ExtResource("1_gjkx7") texture = ExtResource("3_c8jpc")
hframes = 8
vframes = 8
frame = 17
[node name="Gatherable" type="Gatherable" parent="." node_paths=PackedStringArray("grid")] [node name="Gatherable" type="Gatherable" parent="." node_paths=PackedStringArray("grid")]
grid = NodePath("..") grid = NodePath("..")

View File

@ -1,7 +1,8 @@
[gd_scene load_steps=3 format=3 uid="uid://l72f05nek0y4"] [gd_scene load_steps=4 format=3 uid="uid://l72f05nek0y4"]
[ext_resource type="Texture2D" uid="uid://doscvutq8uqmd" path="res://sprites/sheet.png" id="1_e3ld6"] [ext_resource type="Texture2D" uid="uid://c3td3bhrbd0kp" path="res://sprites/cowberry_plant.png" id="2_ihdej"]
[ext_resource type="Script" uid="uid://jd6ce3f7e1bh" path="res://prefabs/tiles/gatherable_animation.gd" id="2_kod7n"] [ext_resource type="Script" uid="uid://jd6ce3f7e1bh" path="res://prefabs/tiles/gatherable_animation.gd" id="2_kod7n"]
[ext_resource type="Texture2D" uid="uid://1udkm2j25i8o" path="res://sprites/generic_picked.png" id="3_ihdej"]
[node name="Blueberry" type="GridPosition" node_paths=PackedStringArray("gatherable", "picked", "not_picked")] [node name="Blueberry" type="GridPosition" node_paths=PackedStringArray("gatherable", "picked", "not_picked")]
script = ExtResource("2_kod7n") script = ExtResource("2_kod7n")
@ -10,17 +11,11 @@ picked = NodePath("Picked")
not_picked = NodePath("Not Picked") not_picked = NodePath("Not Picked")
[node name="Not Picked" type="Sprite2D" parent="."] [node name="Not Picked" type="Sprite2D" parent="."]
texture = ExtResource("1_e3ld6") texture = ExtResource("2_ihdej")
hframes = 8
vframes = 8
frame = 20
[node name="Picked" type="Sprite2D" parent="."] [node name="Picked" type="Sprite2D" parent="."]
visible = false visible = false
texture = ExtResource("1_e3ld6") texture = ExtResource("3_ihdej")
hframes = 8
vframes = 8
frame = 17
[node name="Gatherable" type="Gatherable" parent="." node_paths=PackedStringArray("grid")] [node name="Gatherable" type="Gatherable" parent="." node_paths=PackedStringArray("grid")]
grid = NodePath("..") grid = NodePath("..")

View File

@ -0,0 +1,14 @@
class_name InventoryUI
extends Node
func update(inventory: Inventory):
for item in inventory.items:
var count = inventory.get_item_count(item)
update_item(item, count)
func update_item(item: String, count: int):
var child = get_node(item)
if child == null:
return
var label = child.get_node("Count") as Label
label.text = str(count)

View File

@ -0,0 +1 @@
uid://djccw7ahn8b47

16
godot/prefabs/ui/ui.gd Normal file
View File

@ -0,0 +1,16 @@
class_name UI
extends Node
@export var player: Player
@onready var inventory_ui: InventoryUI = %Inventory
func _ready():
player.entity_inventory.inventory.changed.connect(_on_player_inventory_changed)
update_inventory_ui()
func _on_player_inventory_changed():
update_inventory_ui()
func update_inventory_ui():
inventory_ui.update(player.get_inventory())

View File

@ -0,0 +1 @@
uid://ckalp7icn1f28

47
godot/prefabs/ui/ui.tscn Normal file
View File

@ -0,0 +1,47 @@
[gd_scene load_steps=5 format=3 uid="uid://blutrglw7mycx"]
[ext_resource type="Script" uid="uid://djccw7ahn8b47" path="res://prefabs/ui/inventory_ui.gd" id="1_4ieor"]
[ext_resource type="Script" uid="uid://ckalp7icn1f28" path="res://prefabs/ui/ui.gd" id="1_htiv7"]
[ext_resource type="Texture2D" uid="uid://4rxwcyoye2sa" path="res://sprites/blueberry_item.png" id="2_htiv7"]
[ext_resource type="Texture2D" uid="uid://d11rkcho3c38n" path="res://sprites/cowberry_item.png" id="3_gxjsb"]
[node name="UI" type="Control"]
layout_mode = 3
anchors_preset = 15
anchor_right = 1.0
anchor_bottom = 1.0
grow_horizontal = 2
grow_vertical = 2
script = ExtResource("1_htiv7")
[node name="PanelContainer" type="PanelContainer" parent="."]
layout_mode = 0
offset_right = 40.0
offset_bottom = 40.0
[node name="Inventory" type="VBoxContainer" parent="PanelContainer"]
unique_name_in_owner = true
layout_mode = 2
script = ExtResource("1_4ieor")
[node name="Blueberry" type="HBoxContainer" parent="PanelContainer/Inventory"]
layout_mode = 2
[node name="Item" type="TextureRect" parent="PanelContainer/Inventory/Blueberry"]
layout_mode = 2
texture = ExtResource("2_htiv7")
[node name="Count" type="Label" parent="PanelContainer/Inventory/Blueberry"]
layout_mode = 2
text = "0"
[node name="Cowberry" type="HBoxContainer" parent="PanelContainer/Inventory"]
layout_mode = 2
[node name="Item" type="TextureRect" parent="PanelContainer/Inventory/Cowberry"]
layout_mode = 2
texture = ExtResource("3_gxjsb")
[node name="Count" type="Label" parent="PanelContainer/Inventory/Cowberry"]
layout_mode = 2
text = "0"

View File

@ -1,22 +1,28 @@
[gd_scene load_steps=4 format=4 uid="uid://b3odri2wtvke4"] [gd_scene load_steps=5 format=4 uid="uid://b3odri2wtvke4"]
[ext_resource type="TileSet" uid="uid://b1ps1ww0rtkop" path="res://tilesets/background_tileset.tres" id="1_m1b5j"] [ext_resource type="TileSet" uid="uid://b1ps1ww0rtkop" path="res://tilesets/background_tileset.tres" id="1_m1b5j"]
[ext_resource type="TileSet" uid="uid://bxwohuw2p43k1" path="res://tilesets/foreground_tileset.tres" id="2_u2ss0"] [ext_resource type="TileSet" uid="uid://bxwohuw2p43k1" path="res://tilesets/foreground_tileset.tres" id="2_u2ss0"]
[ext_resource type="PackedScene" uid="uid://drs6h7ks4r2ta" path="res://prefabs/player/player.tscn" id="3_u2ss0"] [ext_resource type="PackedScene" uid="uid://drs6h7ks4r2ta" path="res://prefabs/player/player.tscn" id="3_u2ss0"]
[ext_resource type="PackedScene" uid="uid://blutrglw7mycx" path="res://prefabs/ui/ui.tscn" id="4_356oe"]
[node name="TurnManager" type="TurnManager"] [node name="TurnManager" type="TurnManager"]
[node name="Root" type="Level" parent="." node_paths=PackedStringArray("background", "foreground")] [node name="World" type="Level" parent="." node_paths=PackedStringArray("background", "foreground")]
background = NodePath("Background") background = NodePath("Background")
foreground = NodePath("Foreground") foreground = NodePath("Foreground")
[node name="Background" type="TileMapLayer" parent="Root"] [node name="Background" type="TileMapLayer" parent="World"]
tile_map_data = PackedByteArray("AAD8//z/AQAAAAQAAAD8//3/AQAAAAQAAAD8//7/AQAAAAQAAAD8////AQAAAAQAAAD9//z/AQAAAAQAAAD9//3/AQAAAAQAAAD9//7/AQAAAAQAAAD9////AQAAAAQAAAD+//z/AQAAAAQAAAD+//3/AQAAAAQAAAD+//7/AQAAAAQAAAD+////AQAAAAQAAAD///z/AQAAAAQAAAD///3/AQAAAAQAAAD///7/AQAAAAQAAAD/////AQAAAAQAAAD8/wAAAQAAAAQAAAD8/wEAAQAAAAQAAAD8/wIAAQAAAAQAAAD8/wMAAQAAAAQAAAD9/wAAAQAAAAQAAAD9/wEAAQAAAAQAAAD9/wIAAQAAAAQAAAD9/wMAAQAAAAQAAAD+/wAAAQAAAAQAAAD+/wEAAQAAAAQAAAD+/wIAAQAAAAQAAAD+/wMAAQAAAAQAAAD//wAAAQAAAAQAAAD//wEAAQAAAAQAAAD//wIAAQAAAAQAAAD//wMAAQAAAAQAAAAAAPz/AQAAAAQAAAAAAP3/AQAAAAQAAAAAAP7/AQAAAAQAAAAAAP//AQAAAAQAAAAAAAAAAQAAAAQAAAAAAAEAAQAAAAQAAAAAAAIAAQAAAAQAAAAAAAMAAQAAAAQAAAABAPz/AQAAAAQAAAABAP3/AQAAAAQAAAABAP7/AQAAAAQAAAABAP//AQAAAAQAAAABAAAAAQAAAAQAAAABAAEAAQAAAAQAAAABAAIAAQAAAAQAAAABAAMAAQAAAAQAAAACAPz/AQAAAAQAAAACAP3/AQAAAAQAAAACAP7/AQAAAAQAAAACAP//AQAAAAQAAAACAAAAAQAAAAQAAAACAAEAAQAAAAQAAAACAAIAAQAAAAQAAAACAAMAAQAAAAQAAAADAPz/AQAAAAQAAAADAP3/AQAAAAQAAAADAP7/AQAAAAQAAAADAP//AQAAAAQAAAADAAAAAQAAAAQAAAADAAEAAQAAAAQAAAADAAIAAQAAAAQAAAADAAMAAQAAAAQAAAD6//v/AQAAAAQAAAD6//z/AQAAAAQAAAD6//3/AQAAAAQAAAD6//7/AQAAAAQAAAD6////AQAAAAQAAAD6/wAAAQAAAAQAAAD6/wEAAQAAAAQAAAD6/wIAAQAAAAQAAAD6/wMAAQAAAAQAAAD6/wQAAQAAAAQAAAD6/wUAAQAAAAQAAAD7//v/AQAAAAQAAAD7//z/AQAAAAQAAAD7//3/AQAAAAQAAAD7//7/AQAAAAQAAAD7////AQAAAAQAAAD7/wAAAQAAAAQAAAD7/wEAAQAAAAQAAAD7/wIAAQAAAAQAAAD7/wMAAQAAAAQAAAD7/wQAAQAAAAQAAAD7/wUAAQAAAAQAAAD8//v/AQAAAAQAAAD8/wQAAQAAAAQAAAD8/wUAAQAAAAQAAAD9//v/AQAAAAQAAAD9/wQAAQAAAAQAAAD9/wUAAQAAAAQAAAD+//v/AQAAAAQAAAD+/wQAAQAAAAQAAAD+/wUAAQAAAAQAAAD///v/AQAAAAQAAAD//wQAAQAAAAQAAAD//wUAAQAAAAQAAAAAAPv/AQAAAAQAAAAAAAQAAQAAAAQAAAAAAAUAAQAAAAQAAAABAPv/AQAAAAQAAAABAAQAAQAAAAQAAAABAAUAAQAAAAQAAAACAPv/AQAAAAQAAAACAAQAAQAAAAQAAAACAAUAAQAAAAQAAAADAPr/AQABAAQAAAADAPv/AQAAAAQAAAADAAQAAQAAAAQAAAADAAUAAQAAAAQAAAAEAPr/AQABAAQAAAAEAPv/AQABAAQAAAAEAPz/AQABAAQAAAAEAP3/AQABAAQAAAAEAP7/AQAAAAQAAAAEAP//AQAAAAQAAAAEAAAAAQAAAAQAAAAEAAEAAQAAAAQAAAAEAAIAAQAAAAQAAAAEAAMAAQAAAAQAAAAEAAQAAQAAAAQAAAAEAAUAAQAAAAQAAAAFAPr/AQABAAQAAAAFAPv/AQABAAQAAAAFAPz/AQABAAQAAAAFAP3/AQABAAQAAAAFAP7/AQAAAAQAAAAFAP//AQAAAAQAAAAFAAAAAQAAAAQAAAAFAAEAAQAAAAQAAAAFAAIAAQAAAAQAAAAFAAMAAQAAAAQAAAAFAAQAAQAAAAQAAAAFAAUAAQAAAAQAAAAGAPj/AQABAAQAAAAGAPn/AQABAAQAAAAGAPr/AQABAAQAAAAGAPv/AQABAAQAAAAGAPz/AQABAAQAAAAHAPj/AQABAAQAAAAHAPn/AQABAAQAAAAHAPr/AQABAAQAAAAHAPv/AQABAAQAAAAHAPz/AQABAAQAAAAIAPj/AQABAAQAAAAIAPn/AQABAAQAAAAIAPr/AQABAAQAAAAIAPv/AQABAAQAAAAIAPz/AQABAAQAAAAJAPj/AQABAAQAAAAJAPn/AQABAAQAAAAJAPr/AQABAAQAAAAJAPv/AQABAAQAAAAJAPz/AQABAAQAAAAKAPj/AQABAAQAAAAKAPn/AQABAAQAAAAKAPr/AQABAAQAAAAKAPv/AQABAAQAAAAKAPz/AQABAAQAAAAEAPn/AQABAAQAAAAGAP3/AQABAAQAAAAHAP3/AQABAAQAAAAIAP3/AQABAAQAAAAIAP7/AQABAAQAAAAHAP7/AQABAAQAAAAEAPj/AQABAAQAAAAEAPf/AQABAAQAAAAFAPf/AQABAAQAAAAFAPj/AQABAAQAAAAFAPn/AQABAAQAAAAHAPf/AQABAAQAAAAGAPf/AQABAAQAAAAIAPf/AQABAAQAAAAJAPf/AQABAAQAAAAKAPf/AQABAAQAAAALAPn/AQABAAQAAAALAPr/AQABAAQAAAALAPv/AQABAAQAAAAKAP3/AQABAAQAAAAJAP3/AQABAAQAAAD3//v/AQAAAAQAAAD3//z/AQAAAAQAAAD3//3/AQAAAAQAAAD3//7/AQAAAAQAAAD3////AQAAAAQAAAD3/wAAAQAAAAQAAAD3/wEAAQAAAAQAAAD3/wIAAQAAAAQAAAD3/wMAAQAAAAQAAAD3/wQAAQAAAAQAAAD3/wUAAQAAAAQAAAD4//v/AQAAAAQAAAD4//z/AQAAAAQAAAD4//3/AQAAAAQAAAD4//7/AQAAAAQAAAD4////AQAAAAQAAAD4/wAAAQAAAAQAAAD4/wEAAQAAAAQAAAD4/wIAAQAAAAQAAAD4/wMAAQAAAAQAAAD4/wQAAQAAAAQAAAD4/wUAAQAAAAQAAAD5//v/AQAAAAQAAAD5//z/AQAAAAQAAAD5//3/AQAAAAQAAAD5//7/AQAAAAQAAAD5////AQAAAAQAAAD5/wAAAQAAAAQAAAD5/wEAAQAAAAQAAAD5/wIAAQAAAAQAAAD5/wMAAQAAAAQAAAD5/wQAAQAAAAQAAAD5/wUAAQAAAAQAAAAGAP//AQAAAAQAAAAGAAAAAQAAAAQAAAAGAAEAAQAAAAQAAAAGAAIAAQAAAAQAAAAGAAMAAQAAAAQAAAAGAAQAAQAAAAQAAAAGAAUAAQAAAAQAAAAHAP//AQAAAAQAAAAHAAAAAQAAAAQAAAAHAAEAAQAAAAQAAAAHAAIAAQAAAAQAAAAHAAMAAQAAAAQAAAAHAAQAAQAAAAQAAAAHAAUAAQAAAAQAAAAIAP//AQAAAAQAAAAIAAAAAQAAAAQAAAAIAAEAAQAAAAQAAAAIAAIAAQAAAAQAAAAIAAMAAQAAAAQAAAAIAAQAAQAAAAQAAAAIAAUAAQAAAAQAAAAJAP//AQAAAAQAAAAJAAAAAQAAAAQAAAAJAAEAAQAAAAQAAAAJAAIAAQAAAAQAAAAJAAMAAQAAAAQAAAAJAAQAAQAAAAQAAAAJAAUAAQAAAAQAAAAJAP7/AQABAAQAAAAGAP7/AQABAAQAAAA=") tile_map_data = PackedByteArray("AAD8//z/AQAAAAQAAAD8//3/AQAAAAQAAAD8//7/AQAAAAQAAAD8////AQAAAAQAAAD9//z/AQAAAAQAAAD9//3/AQAAAAQAAAD9//7/AQAAAAQAAAD9////AQAAAAQAAAD+//z/AQAAAAQAAAD+//3/AQAAAAQAAAD+//7/AQAAAAQAAAD+////AQAAAAQAAAD///z/AQAAAAQAAAD///3/AQAAAAQAAAD///7/AQAAAAQAAAD/////AQAAAAQAAAD8/wAAAQAAAAQAAAD8/wEAAQAAAAQAAAD8/wIAAQAAAAQAAAD8/wMAAQAAAAQAAAD9/wAAAQAAAAQAAAD9/wEAAQAAAAQAAAD9/wIAAQAAAAQAAAD9/wMAAQAAAAQAAAD+/wAAAQAAAAQAAAD+/wEAAQAAAAQAAAD+/wIAAQAAAAQAAAD+/wMAAQAAAAQAAAD//wAAAQAAAAQAAAD//wEAAQAAAAQAAAD//wIAAQAAAAQAAAD//wMAAQAAAAQAAAAAAPz/AQAAAAQAAAAAAP3/AQAAAAQAAAAAAP7/AQAAAAQAAAAAAP//AQAAAAQAAAAAAAAAAQAAAAQAAAAAAAEAAQAAAAQAAAAAAAIAAQAAAAQAAAAAAAMAAQAAAAQAAAABAPz/AQAAAAQAAAABAP3/AQAAAAQAAAABAP7/AQAAAAQAAAABAP//AQAAAAQAAAABAAAAAQAAAAQAAAABAAEAAQAAAAQAAAABAAIAAQAAAAQAAAABAAMAAQAAAAQAAAACAPz/AQAAAAQAAAACAP3/AQAAAAQAAAACAP7/AQAAAAQAAAACAP//AQAAAAQAAAACAAAAAQAAAAQAAAACAAEAAQAAAAQAAAACAAIAAQAAAAQAAAACAAMAAQAAAAQAAAADAPz/AQAAAAQAAAADAP3/AQAAAAQAAAADAP7/AQAAAAQAAAADAP//AQAAAAQAAAADAAAAAQAAAAQAAAADAAEAAQAAAAQAAAADAAIAAQAAAAQAAAADAAMAAQAAAAQAAAD6//v/AQAAAAQAAAD6//z/AQAAAAQAAAD6//3/AQAAAAQAAAD6//7/AQAAAAQAAAD6////AQAAAAQAAAD6/wAAAQAAAAQAAAD6/wEAAQAAAAQAAAD6/wIAAQAAAAQAAAD6/wMAAQAAAAQAAAD6/wQAAQAAAAQAAAD6/wUAAQAAAAQAAAD7//v/AQAAAAQAAAD7//z/AQAAAAQAAAD7//3/AQAAAAQAAAD7//7/AQAAAAQAAAD7////AQAAAAQAAAD7/wAAAQAAAAQAAAD7/wEAAQAAAAQAAAD7/wIAAQAAAAQAAAD7/wMAAQAAAAQAAAD7/wQAAQAAAAQAAAD7/wUAAQAAAAQAAAD8//v/AQAAAAQAAAD8/wQAAQAAAAQAAAD8/wUAAQAAAAQAAAD9//v/AQAAAAQAAAD9/wQAAQAAAAQAAAD9/wUAAQAAAAQAAAD+//v/AQAAAAQAAAD+/wQAAQAAAAQAAAD+/wUAAQAAAAQAAAD///v/AQAAAAQAAAD//wQAAQAAAAQAAAD//wUAAQAAAAQAAAAAAPv/AQAAAAQAAAAAAAQAAQAAAAQAAAAAAAUAAQAAAAQAAAABAPv/AQAAAAQAAAABAAQAAQAAAAQAAAABAAUAAQAAAAQAAAACAPv/AQAAAAQAAAACAAQAAQAAAAQAAAACAAUAAQAAAAQAAAADAPr/AQABAAQAAAADAPv/AQAAAAQAAAADAAQAAQAAAAQAAAADAAUAAQAAAAQAAAAEAPr/AQABAAQAAAAEAPv/AQABAAQAAAAEAPz/AQABAAQAAAAEAP3/AQABAAQAAAAEAP7/AQAAAAQAAAAEAP//AQAAAAQAAAAEAAAAAQAAAAQAAAAEAAEAAQAAAAQAAAAEAAIAAQAAAAQAAAAEAAMAAQAAAAQAAAAEAAQAAQAAAAQAAAAEAAUAAQAAAAQAAAAFAPr/AQABAAQAAAAFAPv/AQABAAQAAAAFAPz/AQABAAQAAAAFAP3/AQABAAQAAAAFAP7/AQAAAAQAAAAFAP//AQAAAAQAAAAFAAAAAQAAAAQAAAAFAAEAAQAAAAQAAAAFAAIAAQAAAAQAAAAFAAMAAQAAAAQAAAAFAAQAAQAAAAQAAAAFAAUAAQAAAAQAAAAGAPj/AQABAAQAAAAGAPn/AQABAAQAAAAGAPr/AQABAAQAAAAGAPv/AQABAAQAAAAGAPz/AQABAAQAAAAHAPj/AQABAAQAAAAHAPn/AQABAAQAAAAHAPr/AQABAAQAAAAHAPv/AQABAAQAAAAHAPz/AQABAAQAAAAIAPj/AQABAAQAAAAIAPn/AQABAAQAAAAIAPr/AQABAAQAAAAIAPv/AQABAAQAAAAIAPz/AQABAAQAAAAJAPj/AQABAAQAAAAJAPn/AQABAAQAAAAJAPr/AQABAAQAAAAJAPv/AQABAAQAAAAJAPz/AQABAAQAAAAKAPj/AQABAAQAAAAKAPn/AQABAAQAAAAKAPr/AQABAAQAAAAKAPv/AQABAAQAAAAKAPz/AQABAAQAAAAEAPn/AQABAAQAAAAGAP3/AQABAAQAAAAHAP3/AQABAAQAAAAIAP3/AQABAAQAAAAIAP7/AQABAAQAAAAHAP7/AQABAAQAAAAEAPj/AQABAAQAAAAEAPf/AQABAAQAAAAFAPf/AQABAAQAAAAFAPj/AQABAAQAAAAFAPn/AQABAAQAAAAHAPf/AQABAAQAAAAGAPf/AQABAAQAAAAIAPf/AQABAAQAAAAJAPf/AQABAAQAAAAKAPf/AQABAAQAAAALAPn/AQABAAQAAAALAPr/AQABAAQAAAALAPv/AQABAAQAAAAKAP3/AQABAAQAAAAJAP3/AQABAAQAAAD3//v/AQAAAAQAAAD3//z/AQAAAAQAAAD3//3/AQAAAAQAAAD3//7/AQAAAAQAAAD3////AQAAAAQAAAD3/wAAAQAAAAQAAAD3/wEAAQAAAAQAAAD3/wIAAQAAAAQAAAD3/wMAAQAAAAQAAAD3/wQAAQAAAAQAAAD3/wUAAQAAAAQAAAD4//v/AQAAAAQAAAD4//z/AQAAAAQAAAD4//3/AQAAAAQAAAD4//7/AQAAAAQAAAD4////AQAAAAQAAAD4/wAAAQAAAAQAAAD4/wEAAQAAAAQAAAD4/wIAAQAAAAQAAAD4/wMAAQAAAAQAAAD4/wQAAQAAAAQAAAD4/wUAAQAAAAQAAAD5//v/AQAAAAQAAAD5//z/AQAAAAQAAAD5//3/AQAAAAQAAAD5//7/AQAAAAQAAAD5////AQAAAAQAAAD5/wAAAQAAAAQAAAD5/wEAAQAAAAQAAAD5/wIAAQAAAAQAAAD5/wMAAQAAAAQAAAD5/wQAAQAAAAQAAAD5/wUAAQAAAAQAAAAGAP//AQAAAAQAAAAGAAAAAQAAAAQAAAAGAAEAAQAAAAQAAAAGAAIAAQAAAAQAAAAGAAMAAQAAAAQAAAAGAAQAAQAAAAQAAAAGAAUAAQAAAAQAAAAHAP//AQAAAAQAAAAHAAAAAQAAAAQAAAAHAAEAAQAAAAQAAAAHAAIAAQAAAAQAAAAHAAMAAQAAAAQAAAAHAAQAAQAAAAQAAAAHAAUAAQAAAAQAAAAIAP//AQAAAAQAAAAIAAAAAQAAAAQAAAAIAAEAAQAAAAQAAAAIAAIAAQAAAAQAAAAIAAMAAQAAAAQAAAAIAAQAAQAAAAQAAAAIAAUAAQAAAAQAAAAJAP//AQAAAAQAAAAJAAAAAQAAAAQAAAAJAAEAAQAAAAQAAAAJAAIAAQAAAAQAAAAJAAMAAQAAAAQAAAAJAAQAAQAAAAQAAAAJAAUAAQAAAAQAAAAJAP7/AQABAAQAAAAGAP7/AQABAAQAAAA=")
tile_set = ExtResource("1_m1b5j") tile_set = ExtResource("1_m1b5j")
[node name="Foreground" type="TileMapLayer" parent="Root"] [node name="Foreground" type="TileMapLayer" parent="World"]
tile_map_data = PackedByteArray("AAD/////AQAAAAMAAAD8//3/AQABAAMAAAD9//3/AQABAAMAAAD9//7/AQABAAMAAAD9/wAAAQABAAMAAAD9/wEAAQABAAMAAAD8/wEAAQABAAMAAAAEAPv/AQACAAMAAAAGAP3/AQACAAMAAAAHAP7/AQACAAMAAAAIAP7/AQACAAMAAAAJAP7/AQACAAMAAAAGAPn/AQACAAMAAAAGAPr/AQACAAMAAAAGAPv/AQACAAMAAAAHAPv/AQACAAMAAAAIAPv/AQACAAMAAAAIAPz/AQACAAMAAAAJAPz/AQACAAMAAAAKAPz/AQACAAMAAAAKAPv/AQACAAMAAAAJAPv/AQACAAMAAAAIAPr/AQACAAMAAAAHAPr/AQACAAMAAAAHAPn/AQACAAMAAAD3//v/AQABAAMAAAD3//z/AQABAAMAAAD3//3/AQABAAMAAAD3//7/AQABAAMAAAD3////AQABAAMAAAD3/wAAAQABAAMAAAD3/wEAAQABAAMAAAD3/wIAAQABAAMAAAD4//v/AQABAAMAAAD4//z/AQABAAMAAAD4//3/AQABAAMAAAD4//7/AQABAAMAAAD4////AQABAAMAAAD4/wAAAQABAAMAAAD4/wEAAQABAAMAAAD4/wIAAQABAAMAAAD3/wMAAQABAAMAAAD3/wQAAQABAAMAAAD3/wUAAQABAAMAAAD4/wMAAQABAAMAAAD4/wQAAQABAAMAAAD4/wUAAQABAAMAAAD5/wUAAQABAAMAAAD6/wUAAQABAAMAAAD7/wUAAQABAAMAAAD8/wUAAQABAAMAAAD9/wUAAQABAAMAAAD+/wUAAQABAAMAAAD//wUAAQABAAMAAAAAAAUAAQABAAMAAAABAAUAAQABAAMAAAACAAUAAQABAAMAAAADAAUAAQABAAMAAAAEAAUAAQABAAMAAAAFAAUAAQABAAMAAAAGAAUAAQABAAMAAAAHAAUAAQABAAMAAAAIAAUAAQABAAMAAAAJAAUAAQABAAMAAAD5//v/AQABAAMAAAD6//v/AQABAAMAAAD7//v/AQABAAMAAAD8//v/AQABAAMAAAD9//v/AQABAAMAAAD+//v/AQABAAMAAAD///v/AQABAAMAAAAAAPv/AQABAAMAAAABAPv/AQABAAMAAAACAPv/AQABAAMAAAADAPv/AQABAAMAAAAJAP//AQABAAMAAAAJAAAAAQABAAMAAAAJAAEAAQABAAMAAAAJAAIAAQABAAMAAAAJAAMAAQABAAMAAAAJAAQAAQABAAMAAAD7/wEAAQABAAMAAAD7//3/AQABAAMAAAD6//3/AQABAAMAAAD6/wEAAQABAAMAAAD6//7/AQABAAMAAAD6/wAAAQABAAMAAAD6/wQAAAAAAAAAAgD5/wQAAAAAAAAAAgD5/wMAAAAAAAAAAgAEAAEAAAAAAAAAAQADAAEAAAAAAAAAAQADAAIAAAAAAAAAAQADAAMAAAAAAAAAAQACAAMAAAAAAAAAAQA=") tile_map_data = PackedByteArray("AAD/////AQAAAAMAAAD8//3/AQABAAMAAAD9//3/AQABAAMAAAD9//7/AQABAAMAAAD9/wAAAQABAAMAAAD9/wEAAQABAAMAAAD8/wEAAQABAAMAAAAEAPv/AQACAAMAAAAGAP3/AQACAAMAAAAHAP7/AQACAAMAAAAIAP7/AQACAAMAAAAJAP7/AQACAAMAAAAGAPn/AQACAAMAAAAGAPr/AQACAAMAAAAGAPv/AQACAAMAAAAHAPv/AQACAAMAAAAIAPv/AQACAAMAAAAIAPz/AQACAAMAAAAJAPz/AQACAAMAAAAKAPz/AQACAAMAAAAKAPv/AQACAAMAAAAJAPv/AQACAAMAAAAIAPr/AQACAAMAAAAHAPr/AQACAAMAAAAHAPn/AQACAAMAAAD3//v/AQABAAMAAAD3//z/AQABAAMAAAD3//3/AQABAAMAAAD3//7/AQABAAMAAAD3////AQABAAMAAAD3/wAAAQABAAMAAAD3/wEAAQABAAMAAAD3/wIAAQABAAMAAAD4//v/AQABAAMAAAD4//z/AQABAAMAAAD4//3/AQABAAMAAAD4//7/AQABAAMAAAD4////AQABAAMAAAD4/wAAAQABAAMAAAD4/wEAAQABAAMAAAD4/wIAAQABAAMAAAD3/wMAAQABAAMAAAD3/wQAAQABAAMAAAD3/wUAAQABAAMAAAD4/wMAAQABAAMAAAD4/wQAAQABAAMAAAD4/wUAAQABAAMAAAD5/wUAAQABAAMAAAD6/wUAAQABAAMAAAD7/wUAAQABAAMAAAD8/wUAAQABAAMAAAD9/wUAAQABAAMAAAD+/wUAAQABAAMAAAD//wUAAQABAAMAAAAAAAUAAQABAAMAAAABAAUAAQABAAMAAAACAAUAAQABAAMAAAADAAUAAQABAAMAAAAEAAUAAQABAAMAAAAFAAUAAQABAAMAAAAGAAUAAQABAAMAAAAHAAUAAQABAAMAAAAIAAUAAQABAAMAAAAJAAUAAQABAAMAAAD5//v/AQABAAMAAAD6//v/AQABAAMAAAD7//v/AQABAAMAAAD8//v/AQABAAMAAAD9//v/AQABAAMAAAD+//v/AQABAAMAAAD///v/AQABAAMAAAAAAPv/AQABAAMAAAABAPv/AQABAAMAAAACAPv/AQABAAMAAAADAPv/AQABAAMAAAAJAP//AQABAAMAAAAJAAAAAQABAAMAAAAJAAEAAQABAAMAAAAJAAIAAQABAAMAAAAJAAMAAQABAAMAAAAJAAQAAQABAAMAAAD7/wEAAQABAAMAAAD7//3/AQABAAMAAAD6//3/AQABAAMAAAD6/wEAAQABAAMAAAD6//7/AQABAAMAAAD6/wAAAQABAAMAAAD6/wQAAAAAAAAAAgD5/wQAAAAAAAAAAgD5/wMAAAAAAAAAAgAEAAEAAAAAAAAAAQADAAEAAAAAAAAAAQADAAIAAAAAAAAAAQADAAMAAAAAAAAAAQACAAMAAAAAAAAAAQA=")
tile_set = ExtResource("2_u2ss0") tile_set = ExtResource("2_u2ss0")
[node name="Player" parent="Root" instance=ExtResource("3_u2ss0")] [node name="Player" parent="World" instance=ExtResource("3_u2ss0")]
position = Vector2(16, 16) position = Vector2(16, 16)
[node name="CanvasLayer" type="CanvasLayer" parent="."]
[node name="UI" parent="CanvasLayer" node_paths=PackedStringArray("player") instance=ExtResource("4_356oe")]
player = NodePath("../../World/Player")

Binary file not shown.

After

Width:  |  Height:  |  Size: 319 B

View File

@ -0,0 +1,34 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://4rxwcyoye2sa"
path="res://.godot/imported/blueberry_item.png-0fb3d1a37e74bfb84616e04c6183a597.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://sprites/blueberry_item.png"
dest_files=["res://.godot/imported/blueberry_item.png-0fb3d1a37e74bfb84616e04c6183a597.ctex"]
[params]
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
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/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

Binary file not shown.

After

Width:  |  Height:  |  Size: 426 B

View File

@ -0,0 +1,34 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://noksw27wlt1y"
path="res://.godot/imported/blueberry_plant.png-4986df59aeb9b01dddc5281f264ea4c6.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://sprites/blueberry_plant.png"
dest_files=["res://.godot/imported/blueberry_plant.png-4986df59aeb9b01dddc5281f264ea4c6.ctex"]
[params]
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
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/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

Binary file not shown.

After

Width:  |  Height:  |  Size: 317 B

View File

@ -0,0 +1,34 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://d11rkcho3c38n"
path="res://.godot/imported/cowberry_item.png-1081d5db15f7b049712ccab0622ef23b.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://sprites/cowberry_item.png"
dest_files=["res://.godot/imported/cowberry_item.png-1081d5db15f7b049712ccab0622ef23b.ctex"]
[params]
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
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/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

Binary file not shown.

After

Width:  |  Height:  |  Size: 424 B

View File

@ -0,0 +1,34 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://c3td3bhrbd0kp"
path="res://.godot/imported/cowberry_plant.png-efaa77d811316cc5b452b7c01a67aefd.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://sprites/cowberry_plant.png"
dest_files=["res://.godot/imported/cowberry_plant.png-efaa77d811316cc5b452b7c01a67aefd.ctex"]
[params]
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
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/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

Binary file not shown.

After

Width:  |  Height:  |  Size: 288 B

View File

@ -0,0 +1,34 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://1udkm2j25i8o"
path="res://.godot/imported/generic_picked.png-ef06719c1fc035896cd7963ba5e40a37.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://sprites/generic_picked.png"
dest_files=["res://.godot/imported/generic_picked.png-ef06719c1fc035896cd7963ba5e40a37.ctex"]
[params]
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
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/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

View File

@ -1,18 +1,6 @@
use godot::{classes::*, obj::WithUserSignals, prelude::*}; use godot::{classes::*, prelude::*};
use crate::{ use crate::prelude::*;
grid::*,
turn::*,
utils::{find_by_type_in_children, find_in_parents},
};
#[derive(GodotConvert, Var, Export, Clone, Copy, Default, Debug, PartialEq, Eq)]
#[godot(via = GString)]
pub enum ItemKind {
#[default]
Blueberry,
Cowberry,
}
#[derive(Debug, GodotClass)] #[derive(Debug, GodotClass)]
#[class(init, base=Node)] #[class(init, base=Node)]
@ -50,7 +38,7 @@ pub struct Gatherable {
count: i32, count: i32,
#[export] #[export]
#[init(val = true)] #[init(val = true)]
pick_automatically: bool, remove_automatically: bool,
#[var(get = get_is_picked, set = set_is_picked)] #[var(get = get_is_picked, set = set_is_picked)]
_is_picked: bool, _is_picked: bool,
@ -58,9 +46,6 @@ pub struct Gatherable {
base: Base<Node>, base: Base<Node>,
} }
#[godot_api]
impl INode for Gatherable {}
#[godot_api] #[godot_api]
impl Gatherable { impl Gatherable {
#[func] #[func]
@ -110,7 +95,7 @@ impl Gatherable {
gatherer.bind_mut().gather(self.item, self.count); gatherer.bind_mut().gather(self.item, self.count);
let item = self.item.to_godot().clone(); let item = self.item.to_godot().clone();
let count = self.count; let count = self.count;
if self.pick_automatically { if self.remove_automatically {
self.set_is_picked(true); self.set_is_picked(true);
} }
self.signals().gathered().emit(&item, count); self.signals().gathered().emit(&item, count);

View File

@ -1,6 +1,6 @@
use godot::{classes::*, obj::WithUserSignals, prelude::*}; use godot::{classes::*, prelude::*};
use crate::utils::find_in_parents; use crate::prelude::*;
#[derive(Debug, GodotClass)] #[derive(Debug, GodotClass)]
#[class(init, base=Node)] #[class(init, base=Node)]
@ -231,3 +231,40 @@ impl Mover {
#[signal] #[signal]
fn finished_moving(coords: Vector2i); fn finished_moving(coords: Vector2i);
} }
// #[derive(Debug, GodotClass)]
// #[class(init, base=Node)]
// pub struct EnterTrigger {
// #[export]
// grid: Option<Gd<GridPosition>>,
// base: Base<Node>,
// }
// #[godot_api]
// impl EnterTrigger {
// #[func]
// fn on_turn_end(&mut self, actor: Option<Gd<TurnActor>>, _action: GString) {
// let actor = match actor {
// Some(actor) => actor,
// None => return,
// };
// let actor_grid = match find_in_parents::<GridPosition, TurnActor>(actor.clone()) {
// Some(grid) => grid,
// None => return,
// };
// let my_coords = self
// .grid
// .as_ref()
// .expect("Getting Grid from EnterTrigger")
// .bind()
// .get_coords();
// let coords = actor_grid.bind().get_coords();
// if my_coords == coords {
// self.signals().is_inside().emit(&actor_grid, &actor)
// }
// }
// #[signal]
// fn is_inside(grid: Gd<GridPosition>, actor: Gd<TurnActor>);
// }

82
rust/src/inventory.rs Normal file
View File

@ -0,0 +1,82 @@
use std::collections::HashMap;
use godot::{classes::*, prelude::*};
type InventoryMap = HashMap<ItemKind, i32>;
#[derive(GodotConvert, Var, Export, Clone, Copy, Default, Debug, PartialEq, Eq, Hash)]
#[godot(via = GString)]
pub enum ItemKind {
#[default]
Blueberry,
Cowberry,
}
#[derive(GodotClass)]
#[class(init, base=Resource)]
pub struct Inventory {
#[export]
items: Dictionary,
base: Base<Resource>,
}
#[godot_api]
impl Inventory {
pub fn cleanup(&mut self) {
self.items_from_map(self.items_as_map());
}
#[func]
pub fn get_item_count(&self, item: ItemKind) -> i32 {
self.items
.get_or_nil(item.to_godot())
.try_to::<i32>()
.unwrap_or_default()
}
#[func]
pub fn insert(&mut self, item: ItemKind, count: i32) {
let mut items = self.items_as_map();
items
.entry(item)
.and_modify(|amount| *amount += count)
.or_insert(count);
self.items_from_map(items);
self.base_mut().emit_changed();
}
fn items_as_map(&self) -> InventoryMap {
let mut result = InventoryMap::new();
for (key, value) in self.items.iter_shared() {
let item = match key
.try_to::<GString>()
.and_then(ItemKind::try_from_godot)
.ok()
{
Some(item) => item,
None => continue,
};
let count = value.try_to::<i32>().unwrap_or_default();
result.insert(item, count);
}
result
}
fn items_from_map(&mut self, items: InventoryMap) {
let mut item_dict = Dictionary::new();
for (item, count) in items.iter() {
item_dict.set(item.to_godot(), *count);
}
self.items = item_dict;
}
}
#[derive(GodotClass)]
#[class(init, base=Node)]
pub struct EntityInventory {
#[export]
inventory: Option<Gd<Inventory>>,
base: Base<Node>,
}

View File

@ -4,8 +4,17 @@ pub struct VelhoExtension;
mod gathering; mod gathering;
mod grid; mod grid;
mod inventory;
mod turn; mod turn;
mod utils; mod utils;
pub mod prelude {
pub use super::gathering::*;
pub use super::grid::*;
pub use super::inventory::*;
pub use super::turn::*;
pub use super::utils::*;
}
#[gdextension] #[gdextension]
unsafe impl ExtensionLibrary for VelhoExtension {} unsafe impl ExtensionLibrary for VelhoExtension {}

View File

@ -5,7 +5,7 @@ use godot::{
prelude::*, prelude::*,
}; };
use crate::utils::find_in_parents; use crate::prelude::*;
#[derive(Debug, GodotClass)] #[derive(Debug, GodotClass)]
#[class(init, base=Node)] #[class(init, base=Node)]
@ -66,7 +66,6 @@ impl TurnManager {
self.current_actor = self.round_queue.pop(); self.current_actor = self.round_queue.pop();
if let Some(mut actor) = self.current_actor.clone() { if let Some(mut actor) = self.current_actor.clone() {
if actor.is_instance_valid() && !actor.is_queued_for_deletion() { if actor.is_instance_valid() && !actor.is_queued_for_deletion() {
godot_print!("Next up: \"{}\" {:?}", actor.get_path(), actor);
actor actor
.signals() .signals()
.turn_ended() .turn_ended()