29 lines
836 B
GDScript
29 lines
836 B
GDScript
class_name PlayerStats
|
|
extends Resource
|
|
|
|
var max_health: float = 50.0
|
|
var current_health: float = 50.0
|
|
var current_xp: float = 0.0
|
|
var current_level: int = 1
|
|
var crit_chance: float = 0.05
|
|
var crit_multiplier: float = 2.0
|
|
var move_speed: float = 200.0
|
|
var attack_damage: float = 1.0
|
|
|
|
func get_final(stat: String, modifiers: Array[PlayerStatsModifier]) -> Variant:
|
|
var base_value = get(stat)
|
|
var add = 0.0
|
|
var mul = 1.0
|
|
for mod in modifiers:
|
|
if mod.stat_name == stat:
|
|
if mod.type == PlayerStatsModifier.ModifierType.ADDITIVE:
|
|
add += mod.value
|
|
if mod.type == PlayerStatsModifier.ModifierType.ADDITIVE:
|
|
mul *= mod.value
|
|
if mod.type == PlayerStatsModifier.ModifierType.ABSOLUTE:
|
|
return mod.value
|
|
return (base_value + add) * mul
|
|
|
|
func xp_required_for_level() -> float:
|
|
return 100 * (100*(1.5**(current_level-1)))
|