Advertisement
Guest User

powerupy szkic

a guest
Sep 21st, 2016
102
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.39 KB | None | 0 0
  1.     list<GameObject> objects;
  2.  
  3.     Player : GameObject {
  4.         list<Effect*> activeEffects;
  5.         PlayerState originalState; // tutaj stan obiektu gracza, ktory moze byc modyfikowany - damage, health, itp.
  6.         void update(float dt) {
  7.              PlayerState modifiedState = originalState.duplicate();
  8.              for (Effect* e: activeEffects) {
  9.                  e->apply(modifiedState);
  10.                  if (e->update(dt)) {
  11.                     activeEffects.remove(e);
  12.                  }
  13.              }
  14.              ...
  15.              // i reszta logiki korzysta z modifiedState, a na koncu update jest to wywalane
  16.         }
  17.     };
  18.  
  19.     class PowerUp : GameObject {
  20.         bool onCollision(GameObject* gameObject);
  21.     };
  22.  
  23.     // moga byc powerupy ktore dzialaja jednorazowo przy kolizji z graczem
  24.     class MedKit : PowerUp {
  25.         float percentHealth = 25.0f;
  26.         bool onCollision(GameObject* gameObject) {
  27.             Player* player = dynamic_cast<Player*>(gameObject);
  28.             if (player) {
  29.                 player->addHealth(percentHealth);
  30.                 return false; // czyli usun
  31.             }
  32.             return true; //czyli nie usuwaj
  33.         }
  34.     };
  35.  
  36.     // i moga byc takie, ktore przy kolizji dodaja efekt, ktory ma timeout
  37.     class QuadDamage : PowerUp {
  38.         float timeBeforeExpire = 30.0f; //sekund
  39.         bool onCollision(GameObject* gameObject) {
  40.             Player* player = dynamic_cast<Player*>(gameObject);
  41.             if (player) {
  42.                 player->addEffects(new QuadDamageEffect(timeBeforeExpire));
  43.                 return false;
  44.             }
  45.             return true;
  46.         }
  47.     };
  48.  
  49.     // efekt modyfikuje stan gracza w kazdej klatce dopoki jest aktywny - mozna to zoptymalizowac
  50.     // zeby modyfikowal tylko 2 razy - na starcie i koncu dzialania,
  51.     // ale tak jest latwiej ogarnac kilka efektow dzialajacych na raz z roznymi czasami dzialania
  52.     // i mozna np zrobic efekt, ktory zanika stopniowo a nie tylko on/off
  53.     class QuadDamageEffect : Effect {
  54.         QuadDamageEffect(float timeBeforeExpiration) {...}
  55.         float timeBeforeExpire = 0.0f;
  56.         void apply(PlayerState state) {
  57.             state.damage *= 4.0f;
  58.         }
  59.         bool update(float dt) {
  60.             timeBeforeExpire -= dt;
  61.             return (timeBeforeExpire<0.0f); // wywalamy efekt jak sie skonczyl czas
  62.         }
  63.     };
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement