Add delay to new slime spawns after slime death.

This commit is contained in:
Kingsley Collie 2021-12-18 13:55:20 +00:00 committed by Alexander Harkness
parent 7790ebc63b
commit a9e111678a

View File

@ -71,6 +71,7 @@ void cSlime::KilledBy(TakeDamageInfo & a_TDI)
if (m_Size != 1) if (m_Size != 1)
{ {
// Queue slimes to be spawned after death animation delay:
auto & Random = GetRandomProvider(); auto & Random = GetRandomProvider();
int SpawnAmount = Random.RandInt(2, 4); int SpawnAmount = Random.RandInt(2, 4);
@ -79,10 +80,18 @@ void cSlime::KilledBy(TakeDamageInfo & a_TDI)
double AddX = (i % 2 - 0.5) * m_Size / 4.0; double AddX = (i % 2 - 0.5) * m_Size / 4.0;
double AddZ = (i / 2 - 0.5) * m_Size / 4.0; double AddZ = (i / 2 - 0.5) * m_Size / 4.0;
auto NewSlime = std::make_unique<cSlime>(m_Size / 2); Vector3d SpawnPos(GetPosX() + AddX, GetPosY() + 0.5, GetPosZ() + AddZ);
NewSlime->SetPosition(GetPosX() + AddX, GetPosY() + 0.5, GetPosZ() + AddZ); double Yaw = Random.RandReal(360.0f);
NewSlime->SetYaw(Random.RandReal(360.0f)); int Size = m_Size/2;
m_World->SpawnMobFinalize(std::move(NewSlime)); auto lambda = [SpawnPos, Yaw, Size](cWorld &a_World)
{
auto NewSlime = std::make_unique<cSlime>(Size);
NewSlime->SetPosition(SpawnPos);
NewSlime->SetYaw(Yaw);
a_World.SpawnMobFinalize(std::move(NewSlime));
};
cTickTime DelayTime(20);
m_World->ScheduleTask(DelayTime, lambda);
} }
} }
Super::KilledBy(a_TDI); Super::KilledBy(a_TDI);