From 49c443896dcac8c4eaf08c4024e8bd2366ad899a Mon Sep 17 00:00:00 2001 From: LogicParrot Date: Sat, 2 Sep 2017 10:45:06 +0300 Subject: Revert "Replace ItemCallbacks with lambdas (#3948)" This reverts commit 496c337cdfa593654018c171f6a74c28272265b5. --- src/Mobs/Ocelot.cpp | 61 ++++++++++++++++++++++++++++++++--------------------- 1 file changed, 37 insertions(+), 24 deletions(-) (limited to 'src/Mobs/Ocelot.cpp') diff --git a/src/Mobs/Ocelot.cpp b/src/Mobs/Ocelot.cpp index 50dd249c0..e5004a1d1 100644 --- a/src/Mobs/Ocelot.cpp +++ b/src/Mobs/Ocelot.cpp @@ -90,25 +90,30 @@ void cOcelot::Tick(std::chrono::milliseconds a_Dt, cChunk & a_Chunk) void cOcelot::TickFollowPlayer() { - Vector3d OwnerPos; - bool OwnerFlying = false; - auto Callback = [&](cPlayer & a_Player) + class cCallback : + public cPlayerListCallback { - OwnerPos = a_Player.GetPosition(); - OwnerFlying = a_Player.IsFlying(); - return true; - }; + virtual bool Item(cPlayer * a_Player) override + { + OwnerPos = a_Player->GetPosition(); + OwnerFlying = a_Player->IsFlying(); + return true; + } + public: + Vector3d OwnerPos; + bool OwnerFlying; + } Callback; if (m_World->DoWithPlayerByUUID(m_OwnerUUID, Callback)) { // The player is present in the world, follow him: - double Distance = (OwnerPos - GetPosition()).Length(); + double Distance = (Callback.OwnerPos - GetPosition()).Length(); if (Distance > 12) { - if (!OwnerFlying) + if (!Callback.OwnerFlying) { - OwnerPos.y = FindFirstNonAirBlockPosition(OwnerPos.x, OwnerPos.z); - TeleportToCoords(OwnerPos.x, OwnerPos.y, OwnerPos.z); + Callback.OwnerPos.y = FindFirstNonAirBlockPosition(Callback.OwnerPos.x, Callback.OwnerPos.z); + TeleportToCoords(Callback.OwnerPos.x, Callback.OwnerPos.y, Callback.OwnerPos.z); } } if (Distance < 2) @@ -117,9 +122,9 @@ void cOcelot::TickFollowPlayer() } else { - if (!OwnerFlying) + if (!Callback.OwnerFlying) { - MoveToPosition(OwnerPos); + MoveToPosition(Callback.OwnerPos); } } } @@ -200,19 +205,27 @@ void cOcelot::SpawnOn(cClientHandle & a_ClientHandle) +class cFindSittingCat : + public cEntityCallback +{ + virtual bool Item(cEntity * a_Entity) override + { + return ( + (a_Entity->GetEntityType() == cEntity::etMonster) && + (static_cast(a_Entity)->GetMobType() == eMonsterType::mtOcelot) && + (static_cast(a_Entity)->IsSitting()) + ); + } +}; + + + + + bool cOcelot::IsCatSittingOnBlock(cWorld * a_World, Vector3d a_BlockPosition) { - return a_World->ForEachEntityInBox( - cBoundingBox(Vector3d(a_BlockPosition.x, a_BlockPosition.y + 1, a_BlockPosition.z), 1), - [=](cEntity & a_Entity) - { - return ( - (a_Entity.GetEntityType() == cEntity::etMonster) && - (static_cast(a_Entity).GetMobType() == eMonsterType::mtOcelot) && - (static_cast(a_Entity).IsSitting()) - ); - } - ); + cFindSittingCat FindSittingCat; + return a_World->ForEachEntityInBox(cBoundingBox(Vector3d(a_BlockPosition.x, a_BlockPosition.y + 1, a_BlockPosition.z), 1), FindSittingCat); } -- cgit v1.2.3