extends Node
class_name BattlePlayer
signal died(battler)
signal health_changed(old, new)
signal health_depleted
signal focus_changed(old, new)
signal focus_depleted
signal turn_ended
@onready var actions = $Actions
@export var max_health := 50
@export var max_focus := 20
enum MoveOption {ATTACK, SPELL, ITEM, RUN}
var health: int
var focus: int:
set(val):
var old_focus = focus
focus = min(max(0, val), max_focus)
focus_changed.emit(old_focus, focus)
if focus == 0:
focus_depleted.emit()
var is_alive: bool:
get:
return health > 0
# {
# health: 50,
# max_health: 50,
# focus: 20,
# max_focus: 20,
# },
func initialize(data):
max_health = data.max_health
health = data.health
max_focus = data.max_focus
focus = data.focus
$PlayerBars.initialize()
func start_turn():
print("starting turn")
# TODO: A better way to do this, less entangled
get_parent().get_node("Menu/menu").show_menu()
func choose_option(optionType: MoveOption, option: String):
print("choosing option %s / %s" % [optionType, option])
get_parent().get_node("Menu/menu").hide_menu()
match optionType:
MoveOption.ATTACK:
print("You do an attack!")
(get_parent() as Combat).show_dialog(["You do a %s" % option])
await (get_parent() as Combat).dialog_box.dialog_hidden
turn_ended.emit()
MoveOption.SPELL:
print("You cast a spell")
(get_parent() as Combat).show_dialog(["You cast a %s" % option])
await (get_parent() as Combat).dialog_box.dialog_hidden
turn_ended.emit()
MoveOption.ITEM:
print("You use an item")
(get_parent() as Combat).show_dialog(["You use a %s" % option])
await (get_parent() as Combat).dialog_box.dialog_hidden
turn_ended.emit()
MoveOption.RUN:
print("You try to run")
(get_parent() as Combat).show_dialog(["You can't run!"])
await (get_parent() as Combat).dialog_box.dialog_hidden
get_parent().get_node("Menu/menu").show_menu()
func reset():
health = self.max_health
focus = self.max_focus
func take_damage(amount: int):
var old_health = health
health -= amount
health = max(0, health)
health_changed.emit(old_health, health)
if health == 0:
health_depleted.emit()
func heal(amount: int):
var old_health = health
health = min(health + amount, max_health)
health_changed.emit(old_health, health)