Revert "Replace ItemCallbacks with lambdas (#3948)"
This reverts commit 496c337cdf.
This commit is contained in:
committed by
Alexander Harkness
parent
700bbdabf5
commit
49c443896d
@@ -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<cMonster *>(a_Entity)->GetMobType() == eMonsterType::mtOcelot) &&
|
||||
(static_cast<cOcelot *>(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<cMonster &>(a_Entity).GetMobType() == eMonsterType::mtOcelot) &&
|
||||
(static_cast<cOcelot &>(a_Entity).IsSitting())
|
||||
);
|
||||
}
|
||||
);
|
||||
cFindSittingCat FindSittingCat;
|
||||
return a_World->ForEachEntityInBox(cBoundingBox(Vector3d(a_BlockPosition.x, a_BlockPosition.y + 1, a_BlockPosition.z), 1), FindSittingCat);
|
||||
}
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user