40 lines
908 B
GDScript
40 lines
908 B
GDScript
class_name StaminaComponent
|
|
extends Node
|
|
|
|
export var max_stamina: int = 0
|
|
## Recovery Rate in units per second
|
|
export var recovery_rate: int = 0
|
|
onready var stamina :int = max_stamina
|
|
|
|
|
|
signal stamina_depleted()
|
|
|
|
var recovery_counter: float = 0
|
|
|
|
|
|
func _process(delta):
|
|
recovery_counter += delta
|
|
if recovery_rate != 0:
|
|
var _rate :float = 1.0/float(recovery_rate)
|
|
if recovery_counter > _rate: ## Divide by zero warning
|
|
recover(1)
|
|
recovery_counter = 0
|
|
|
|
func reduce_stamina(_amount :int):
|
|
if _amount < 0:
|
|
push_error("ERROR: Only positive numbers in stamina component functions.")
|
|
stamina -= _amount
|
|
|
|
if stamina <= 0:
|
|
emit_signal("stamina_depleted")
|
|
stamina = 0
|
|
|
|
func recover(recover_amount :int):
|
|
if recover_amount < 0:
|
|
push_error("ERROR: Only positive numbers in stamina component functions.")
|
|
return
|
|
stamina += recover_amount
|
|
|
|
if stamina > max_stamina:
|
|
stamina = max_stamina
|