From 40d6162b95f8fc410ef6584c41cb707fb9dc4b2a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Torjus=20H=C3=A5kestad?= Date: Fri, 22 Aug 2025 06:27:51 +0200 Subject: [PATCH] game: add enemy modifier class --- scenes/enemies/enemy_base.gd | 1 + scenes/enemies/enemy_mod.gd | 27 +++++++++++++++++++++++++++ scenes/enemies/enemy_mod.gd.uid | 1 + 3 files changed, 29 insertions(+) create mode 100644 scenes/enemies/enemy_mod.gd create mode 100644 scenes/enemies/enemy_mod.gd.uid diff --git a/scenes/enemies/enemy_base.gd b/scenes/enemies/enemy_base.gd index 0ebb400..d10e942 100644 --- a/scenes/enemies/enemy_base.gd +++ b/scenes/enemies/enemy_base.gd @@ -7,6 +7,7 @@ extends CharacterBody2D @export var target_distance: float = 6.0 @export var path_update_interval: float = 1.5 @export var xp_dropped: float = 5.0 +var modifiers: Array[EnemyMod] = [] @onready var target_cast: RayCast2D = $TargetCast @onready var animation_player: AnimationPlayer = $AnimationPlayer diff --git a/scenes/enemies/enemy_mod.gd b/scenes/enemies/enemy_mod.gd new file mode 100644 index 0000000..c2121f4 --- /dev/null +++ b/scenes/enemies/enemy_mod.gd @@ -0,0 +1,27 @@ +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 diff --git a/scenes/enemies/enemy_mod.gd.uid b/scenes/enemies/enemy_mod.gd.uid new file mode 100644 index 0000000..2b8b024 --- /dev/null +++ b/scenes/enemies/enemy_mod.gd.uid @@ -0,0 +1 @@ +uid://d2mvgwmsmcxp4