1
0

Changed DelayedFluidSimulatorData to be a vector rather than a list, performance doubled :)

git-svn-id: http://mc-server.googlecode.com/svn/trunk@1268 0a769ca7-a7f5-676a-18bf-c427514a06d6
This commit is contained in:
madmaxoft@gmail.com 2013-03-14 08:00:24 +00:00
parent cf3f09e9c1
commit e18e539ad2
3 changed files with 9 additions and 8 deletions

View File

@ -538,8 +538,9 @@ public:
} ;
// Illegal in C++03: typedef std::list< cCoordWithData<X> > cCoordWithDataList<X>;
typedef cCoordWithData<int> cCoordWithInt;
typedef std::list<cCoordWithInt> cCoordWithIntList;
typedef cCoordWithData<int> cCoordWithInt;
typedef std::list<cCoordWithInt> cCoordWithIntList;
typedef std::vector<cCoordWithInt> cCoordWithIntVector;

View File

@ -18,7 +18,7 @@
// cDelayedFluidSimulatorChunkData:
cDelayedFluidSimulatorChunkData::cDelayedFluidSimulatorChunkData(int a_TickDelay) :
m_Slots(new cCoordWithIntList[a_TickDelay])
m_Slots(new cCoordWithIntVector[a_TickDelay])
{
}
@ -75,10 +75,10 @@ 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;
cCoordWithIntList & Blocks = ChunkData->m_Slots[m_AddSlotNum];
cCoordWithIntVector & Blocks = ChunkData->m_Slots[m_AddSlotNum];
// Check for duplicates:
for (cCoordWithIntList::iterator itr = Blocks.begin(), end = Blocks.end(); itr != end; ++itr)
for (cCoordWithIntVector::iterator itr = Blocks.begin(), end = Blocks.end(); itr != end; ++itr)
{
if ((itr->x == RelX) && (itr->y == a_BlockY) && (itr->z == RelZ))
{
@ -112,10 +112,10 @@ void cDelayedFluidSimulator::SimulateChunk(float a_Dt, int a_ChunkX, int a_Chunk
{
void * ChunkDataRaw = (m_FluidBlock == E_BLOCK_WATER) ? a_Chunk->GetWaterSimulatorData() : a_Chunk->GetLavaSimulatorData();
cDelayedFluidSimulatorChunkData * ChunkData = (cDelayedFluidSimulatorChunkData *)ChunkDataRaw;
cCoordWithIntList & Blocks = ChunkData->m_Slots[m_SimSlotNum];
cCoordWithIntVector & Blocks = ChunkData->m_Slots[m_SimSlotNum];
// Simulate the blocks in the scheduled slot:
for (cCoordWithIntList::iterator itr = Blocks.begin(), end = Blocks.end(); itr != end; ++itr)
for (cCoordWithIntVector::iterator itr = Blocks.begin(), end = Blocks.end(); itr != end; ++itr)
{
SimulateBlock(a_Chunk, itr->x, itr->y, itr->z);
}

View File

@ -23,7 +23,7 @@ public:
virtual ~cDelayedFluidSimulatorChunkData();
/// Slots, one for each delay tick, each containing the blocks to simulate; relative coords. Int param not used.
cCoordWithIntList * m_Slots;
cCoordWithIntVector * m_Slots;
} ;