diff options
author | LogicParrot <LogicParrot@users.noreply.github.com> | 2017-09-02 09:45:06 +0200 |
---|---|---|
committer | Alexander Harkness <me@bearbin.net> | 2017-09-02 09:50:23 +0200 |
commit | 49c443896dcac8c4eaf08c4024e8bd2366ad899a (patch) | |
tree | b1ec46cab2b4e5731860c7136f1bbfca6fe9d458 /src/Mobs/Wolf.cpp | |
parent | SetSwimState now takes into account head height (diff) | |
download | cuberite-49c443896dcac8c4eaf08c4024e8bd2366ad899a.tar cuberite-49c443896dcac8c4eaf08c4024e8bd2366ad899a.tar.gz cuberite-49c443896dcac8c4eaf08c4024e8bd2366ad899a.tar.bz2 cuberite-49c443896dcac8c4eaf08c4024e8bd2366ad899a.tar.lz cuberite-49c443896dcac8c4eaf08c4024e8bd2366ad899a.tar.xz cuberite-49c443896dcac8c4eaf08c4024e8bd2366ad899a.tar.zst cuberite-49c443896dcac8c4eaf08c4024e8bd2366ad899a.zip |
Diffstat (limited to 'src/Mobs/Wolf.cpp')
-rw-r--r-- | src/Mobs/Wolf.cpp | 45 |
1 files changed, 28 insertions, 17 deletions
diff --git a/src/Mobs/Wolf.cpp b/src/Mobs/Wolf.cpp index 45df3dd05..f3b859c76 100644 --- a/src/Mobs/Wolf.cpp +++ b/src/Mobs/Wolf.cpp @@ -80,13 +80,19 @@ void cWolf::NotifyAlliesOfFight(cPawn * a_Opponent) return; } m_NotificationCooldown = 15; - - m_World->DoWithPlayerByUUID(m_OwnerUUID, [=](cPlayer & a_Player) + class cCallback : public cPlayerListCallback + { + virtual bool Item(cPlayer * a_Player) override { - a_Player.NotifyNearbyWolves(a_Opponent, false); + a_Player->NotifyNearbyWolves(m_Opponent, false); return false; } - ); + public: + cPawn * m_Opponent; + } Callback; + + Callback.m_Opponent = a_Opponent; + m_World->DoWithPlayerByUUID(m_OwnerUUID, Callback); } bool cWolf::Attack(std::chrono::milliseconds a_Dt) @@ -341,25 +347,30 @@ void cWolf::Tick(std::chrono::milliseconds a_Dt, cChunk & a_Chunk) void cWolf::TickFollowPlayer() { - Vector3d OwnerPos; - bool OwnerFlying; - 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 > 20) { - 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); SetTarget(nullptr); } } @@ -374,9 +385,9 @@ void cWolf::TickFollowPlayer() { if (GetTarget() == nullptr) { - if (!OwnerFlying) + if (!Callback.OwnerFlying) { - MoveToPosition(OwnerPos); + MoveToPosition(Callback.OwnerPos); } } } |