summaryrefslogtreecommitdiff
path: root/src/being.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/being.h')
-rw-r--r--src/being.h54
1 files changed, 49 insertions, 5 deletions
diff --git a/src/being.h b/src/being.h
index 15e1e6f9..9390dccd 100644
--- a/src/being.h
+++ b/src/being.h
@@ -26,7 +26,7 @@
#include <memory>
#include <string>
#include <SDL_types.h>
-#include <bitset>
+#include <set>
#include "sprite.h"
#include "map.h"
@@ -46,6 +46,9 @@ class ImageSet;
class Particle;
class Text;
+
+class StatusEffect;
+
/**
* A position along a being's path.
*/
@@ -109,7 +112,6 @@ class Being : public Sprite
NUM_TC
};
-
/**
* Directions, to be used as bitmask values
*/
@@ -356,6 +358,27 @@ class Being : public Sprite
}
/**
+ * Sets the being's stun mode. If zero, the being is `normal',
+ * otherwise it is `stunned' in some fashion.
+ */
+ void setStunMode(int stunMode)
+ {
+ if (mStunMode != stunMode)
+ updateStunMode(mStunMode, stunMode);
+ mStunMode = stunMode;
+ };
+
+ void setStatusEffect(int index, bool active);
+
+ /**
+ * A status effect block is a 16 bit mask of status effects.
+ * We assign each such flag a block ID of offset + bitnr.
+ *
+ * These are NOT the same as the status effect indices.
+ */
+ void setStatusEffectBlock(int offset, Uint16 flags);
+
+ /**
* Triggers a visual effect, such as `level up'
*
* Only draws the visual effect, does not play sound effects
@@ -400,6 +423,29 @@ class Being : public Sprite
void
internalTriggerEffect(int effectId, bool sfx, bool gfx);
+ /**
+ * Notify self that the stun mode has been updated. Invoked by
+ * setStunMode if something changed.
+ */
+ virtual void
+ updateStunMode(int oldMode, int newMode);
+
+ /**
+ * Notify self that a status effect has flipped.
+ * The new flag is passed.
+ */
+ virtual void
+ updateStatusEffect(int index, bool newStatus);
+
+ /**
+ * Handle an update to a status or stun effect
+ *
+ * \param The StatusEffect to effect
+ * \param effectId -1 for stun, otherwise the effect index
+ */
+ virtual void
+ handleStatusEffect(StatusEffect *effect, int effectId);
+
Uint32 mId; /**< Unique sprite id */
Uint16 mWalkSpeed; /**< Walking speed */
Uint8 mDirection; /**< Facing direction */
@@ -407,8 +453,6 @@ class Being : public Sprite
std::string mName; /**< Name of character */
SpriteIterator mSpriteIterator;
- typedef std::bitset<STATUS_EFFECTS> StatusEffects;
-
/** Engine-related infos about weapon. */
const ItemInfo* mEquippedWeapon;
@@ -419,7 +463,7 @@ class Being : public Sprite
Uint32 mSpeechTime;
Sint32 mPx, mPy; /**< Pixel coordinates */
Uint16 mStunMode; /**< Stun mode; zero if not stunned */
- StatusEffects mStatusEffects; /**< Bitset of active status effects */
+ std::set<int> mStatusEffects; /**< set of active status effects */
std::vector<AnimatedSprite*> mSprites;
std::vector<int> mSpriteIDs;