From 61a6a18b796365f03bdcdccb6eb8f2951c814bc1 Mon Sep 17 00:00:00 2001 From: Mat Date: Sat, 21 Mar 2020 01:42:16 +0200 Subject: Improve explosion visuals (#4511) --- src/World.cpp | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/src/World.cpp b/src/World.cpp index a80cffbcc..d5209d69c 100644 --- a/src/World.cpp +++ b/src/World.cpp @@ -1407,7 +1407,11 @@ void cWorld::DoExplosionAt(double a_ExplosionSize, double a_BlockX, double a_Blo // TODO: Implement block hardiness cVector3iArray BlocksAffected; m_ChunkMap->DoExplosionAt(a_ExplosionSize, a_BlockX, a_BlockY, a_BlockZ, BlocksAffected); - BroadcastSoundEffect("entity.generic.explode", Vector3d(a_BlockX, a_BlockY, a_BlockZ), 1.0f, 0.6f); + + auto & Random = GetRandomProvider(); + auto SoundPitchMultiplier = 1.0f + (Random.RandReal(1.0f) - Random.RandReal(1.0f)) * 0.2f; + + BroadcastSoundEffect("entity.generic.explode", Vector3d(a_BlockX, a_BlockY, a_BlockZ), 4.0f, SoundPitchMultiplier * 0.7f); { cCSLock Lock(m_CSPlayers); @@ -1423,6 +1427,18 @@ void cWorld::DoExplosionAt(double a_ExplosionSize, double a_BlockX, double a_Blo } } + auto Position = Vector3d(a_BlockX, a_BlockY - 0.5f, a_BlockZ); + auto ParticleFormula = a_ExplosionSize * 0.33f; + auto Spread = ParticleFormula * 0.5f; + auto ParticleCount = std::min((ParticleFormula * 125), 600.0); + + BroadcastParticleEffect("largesmoke", Position, Vector3f{}, static_cast(Spread), static_cast(ParticleCount)); + + Spread = ParticleFormula * 0.35f; + ParticleCount = std::min((ParticleFormula * 550), 1800.0); + + BroadcastParticleEffect("explode", Position, Vector3f{}, static_cast(Spread), static_cast(ParticleCount)); + cPluginManager::Get()->CallHookExploded(*this, a_ExplosionSize, a_CanCauseFire, a_BlockX, a_BlockY, a_BlockZ, a_Source, a_SourceData); } -- cgit v1.2.3