From 6f883cba2d9e5089c50be3a377f4308ed3541908 Mon Sep 17 00:00:00 2001 From: "madmaxoft@gmail.com" Date: Thu, 14 Mar 2013 21:56:01 +0000 Subject: Small performance improvements in fluid simulator. git-svn-id: http://mc-server.googlecode.com/svn/trunk@1276 0a769ca7-a7f5-676a-18bf-c427514a06d6 --- source/Simulator/DelayedFluidSimulator.cpp | 7 ++++--- source/Simulator/DelayedFluidSimulator.h | 4 +++- 2 files changed, 7 insertions(+), 4 deletions(-) (limited to 'source/Simulator') diff --git a/source/Simulator/DelayedFluidSimulator.cpp b/source/Simulator/DelayedFluidSimulator.cpp index f6b3e5547..25179d55a 100644 --- a/source/Simulator/DelayedFluidSimulator.cpp +++ b/source/Simulator/DelayedFluidSimulator.cpp @@ -76,18 +76,19 @@ void cDelayedFluidSimulator::AddBlock(int a_BlockX, int a_BlockY, int a_BlockZ, void * ChunkDataRaw = (m_FluidBlock == E_BLOCK_WATER) ? a_Chunk->GetWaterSimulatorData() : a_Chunk->GetLavaSimulatorData(); cDelayedFluidSimulatorChunkData * ChunkData = (cDelayedFluidSimulatorChunkData *)ChunkDataRaw; cCoordWithIntVector & Blocks = ChunkData->m_Slots[m_AddSlotNum]; - + // Check for duplicates: + int Index = cChunkDef::MakeIndexNoCheck(RelX, a_BlockY, RelZ); for (cCoordWithIntVector::iterator itr = Blocks.begin(), end = Blocks.end(); itr != end; ++itr) { - if ((itr->x == RelX) && (itr->y == a_BlockY) && (itr->z == RelZ)) + if ((itr->Data == Index)) { return; } } ++m_TotalBlocks; - Blocks.push_back(cCoordWithInt(RelX, a_BlockY, RelZ)); + Blocks.push_back(cCoordWithInt(RelX, a_BlockY, RelZ, Index)); } diff --git a/source/Simulator/DelayedFluidSimulator.h b/source/Simulator/DelayedFluidSimulator.h index fc1a59f69..5f8c6e073 100644 --- a/source/Simulator/DelayedFluidSimulator.h +++ b/source/Simulator/DelayedFluidSimulator.h @@ -22,7 +22,9 @@ public: cDelayedFluidSimulatorChunkData(int a_TickDelay); virtual ~cDelayedFluidSimulatorChunkData(); - /// Slots, one for each delay tick, each containing the blocks to simulate; relative coords. Int param not used. + /** Slots, one for each delay tick, each containing the blocks to simulate; relative coords. + Int param is the block index (for faster duplicate comparison in cDelayedFluidSimulator::AddBlock()) + */ cCoordWithIntVector * m_Slots; } ; -- cgit v1.2.3