From afaf104b4086dbc5245f92a209cb68a088780ebb Mon Sep 17 00:00:00 2001 From: "madmaxoft@gmail.com" Date: Fri, 21 Dec 2012 12:52:14 +0000 Subject: Added more constants into eEntityType; made them a compulsory parameter to the constructor, so that all entities have proper type. Also added a few utility functions to cEntity for distinguishing the types (IsPlayer(), IsPickup() etc.) git-svn-id: http://mc-server.googlecode.com/svn/trunk@1092 0a769ca7-a7f5-676a-18bf-c427514a06d6 --- source/Mobs/AggressiveMonster.cpp | 62 +++++++++++++++++++++----------- source/Mobs/AggressiveMonster.h | 26 ++++++++++---- source/Mobs/Monster.cpp | 3 +- source/Mobs/PassiveAggressiveMonster.cpp | 4 ++- source/Mobs/Zombiepigman.cpp | 2 +- 5 files changed, 66 insertions(+), 31 deletions(-) (limited to 'source/Mobs') diff --git a/source/Mobs/AggressiveMonster.cpp b/source/Mobs/AggressiveMonster.cpp index d178ce8f8..eabfb6669 100644 --- a/source/Mobs/AggressiveMonster.cpp +++ b/source/Mobs/AggressiveMonster.cpp @@ -8,26 +8,30 @@ #include "../MersenneTwister.h" + + + cAggressiveMonster::cAggressiveMonster() : m_ChaseTime(999999) { m_EMPersonality = AGGRESSIVE; } -cAggressiveMonster::~cAggressiveMonster() -{ -} -//What to do if in Chasing State -void cAggressiveMonster::InStateChasing(float a_Dt) { - cMonster::InStateChasing(a_Dt); + + + +// What to do if in Chasing State +void cAggressiveMonster::InStateChasing(float a_Dt) +{ + super::InStateChasing(a_Dt); m_ChaseTime += a_Dt; - if( m_Target ) + if (m_Target != NULL) { - if(m_Target->GetEntityType() == cEntity::eEntityType_Player) + if (m_Target->IsPlayer()) { cPlayer * Player = (cPlayer *) m_Target; - if(Player->GetGameMode() == 1) + if (Player->GetGameMode() == 1) { m_EMState = IDLE; return; @@ -36,11 +40,14 @@ void cAggressiveMonster::InStateChasing(float a_Dt) { Vector3f Pos = Vector3f( m_Pos ); Vector3f Their = Vector3f( m_Target->GetPosition() ); - if( (Their - Pos).Length() <= m_AttackRange) { + if ((Their - Pos).Length() <= m_AttackRange) + { cMonster::Attack(a_Dt); } - MoveToPosition( Their + Vector3f(0, 0.65f, 0) ); - } else if( m_ChaseTime > 5.f ) { + MoveToPosition(Their + Vector3f(0, 0.65f, 0)); + } + else if (m_ChaseTime > 5.f) + { m_ChaseTime = 0; m_EMState = IDLE; } @@ -48,31 +55,44 @@ void cAggressiveMonster::InStateChasing(float a_Dt) { -void cAggressiveMonster::EventSeePlayer(cEntity *a_Entity) + + +void cAggressiveMonster::EventSeePlayer(cEntity * a_Entity) { - cMonster::EventSeePlayer(a_Entity); + super::EventSeePlayer(a_Entity); m_EMState = CHASING; } + + + + void cAggressiveMonster::Tick(float a_Dt) { - cMonster::Tick(a_Dt); + super::Tick(a_Dt); m_SeePlayerInterval += a_Dt; - if(m_SeePlayerInterval > 1) + if (m_SeePlayerInterval > 1) { MTRand r1; - int rem = r1.randInt() % 3 + 1; //check most of the time but miss occasionally + int rem = r1.randInt() % 3 + 1; // Check most of the time but miss occasionally m_SeePlayerInterval = 0.0; - if(rem >= 2) + if (rem >= 2) { - if(m_EMState == CHASING){ + if (m_EMState == CHASING) + { CheckEventLostPlayer(); - } else { + } + else + { CheckEventSeePlayer(); } } } -} \ No newline at end of file +} + + + + diff --git a/source/Mobs/AggressiveMonster.h b/source/Mobs/AggressiveMonster.h index 7d741dc9a..f71da7b3c 100644 --- a/source/Mobs/AggressiveMonster.h +++ b/source/Mobs/AggressiveMonster.h @@ -1,17 +1,29 @@ + #pragma once #include "Monster.h" -class cAggressiveMonster : public cMonster + + + + +class cAggressiveMonster : + public cMonster { + typedef cMonster super; + public: - cAggressiveMonster(); - ~cAggressiveMonster(); + cAggressiveMonster(void); - virtual void Tick(float a_Dt); - virtual void InStateChasing(float a_Dt); + virtual void Tick(float a_Dt) override; + virtual void InStateChasing(float a_Dt) override; + + virtual void EventSeePlayer(cEntity *) override; - virtual void EventSeePlayer(cEntity *); protected: float m_ChaseTime; -}; +} ; + + + + diff --git a/source/Mobs/Monster.cpp b/source/Mobs/Monster.cpp index e79e6c00f..6c9b870e1 100644 --- a/source/Mobs/Monster.cpp +++ b/source/Mobs/Monster.cpp @@ -29,7 +29,8 @@ cMonster::cMonster(void) - : m_Target(NULL) + : super(etMob) + , m_Target(NULL) , m_bMovingToDestination(false) , m_DestinationTime( 0 ) , m_Gravity( -9.81f) diff --git a/source/Mobs/PassiveAggressiveMonster.cpp b/source/Mobs/PassiveAggressiveMonster.cpp index 465c302a1..b5ef7aa97 100644 --- a/source/Mobs/PassiveAggressiveMonster.cpp +++ b/source/Mobs/PassiveAggressiveMonster.cpp @@ -20,7 +20,9 @@ cPassiveAggressiveMonster::cPassiveAggressiveMonster(void) void cPassiveAggressiveMonster::DoTakeDamage(TakeDamageInfo & a_TDI) { - if ((m_Target != NULL) && (m_Target->GetEntityType() == cEntity::eEntityType_Player)) + super::DoTakeDamage(a_TDI); + + if ((m_Target != NULL) && (m_Target->IsPlayer())) { cPlayer * Player = (cPlayer *) m_Target; if (Player->GetGameMode() != 1) diff --git a/source/Mobs/Zombiepigman.cpp b/source/Mobs/Zombiepigman.cpp index e917da979..37cf02925 100644 --- a/source/Mobs/Zombiepigman.cpp +++ b/source/Mobs/Zombiepigman.cpp @@ -48,7 +48,7 @@ void cZombiepigman::KilledBy(cPawn * a_Killer) { super::KilledBy(a_Killer); - if ((a_Killer != NULL) && (a_Killer->GetEntityType() == eEntityType_Player)) + if ((a_Killer != NULL) && (a_Killer->IsPlayer())) { // TODO: Anger all nearby zombie pigmen // TODO: In vanilla, if one player angers ZPs, do they attack any nearby player, or only that one attacker? -- cgit v1.2.3