1
0

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 <me@bearbin.net>
This commit is contained in:
Tiger Wang
2020-09-12 19:57:44 +01:00
committed by GitHub
parent 834d61dacc
commit 93adbdce9a
22 changed files with 531 additions and 300 deletions

View File

@@ -74,29 +74,6 @@ void cSandSimulator::SimulateChunk(std::chrono::milliseconds a_Dt, int a_ChunkX,
bool cSandSimulator::IsAllowedBlock(BLOCKTYPE a_BlockType)
{
switch (a_BlockType)
{
case E_BLOCK_ANVIL:
case E_BLOCK_CONCRETE_POWDER:
case E_BLOCK_DRAGON_EGG:
case E_BLOCK_GRAVEL:
case E_BLOCK_SAND:
{
return true;
}
default:
{
return false;
}
}
}
void cSandSimulator::AddBlock(cChunk & a_Chunk, Vector3i a_Position, BLOCKTYPE a_Block)
{
if (!IsAllowedBlock(a_Block))
@@ -286,6 +263,29 @@ void cSandSimulator::FinishFalling(
bool cSandSimulator::IsAllowedBlock(BLOCKTYPE a_BlockType)
{
switch (a_BlockType)
{
case E_BLOCK_ANVIL:
case E_BLOCK_CONCRETE_POWDER:
case E_BLOCK_DRAGON_EGG:
case E_BLOCK_GRAVEL:
case E_BLOCK_SAND:
{
return true;
}
default:
{
return false;
}
}
}
void cSandSimulator::DoInstantFall(cChunk * a_Chunk, int a_RelX, int a_RelY, int a_RelZ)
{
// Remove the original block: