semi-idle-arpg/scripts/Player.gd

73 lines
2.5 KiB
GDScript3
Raw Normal View History

2024-10-20 16:44:08 -06:00
# player class
class_name Player
extends VBoxContainer
var area_exp := 0.0
var current_health : int
var resource_type : String
var current_resource : int
2024-10-20 16:44:08 -06:00
func _ready() -> void:
SignalBus.enemy_died.connect(_on_enemy_died)
SignalBus.quest_completed.connect(_on_quest_completed)
SignalBus.enemy_damaged_player.connect(_on_enemy_damaged_player)
_set_player_display()
2024-10-20 16:44:08 -06:00
$PlayerExpBar.value = _get_level_progress_percent()
$PlayerLabel/PlayerLevel.text = str(floor(PlayerState.player_level))
func _on_enemy_died(enemyDifficulty, enemyTier, _enemyFaction) -> void:
var kill_exp = pow(pow(enemyTier + 1, 3), enemyDifficulty)
area_exp += kill_exp
2024-10-21 13:09:51 -06:00
# Globals.debug_print("T: " + str(enemyTier) + " D: " + str(enemyDifficulty))
# Globals.debug_print("K: " + str(kill_exp))
# Globals.debug_print("A: " + str(area_exp))
2024-10-20 16:44:08 -06:00
# TODO: maybe show earned exp on bar, separate from current
# use xp to next level and current level, subtract, figure out percentage per point exp, add to display?
func _get_player_current_health() -> void:
var playerCurrHeath = PlayerState.player_currenthealth
$PlayerHealthBar/PlayerHealthCurrent.text = str(playerCurrHeath)
$PlayerHealthBar.value = playerCurrHeath
if playerCurrHeath <= 0:
%PlayerInfo/PlayerHealthBar.value = 0
Engine.time_scale = 0.0001
func _set_player_display() -> void:
var playerMaxHeath = PlayerState.player_maxhealth
var playerCurrHeath = PlayerState.player_currenthealth
$PlayerHealthBar/PlayerHealthMax.text = str(playerMaxHeath)
$PlayerHealthBar/PlayerHealthCurrent.text = str(playerCurrHeath)
$PlayerHealthBar.value = playerCurrHeath
func _on_enemy_damaged_player() -> void:
_get_player_current_health()
2024-10-20 16:44:08 -06:00
func _calculate_player_level() -> float:
var current_exp = PlayerState.player_exp
return log((0.2 * current_exp + 5) / 5.0) + 1
2024-10-20 16:44:08 -06:00
func _get_level_progress_percent() -> float:
var current_level = _calculate_player_level()
return fmod(current_level, 1) * 100.0
func _on_quest_completed() -> void:
PlayerState.player_exp += area_exp
PlayerState.player_level = _calculate_player_level()
$PlayerExpBar.value = _get_level_progress_percent()
$PlayerLabel/PlayerLevel.text = str(floor(PlayerState.player_level))
# if Globals.debug:
# print("FA: ", area_exp)
# print("L: ", PlayerState.player_level)
# print("XP: ", PlayerState.player_exp)
# print("CL: ", _calculate_player_level())
# print("LP: ", _get_level_progress_percent())