class_name EnemyMod extends Resource enum ModType { ADDITIVE, MULTIPLICATIVE, ABSOLUTE, BOOL } @export var mod_property: String @export var mod_value: float @export var mod_value_bool: bool = false @export var mod_type: ModType = ModType.MULTIPLICATIVE 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