Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- list<GameObject> objects;
- Player : GameObject {
- list<Effect*> activeEffects;
- PlayerState originalState; // tutaj stan obiektu gracza, ktory moze byc modyfikowany - damage, health, itp.
- void update(float dt) {
- PlayerState modifiedState = originalState.duplicate();
- for (Effect* e: activeEffects) {
- e->apply(modifiedState);
- if (e->update(dt)) {
- activeEffects.remove(e);
- }
- }
- ...
- // i reszta logiki korzysta z modifiedState, a na koncu update jest to wywalane
- }
- };
- class PowerUp : GameObject {
- bool onCollision(GameObject* gameObject);
- };
- // moga byc powerupy ktore dzialaja jednorazowo przy kolizji z graczem
- class MedKit : PowerUp {
- float percentHealth = 25.0f;
- bool onCollision(GameObject* gameObject) {
- Player* player = dynamic_cast<Player*>(gameObject);
- if (player) {
- player->addHealth(percentHealth);
- return false; // czyli usun
- }
- return true; //czyli nie usuwaj
- }
- };
- // i moga byc takie, ktore przy kolizji dodaja efekt, ktory ma timeout
- class QuadDamage : PowerUp {
- float timeBeforeExpire = 30.0f; //sekund
- bool onCollision(GameObject* gameObject) {
- Player* player = dynamic_cast<Player*>(gameObject);
- if (player) {
- player->addEffects(new QuadDamageEffect(timeBeforeExpire));
- return false;
- }
- return true;
- }
- };
- // efekt modyfikuje stan gracza w kazdej klatce dopoki jest aktywny - mozna to zoptymalizowac
- // zeby modyfikowal tylko 2 razy - na starcie i koncu dzialania,
- // ale tak jest latwiej ogarnac kilka efektow dzialajacych na raz z roznymi czasami dzialania
- // i mozna np zrobic efekt, ktory zanika stopniowo a nie tylko on/off
- class QuadDamageEffect : Effect {
- QuadDamageEffect(float timeBeforeExpiration) {...}
- float timeBeforeExpire = 0.0f;
- void apply(PlayerState state) {
- state.damage *= 4.0f;
- }
- bool update(float dt) {
- timeBeforeExpire -= dt;
- return (timeBeforeExpire<0.0f); // wywalamy efekt jak sie skonczyl czas
- }
- };
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement