# player class class_name Player extends VBoxContainer var area_exp := 0.0 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() $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 # Globals.debug_print("T: " + str(enemyTier) + " D: " + str(enemyDifficulty)) # Globals.debug_print("K: " + str(kill_exp)) # Globals.debug_print("A: " + str(area_exp)) # 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() func _calculate_player_level() -> float: var current_exp = PlayerState.player_exp return log((0.2 * current_exp + 5) / 5.0) + 1 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())