CellModifier.gd 1.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849
  1. extends Resource
  2. class_name CellModifier
  3. #
  4. @export var _modifiers : Array[StatModifier] = []
  5. #
  6. func Get(effect : CellCommons.Modifier, persistent : bool = false, default : Variant = 0) -> Variant:
  7. var value : Variant = default
  8. for modifier in _modifiers:
  9. if modifier._effect == effect:
  10. value += modifier._value if modifier and modifier._persistent == persistent else default
  11. return value
  12. #
  13. func Add(modifier : StatModifier):
  14. _modifiers.append(modifier)
  15. func Remove(modifier : StatModifier):
  16. _modifiers.erase(modifier)
  17. #
  18. func Apply(actor : Actor):
  19. if not actor:
  20. assert(false, "Actor not found, could not apply the cell modifier")
  21. for modifier in _modifiers:
  22. if modifier:
  23. match modifier._effect:
  24. CellCommons.Modifier.Health:
  25. var hp : int = Get(modifier._effect);
  26. if hp != 0: actor.stat.SetHealth(hp)
  27. CellCommons.Modifier.Mana:
  28. var mana : int = Get(modifier._effect);
  29. if mana != 0: actor.stat.SetMana(mana)
  30. CellCommons.Modifier.Stamina:
  31. var stamina : int = Get(modifier._effect);
  32. if stamina != 0: actor.stat.SetStamina(stamina)
  33. func Equip(actor : Actor):
  34. for modifier in _modifiers:
  35. if modifier and modifier._persistent:
  36. actor.stat.modifiers.Add(modifier)
  37. func Unequip(actor : Actor):
  38. for modifier in _modifiers:
  39. if modifier and modifier._persistent:
  40. actor.stat.modifiers.Remove(modifier)