Implementing new player data resource to help with guis and passing player information around

This commit is contained in:
Dustin 2025-04-12 10:18:22 -07:00
parent 1c112630d1
commit 6b490ba7b4
8 changed files with 97 additions and 9 deletions

View File

@ -0,0 +1,19 @@
class_name PlayerData
extends Resource
# Declare member variables here. Examples:
var player_position: Vector2
var player_health: int
var player_stamina: int
var player_inventory: InventoryManager
# Called when the node enters the scene tree for the first time.
#func _ready():
# pass # Replace with function body.
# Called every frame. 'delta' is the elapsed time since the previous frame.
#func _process(delta):
# pass

View File

@ -9,10 +9,23 @@ var player_health: int
var player_stamina: int
var player_inventory: InventoryManager
## An array of player data objects
var _player_data :Array = []
# Called when the node enters the scene tree for the first time.
func _ready():
pass # Replace with function body.
func register_player() -> int:
_player_data.append(PlayerData.new())
## Return the index of the player data
return (_player_data.size() - 1 )
func get_player_data(index :int) -> PlayerData:
if _player_data.size() > index:
return _player_data[index]
else:
return null
# Called every frame. 'delta' is the elapsed time since the previous frame.
#func _process(delta):

View File

@ -94,6 +94,11 @@ _global_script_classes=[ {
"language": "GDScript",
"path": "res://lib/classes/movement_state_receiver.gd"
}, {
"base": "Resource",
"class": "PlayerData",
"language": "GDScript",
"path": "res://lib/classes/player_data.gd"
}, {
"base": "Area2D",
"class": "Projectile",
"language": "GDScript",
@ -162,6 +167,7 @@ _global_script_class_icons={
"Modifier_Receiver": "",
"MovementComponent": "",
"Movement_StateReceiver": "",
"PlayerData": "",
"Projectile": "",
"SE_StateFrame": "",
"StaminaComponent": "",

View File

@ -20,11 +20,23 @@ const state_stamina_cost :Dictionary = {
"ledge_climb":10
}
var player_info_index :int
var player_data :PlayerData
# Called when the node enters the scene tree for the first time.
func _ready():
PlayerInfo.player_health = health_component.health
# PlayerInfo.player_health = health_component.health
PlayerInfo.player_inventory = player_inventory
PlayerInfo.player_stamina = stamina_component.stamina
# PlayerInfo.player_stamina = stamina_component.stamina
player_info_index = PlayerInfo.register_player()
print ("Registered as player: ", player_info_index)
player_data = PlayerInfo.get_player_data(player_info_index)
PlayerInfo.get_player_data(player_info_index).player_health = health_component.health
print ("My health is: ", player_data.player_health)
player_data.player_inventory = player_inventory
player_data.player_stamina = stamina_component.stamina
# Set initial player position in world.
global_position = LevelInfo.player_start_position
@ -34,18 +46,21 @@ func _ready():
movement_component.state_stamina_cost = state_stamina_cost
#var stamina_recovery :float = 0.0
# Called every frame. 'delta' is the elapsed time since the previous frame.
func _process(delta):
PlayerInfo.player_position = global_position.round()
#PlayerInfo.player_position = global_position.round()
player_data.player_position = global_position.round()
# stamina_recovery += delta
# if stamina_recovery > 1.0:
# stamina_component.recover(1)
# stamina_recovery = 0.0
# #print("recover ", stamina_component.stamina)
PlayerInfo.player_stamina = stamina_component.stamina
#PlayerInfo.player_stamina = stamina_component.stamina
player_data.player_stamina = stamina_component.stamina
match movement_state_machine.current_state.name:
@ -64,8 +79,10 @@ func hit_Receiver(damage):
health_component.take_damage(damage)
if $Health_Component.health > 0:
movement_state_machine.change_to_known_state('hurt')
PlayerInfo.player_health = health_component.health
if PlayerInfo.player_health <= 0:
#PlayerInfo.player_health = health_component.health
player_data.player_health = health_component.health
print ("Got Hurt, What happend: " , PlayerInfo.get_player_data(player_info_index).player_health, " vs ", player_data.player_health)
if health_component.health <= 0:
return
yield( get_tree().create_timer(2 + movement_state_machine.get_state_reference('hurt').timeout_seconds), "timeout")
$Hurtbox_Component.set_hurtbox(true)

View File

@ -19,7 +19,7 @@ onready var health_bar = $PlayerHUD/HealthBar
onready var stamina_bar = $PlayerHUD/StaminaBar
## Cool I can bring this in with a ctrl drag
onready var selected_inventory_items = $"%SelectedInventoryItems"
#onready var selected_inventory_items = $"%SelectedInventoryItems"
var current_pane

View File

@ -5,12 +5,19 @@ extends TextureProgress
# var a = 2
# var b = "text"
var _player_number :int
# Called when the node enters the scene tree for the first time.
func _ready():
pass # Replace with function body.
func set_player_number(_player_num: int) -> void:
_player_number = _player_num
# Called every frame. 'delta' is the elapsed time since the previous frame.
func _process(delta):
value = PlayerInfo.player_health
if _player_number:
#value = PlayerInfo.player_health
var pd :PlayerData = PlayerInfo.get_player_data(_player_number - 1)
if pd:
value = pd.player_health

22
src/ui/PlayerHUD.gd Normal file
View File

@ -0,0 +1,22 @@
extends Control
# Declare member variables here. Examples:
# var a = 2
# var b = "text"
export var player_number :int = 1
onready var health_bar = $"%HealthBar"
onready var stamina_bar = $"%StaminaBar"
onready var selected_inventory_items = $"%SelectedInventoryItems"
# Called when the node enters the scene tree for the first time.
func _ready():
health_bar.set_player_number(1)
pass
# Called every frame. 'delta' is the elapsed time since the previous frame.
#func _process(delta):
# pass

View File

@ -1,4 +1,4 @@
[gd_scene load_steps=8 format=2]
[gd_scene load_steps=9 format=2]
[ext_resource path="res://assets/Fonts/QuinqueFive.tres" type="DynamicFont" id=1]
[ext_resource path="res://assets/UI/Staminabar-Indicator.png" type="Texture" id=2]
@ -7,12 +7,15 @@
[ext_resource path="res://src/ui/HealthBar.gd" type="Script" id=5]
[ext_resource path="res://src/ui/SelectedInventoryItems.gd" type="Script" id=6]
[ext_resource path="res://src/ui/StaminaBar.gd" type="Script" id=7]
[ext_resource path="res://src/ui/PlayerHUD.gd" type="Script" id=8]
[node name="PlayerHUD" type="Control"]
margin_right = 320.0
margin_bottom = 180.0
script = ExtResource( 8 )
[node name="HealthBar" type="TextureProgress" parent="."]
unique_name_in_owner = true
margin_left = 2.0
margin_top = 2.0
margin_right = 104.0
@ -24,6 +27,7 @@ texture_progress_offset = Vector2( 1, 1 )
script = ExtResource( 5 )
[node name="StaminaBar" type="TextureProgress" parent="."]
unique_name_in_owner = true
margin_left = 2.0
margin_top = 14.0
margin_right = 104.0