Jump to content
Posted 28 May 2012 - 07:58 PM
Posted 30 May 2012 - 05:50 PM
Posted 31 May 2012 - 12:36 PM
off the top of my head, i would create a class called Effect with an abstract method called perform()
then make other classes that define each particular effect, for example, you could create a strengthBuff class or whatever
and implement the perform method to give it whatever logic you want.
perform could also take parameters if needed, like perform(Actor actor) etc.
I did something like this for my Pokemon clone game, each move (like ember for example) not only deals damage to the other pokemon,
but it also has a chance of contaminating the other pokemon with a lingering effect (in case of ember, it was damage over time)
so each move had an effect attached to it, and i simply implemented the perform method for each individual move, (sand attack lowers accuracy, etc)
Posted 31 May 2012 - 01:04 PM
Posted 31 May 2012 - 09:32 PM
Before discussing about the best design possible, you should probably look more closely to your problem. What kind of effects do you want/need/plan to implement? What kind of operations on effects do you want/need/plan to support? You may for example be interested in knowing if an effect is positive or negative or what stats are changed by the effect. You may be interested if the effect should be applied once (e.g. add 2 points to dexterity) or every frame (or every n milliseconds). You may want to know if the effect is "invertible" (i.e. if the result of the effect should be removed when the effect is removed) or if it is permanent. You may want to know if the effect has a duration or if it is linked to some object. You should then decide what's data and what's code (e.g. the two effects "+2 dex for 2min" and "+5 int for 30s" may be implemented as two instances of the same effect). Finally, you should also probably try to understand how those effects will be used by your system.