35 lines
885 B
GDScript
35 lines
885 B
GDScript
class_name EnemyMod
|
|
extends Resource
|
|
|
|
enum ModType { ADDITIVE, MULTIPLICATIVE, ABSOLUTE, BOOL }
|
|
|
|
@export var mod_name: String
|
|
@export var mod_property: String
|
|
@export var mod_value: float
|
|
@export var mod_value_bool: bool = false
|
|
@export var mod_type: ModType = ModType.MULTIPLICATIVE
|
|
|
|
var adjective: String
|
|
|
|
|
|
static func get_calculated(enemy: EnemyBase, key: String) -> Variant:
|
|
assert(
|
|
enemy.has_property(key),
|
|
"tried to calculate property '%s' where base value does not exist on %s" % [key, enemy]
|
|
)
|
|
var base_value = enemy.get(key)
|
|
var add = 0.0
|
|
var mul = 1.0
|
|
for mod in enemy.modifiers:
|
|
if mod.mod_property == key:
|
|
match mod.mod_type:
|
|
ModType.ADDITIVE:
|
|
add += mod.mod_value
|
|
ModType.MULTIPLICATIVE:
|
|
mul *= mod.mod_value
|
|
ModType.ABSOLUTE:
|
|
return mod.mod_value
|
|
ModType.BOOL:
|
|
return mod.mod_value_bool
|
|
return (base_value + add) * mul
|