diff options
author | peterbell10 <peterbell10@live.co.uk> | 2018-07-24 23:30:49 +0200 |
---|---|---|
committer | Tiger Wang <ziwei.tiger@outlook.com> | 2018-07-24 23:30:49 +0200 |
commit | c94d7184ebaf7e8540f717c70c1e03ae62e5a7bd (patch) | |
tree | 3a373f8ea6f06dc9b117d2d103bfaee5705040b8 /src/Entities | |
parent | Stop cFunctionRef constructor from disabling default copy constructor. (#4173) (diff) | |
download | cuberite-c94d7184ebaf7e8540f717c70c1e03ae62e5a7bd.tar cuberite-c94d7184ebaf7e8540f717c70c1e03ae62e5a7bd.tar.gz cuberite-c94d7184ebaf7e8540f717c70c1e03ae62e5a7bd.tar.bz2 cuberite-c94d7184ebaf7e8540f717c70c1e03ae62e5a7bd.tar.lz cuberite-c94d7184ebaf7e8540f717c70c1e03ae62e5a7bd.tar.xz cuberite-c94d7184ebaf7e8540f717c70c1e03ae62e5a7bd.tar.zst cuberite-c94d7184ebaf7e8540f717c70c1e03ae62e5a7bd.zip |
Diffstat (limited to 'src/Entities')
-rw-r--r-- | src/Entities/Entity.cpp | 21 | ||||
-rw-r--r-- | src/Entities/Entity.h | 3 | ||||
-rw-r--r-- | src/Entities/EntityEffect.cpp | 6 | ||||
-rw-r--r-- | src/Entities/Floater.cpp | 5 | ||||
-rw-r--r-- | src/Entities/Pickup.cpp | 6 |
5 files changed, 14 insertions, 27 deletions
diff --git a/src/Entities/Entity.cpp b/src/Entities/Entity.cpp index 4ecc5c4da..a71c68708 100644 --- a/src/Entities/Entity.cpp +++ b/src/Entities/Entity.cpp @@ -214,15 +214,6 @@ void cEntity::SetParentChunk(cChunk * a_Chunk) -cChunk * cEntity::GetParentChunk() -{ - return m_ParentChunk; -} - - - - - void cEntity::Destroy(bool a_ShouldBroadcast) { SetIsTicking(false); @@ -1923,23 +1914,21 @@ void cEntity::BroadcastMovementUpdate(const cClientHandle * a_Exclude) if (!m_bHasSentNoSpeed || IsPlayer()) { // TODO: Pickups move disgracefully if relative move packets are sent as opposed to just velocity. Have a system to send relmove only when SetPosXXX() is called with a large difference in position - int DiffX = FloorC(GetPosX() * 32.0) - FloorC(m_LastSentPosition.x * 32.0); - int DiffY = FloorC(GetPosY() * 32.0) - FloorC(m_LastSentPosition.y * 32.0); - int DiffZ = FloorC(GetPosZ() * 32.0) - FloorC(m_LastSentPosition.z * 32.0); + Vector3i Diff = (GetPosition() * 32.0).Floor() - (m_LastSentPosition * 32.0).Floor(); - if ((DiffX != 0) || (DiffY != 0) || (DiffZ != 0)) // Have we moved? + if (Diff.HasNonZeroLength()) // Have we moved? { - if ((abs(DiffX) <= 127) && (abs(DiffY) <= 127) && (abs(DiffZ) <= 127)) // Limitations of a Byte + if ((abs(Diff.x) <= 127) && (abs(Diff.y) <= 127) && (abs(Diff.z) <= 127)) // Limitations of a Byte { // Difference within Byte limitations, use a relative move packet if (m_bDirtyOrientation) { - m_World->BroadcastEntityRelMoveLook(*this, static_cast<char>(DiffX), static_cast<char>(DiffY), static_cast<char>(DiffZ), a_Exclude); + m_World->BroadcastEntityRelMoveLook(*this, Vector3<Int8>(Diff), a_Exclude); m_bDirtyOrientation = false; } else { - m_World->BroadcastEntityRelMove(*this, static_cast<char>(DiffX), static_cast<char>(DiffY), static_cast<char>(DiffZ), a_Exclude); + m_World->BroadcastEntityRelMove(*this, Vector3<Int8>(Diff), a_Exclude); } // Clients seem to store two positions, one for the velocity packet and one for the teleport / relmove packet // The latter is only changed with a relmove / teleport, and m_LastSentPosition stores this position diff --git a/src/Entities/Entity.h b/src/Entities/Entity.h index 91ad524c7..bb6efcbbd 100644 --- a/src/Entities/Entity.h +++ b/src/Entities/Entity.h @@ -535,7 +535,8 @@ public: void SetParentChunk(cChunk * a_Chunk); /** Returns the chunk responsible for ticking this entity. */ - cChunk * GetParentChunk(); + cChunk * GetParentChunk() { return m_ParentChunk; } + const cChunk * GetParentChunk() const { return m_ParentChunk; } /** Set the entity's status to either ticking or not ticking. */ void SetIsTicking(bool a_IsTicking); diff --git a/src/Entities/EntityEffect.cpp b/src/Entities/EntityEffect.cpp index 45a98c0d2..040513a26 100644 --- a/src/Entities/EntityEffect.cpp +++ b/src/Entities/EntityEffect.cpp @@ -410,10 +410,10 @@ void cEntityEffectHunger::OnTick(cPawn & a_Target) void cEntityEffectInvisibility::BroadcastMetadata(cPawn & a_Target) { - auto ParentChunk = a_Target.GetParentChunk(); - if (ParentChunk != nullptr) + auto World = a_Target.GetWorld(); + if (World != nullptr) { - ParentChunk->BroadcastEntityMetadata(a_Target); + World->BroadcastEntityMetadata(a_Target); } } diff --git a/src/Entities/Floater.cpp b/src/Entities/Floater.cpp index 82213c668..d70cb4345 100644 --- a/src/Entities/Floater.cpp +++ b/src/Entities/Floater.cpp @@ -6,7 +6,6 @@ #include "Floater.h" #include "Player.h" #include "../ClientHandle.h" -#include "Broadcaster.h" @@ -123,12 +122,12 @@ void cFloater::Tick(std::chrono::milliseconds a_Dt, cChunk & a_Chunk) { LOGD("Started producing particles for floater %i", GetUniqueID()); m_ParticlePos.Set(GetPosX() + Random.RandInt(-4, 4), GetPosY(), GetPosZ() + Random.RandInt(-4, 4)); - m_World->GetBroadcaster().BroadcastParticleEffect("splash", static_cast<Vector3f>(m_ParticlePos), Vector3f{}, 0, 15); + m_World->BroadcastParticleEffect("splash", static_cast<Vector3f>(m_ParticlePos), Vector3f{}, 0, 15); } else if (m_CountDownTime < 20) { m_ParticlePos = (m_ParticlePos + (GetPosition() - m_ParticlePos) / 6); - m_World->GetBroadcaster().BroadcastParticleEffect("splash", static_cast<Vector3f>(m_ParticlePos), Vector3f{}, 0, 15); + m_World->BroadcastParticleEffect("splash", static_cast<Vector3f>(m_ParticlePos), Vector3f{}, 0, 15); } m_CountDownTime--; diff --git a/src/Entities/Pickup.cpp b/src/Entities/Pickup.cpp index 629f5d189..4b983588c 100644 --- a/src/Entities/Pickup.cpp +++ b/src/Entities/Pickup.cpp @@ -60,10 +60,8 @@ public: if (Item.m_ItemCount <= 0) { /* Experimental: show animation pickups getting together */ - int DiffX = FloorC(m_Pickup->GetPosX() * 32.0) - FloorC(EntityPos.x * 32.0); - int DiffY = FloorC(m_Pickup->GetPosY() * 32.0) - FloorC(EntityPos.y * 32.0); - int DiffZ = FloorC(m_Pickup->GetPosZ() * 32.0) - FloorC(EntityPos.z * 32.0); - a_Entity.GetWorld()->BroadcastEntityRelMove(a_Entity, static_cast<char>(DiffX), static_cast<char>(DiffY), static_cast<char>(DiffZ)); + auto Diff = (m_Pickup->GetPosition() * 32.0).Floor() - (EntityPos * 32.0).Floor(); + a_Entity.GetWorld()->BroadcastEntityRelMove(a_Entity, Vector3<char>(Diff)); /* End of experimental animation */ a_Entity.Destroy(); |