Hello everyone!
I'm trying to design a buff/debuff system for my game (Like in games such as World of Warcraft). My first approach was a class called Effect. This class has override-able methods that are called when the character receives the buff/debuff and when the effect wears off. For example, here is what a "slow movement" effect would look like:
public override void StartEffect () {
originalSpeed = victim.speed;
victim.speed = originalSpeed * 0.5f;
}
public override void EndEffect () {
victim.speed = originalSpeed;
}
It works as it should! But not until you add another effect which alters the same variable. Suppose our character Bob first receives a "slow movement" debuff which reduces speed by 50%. Then he gets a "curse" debuff which reduces his speed by an additional 20%. The curse effect would register the "original speed" to be 50% of the ACTUAL original speed because "slow movement" has already halved the speed. If "curse" wears off after "slow movement" does, poor Bob would be left with speed of 50% of original forever.
Another inconvenience with this approach is that you have to reverse every change you make to the variables in the end.
What would be your approach for something like this? Thanks in advance :)
↧