1
0

Skeletons, Blazes and Ghasts now shoot their projectile to the target.

This commit is contained in:
STRWarrior 2013-11-02 20:47:43 +01:00
parent 3dc3e5eca7
commit 58ced0c12c

View File

@ -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");