From 58ced0c12c23275112e16ff29b087f2ceb0bbd6f Mon Sep 17 00:00:00 2001 From: STRWarrior Date: Sat, 2 Nov 2013 20:47:43 +0100 Subject: Skeletons, Blazes and Ghasts now shoot their projectile to the target. --- source/Mobs/Monster.cpp | 68 +++++++++++++++++++++++++++++++++++++++++++++---- 1 file changed, 63 insertions(+), 5 deletions(-) (limited to 'source') diff --git a/source/Mobs/Monster.cpp b/source/Mobs/Monster.cpp index 9b1f2fc4c..0b91df90b 100644 --- a/source/Mobs/Monster.cpp +++ b/source/Mobs/Monster.cpp @@ -441,10 +441,68 @@ void cMonster::Attack(float a_Dt) { m_AttackInterval += a_Dt * m_AttackRate; if ((m_Target != NULL) && (m_AttackInterval > 3.0)) + // Setting this higher gives us more wiggle room for attackrate { - // Setting this higher gives us more wiggle room for attackrate + switch (GetMobType()) + { + case mtSkeleton: + { + Vector3d Speed = GetLookVector() * 20; + Speed.y = Speed.y + 1; + cArrowEntity * Arrow = new cArrowEntity(this, GetPosX(), GetPosY() + 1, GetPosZ(), Speed); + if (Arrow == NULL) + { + return; + } + if (!Arrow->Initialize(m_World)) + { + delete Arrow; + return; + } + m_World->BroadcastSpawnEntity(*Arrow); + break; + } + case mtGhast: + { + Vector3d Speed = GetLookVector() * 20; + Speed.y = Speed.y + 1; + cGhastFireballEntity * GhastBall = new cGhastFireballEntity(this, GetPosX(), GetPosY() + 1, GetPosZ(), Speed); + if (GhastBall == NULL) + { + return; + } + if (!GhastBall->Initialize(m_World)) + { + delete GhastBall; + return; + } + m_World->BroadcastSpawnEntity(*GhastBall); + break; + } + case mtBlaze: + { + Vector3d Speed = GetLookVector() * 20; + Speed.y = Speed.y + 1; + cFireChargeEntity * FireCharge = new cFireChargeEntity(this, GetPosX(), GetPosY() + 1, GetPosZ(), Speed); + if (FireCharge == NULL) + { + return; + } + if (!FireCharge->Initialize(m_World)) + { + delete FireCharge; + return; + } + m_World->BroadcastSpawnEntity(*FireCharge); + break; + // ToDo: Shoot 3 fireballs instead of 1. + } + default: + { + ((cPawn *)m_Target)->TakeDamage(*this); + } + } m_AttackInterval = 0.0; - ((cPawn *)m_Target)->TakeDamage(*this); } } @@ -609,9 +667,9 @@ int cMonster::GetSpawnDelay(cMonster::eFamily a_MobFamily) { switch (a_MobFamily) { - case mfHostile: return 1; - case mfPassive: return 400; - case mfAmbient: return 400; + case mfHostile: return 40; + case mfPassive: return 40; + case mfAmbient: return 40; case mfWater: return 400; } ASSERT(!"Unhandled mob family"); -- cgit v1.2.3