diff options
author | Tiger Wang <ziwei.tiger@outlook.com> | 2020-09-12 20:57:44 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-09-12 20:57:44 +0200 |
commit | 93adbdce9a769b42baeb70f9ead5c7c6a35834b5 (patch) | |
tree | e0116770113a78af0d2d1c4d44a3878f551f0703 /src/ClientHandle.cpp | |
parent | fixed missing include for FreeBSD. (#4852) (diff) | |
download | cuberite-93adbdce9a769b42baeb70f9ead5c7c6a35834b5.tar cuberite-93adbdce9a769b42baeb70f9ead5c7c6a35834b5.tar.gz cuberite-93adbdce9a769b42baeb70f9ead5c7c6a35834b5.tar.bz2 cuberite-93adbdce9a769b42baeb70f9ead5c7c6a35834b5.tar.lz cuberite-93adbdce9a769b42baeb70f9ead5c7c6a35834b5.tar.xz cuberite-93adbdce9a769b42baeb70f9ead5c7c6a35834b5.tar.zst cuberite-93adbdce9a769b42baeb70f9ead5c7c6a35834b5.zip |
Diffstat (limited to 'src/ClientHandle.cpp')
-rw-r--r-- | src/ClientHandle.cpp | 24 |
1 files changed, 22 insertions, 2 deletions
diff --git a/src/ClientHandle.cpp b/src/ClientHandle.cpp index 86e90aa8b..098a67afd 100644 --- a/src/ClientHandle.cpp +++ b/src/ClientHandle.cpp @@ -2637,7 +2637,7 @@ void cClientHandle::SendEntityVelocity(const cEntity & a_Entity) -void cClientHandle::SendExplosion(const Vector3d a_Pos, float a_Radius, const cVector3iArray & a_BlocksAffected, const Vector3d a_PlayerMotion) +void cClientHandle::SendExplosion(const Vector3f a_Position, const float a_Power) { if (m_NumExplosionsThisTick > MAX_EXPLOSIONS_PER_TICK) { @@ -2648,7 +2648,27 @@ void cClientHandle::SendExplosion(const Vector3d a_Pos, float a_Radius, const cV // Update the statistics: m_NumExplosionsThisTick++; - m_Protocol->SendExplosion(a_Pos.x, a_Pos.y, a_Pos.z, a_Radius, a_BlocksAffected, a_PlayerMotion); + auto & Random = GetRandomProvider(); + const auto SoundPitchMultiplier = 1.0f + (Random.RandReal() - Random.RandReal()) * 0.2f; + + // Sound: + SendSoundEffect("entity.generic.explode", a_Position, 4.0f, SoundPitchMultiplier * 0.7f); + + const auto ParticleFormula = a_Power * 0.33f; + auto Spread = ParticleFormula * 0.5f; + auto ParticleCount = std::min(static_cast<int>(ParticleFormula * 125), 600); + + // Dark smoke particles: + SendParticleEffect("largesmoke", a_Position.x, a_Position.y, a_Position.z, 0, 0, 0, Spread, static_cast<int>(ParticleCount)); + + Spread = ParticleFormula * 0.35f; + ParticleCount = std::min(static_cast<int>(ParticleFormula * 550), 1800); + + // Light smoke particles: + SendParticleEffect("explode", a_Position.x, a_Position.y, a_Position.z, 0, 0, 0, Spread, static_cast<int>(ParticleCount)); + + // Shockwave effect: + m_Protocol->SendExplosion(a_Position, a_Power); } |