From 93adbdce9a769b42baeb70f9ead5c7c6a35834b5 Mon Sep 17 00:00:00 2001 From: Tiger Wang Date: Sat, 12 Sep 2020 19:57:44 +0100 Subject: Use tracing for explosions (#4845) * TNT: Implement tracing algorithm + Add intensity tracing * Fix iterating over all players to SendExplosion, even those not in range * Implemented TNT entity interaction * Fixed misaligned destruction tracing * Finalise TNT algorithm - Remove BlockArea and just use chunks Using SetBlock makes it so that we can update everything properly, and does appear to be faster. * BlockInfo learns about explosion attentuation * Rename Explodinator parameters * TNT: pull block destruction into common function Co-authored-by: Alexander Harkness --- src/Protocol/Protocol_1_8.cpp | 24 +++++++++--------------- 1 file changed, 9 insertions(+), 15 deletions(-) (limited to 'src/Protocol/Protocol_1_8.cpp') diff --git a/src/Protocol/Protocol_1_8.cpp b/src/Protocol/Protocol_1_8.cpp index 39c20b6cf..e5ba82111 100644 --- a/src/Protocol/Protocol_1_8.cpp +++ b/src/Protocol/Protocol_1_8.cpp @@ -620,25 +620,19 @@ void cProtocol_1_8_0::SendExperienceOrb(const cExpOrb & a_ExpOrb) -void cProtocol_1_8_0::SendExplosion(double a_BlockX, double a_BlockY, double a_BlockZ, float a_Radius, const cVector3iArray & a_BlocksAffected, const Vector3d & a_PlayerMotion) +void cProtocol_1_8_0::SendExplosion(const Vector3f a_Position, const float a_Power) { ASSERT(m_State == 3); // In game mode? cPacketizer Pkt(*this, pktExplosion); - Pkt.WriteBEFloat(static_cast(a_BlockX)); - Pkt.WriteBEFloat(static_cast(a_BlockY)); - Pkt.WriteBEFloat(static_cast(a_BlockZ)); - Pkt.WriteBEFloat(static_cast(a_Radius)); - Pkt.WriteBEUInt32(static_cast(a_BlocksAffected.size())); - for (cVector3iArray::const_iterator itr = a_BlocksAffected.begin(), end = a_BlocksAffected.end(); itr != end; ++itr) - { - Pkt.WriteBEInt8(static_cast(itr->x)); - Pkt.WriteBEInt8(static_cast(itr->y)); - Pkt.WriteBEInt8(static_cast(itr->z)); - } // for itr - a_BlockAffected[] - Pkt.WriteBEFloat(static_cast(a_PlayerMotion.x)); - Pkt.WriteBEFloat(static_cast(a_PlayerMotion.y)); - Pkt.WriteBEFloat(static_cast(a_PlayerMotion.z)); + Pkt.WriteBEFloat(a_Position.x); + Pkt.WriteBEFloat(a_Position.y); + Pkt.WriteBEFloat(a_Position.z); + Pkt.WriteBEFloat(a_Power); + Pkt.WriteBEUInt32(0); + Pkt.WriteBEFloat(0); + Pkt.WriteBEFloat(0); + Pkt.WriteBEFloat(0); } -- cgit v1.2.3