From 4aade202e006738a0baf4c3190cff8ce6b91003c Mon Sep 17 00:00:00 2001 From: LogicParrot Date: Mon, 1 Feb 2016 22:49:34 +0200 Subject: cMonster::m_Target safety across worlds --- src/Entities/Pawn.h | 35 ++++++++++++++++++++++++++++------- 1 file changed, 28 insertions(+), 7 deletions(-) (limited to 'src/Entities/Pawn.h') diff --git a/src/Entities/Pawn.h b/src/Entities/Pawn.h index 0ceb1073e..05bc09e88 100644 --- a/src/Entities/Pawn.h +++ b/src/Entities/Pawn.h @@ -4,6 +4,9 @@ #include "Entity.h" #include "EntityEffect.h" +// fwd cMonster +class cMonster; + @@ -14,21 +17,28 @@ class cPawn : { // tolua_end typedef cEntity super; - + public: CLASS_PROTODEF(cPawn) cPawn(eEntityType a_EntityType, double a_Width, double a_Height); - + ~cPawn(); + virtual void Destroyed() override; + virtual void Tick(std::chrono::milliseconds a_Dt, cChunk & a_Chunk) override; virtual void KilledBy(TakeDamageInfo & a_TDI) override; - + virtual bool IsFireproof(void) const override; virtual void HandleAir(void) override; virtual void HandleFalling(void); + /** Tells all pawns which are targeting us to stop targeting us. */ + void StopEveryoneFromTargetingMe(); + + + // tolua_begin - + /** Applies an entity effect Checks with plugins if they allow the addition. @param a_EffectType The entity effect to apply @@ -37,28 +47,39 @@ public: @param a_DistanceModifier The scalar multiplied to the potion duration, only applies to splash potions) */ void AddEntityEffect(cEntityEffect::eType a_EffectType, int a_EffectDurationTicks, short a_EffectIntensity, double a_DistanceModifier = 1); - + /** Removes a currently applied entity effect @param a_EffectType The entity effect to remove */ void RemoveEntityEffect(cEntityEffect::eType a_EffectType); - + /** Returns true, if the entity effect is currently applied @param a_EffectType The entity effect to check */ bool HasEntityEffect(cEntityEffect::eType a_EffectType) const; - + /** Removes all currently applied entity effects (used when drinking milk) */ void ClearEntityEffects(void); // tolua_end + /** remove the monster from the list of monsters targeting this pawn. */ + void NoLongerTargetingMe(cMonster * a_Monster); + + /** Add the monster to the list of monsters targeting this pawn. (Does not check if already in list!) */ + void TargetingMe(cMonster * a_Monster); + protected: typedef std::map tEffectMap; tEffectMap m_EntityEffects; double m_LastGroundHeight; bool m_bTouchGround; + +private: + + /** A list of all monsters that are targeting this pawn. */ + std::vector m_TargetingMe; } ; // tolua_export -- cgit v1.2.3