Files
cuberite-2a/src/Simulator/SimulatorManager.h
T

65 lines
1.5 KiB
C++
Raw Normal View History

// cSimulatorManager.h
#pragma once
#include "Simulator.h"
// fwd: Chunk.h
class cChunk;
// fwd: World.h
class cWorld;
class cSimulatorManager
{
public:
2020-07-29 00:12:45 +01:00
cSimulatorManager(cWorld & a_World);
~cSimulatorManager();
2020-07-29 00:12:45 +01:00
/** Called in each tick, a_Dt is the time passed since the last tick, in msec. */
2012-10-27 07:51:01 +00:00
void Simulate(float a_Dt);
2016-02-05 23:45:45 +02:00
2020-07-29 00:12:45 +01:00
/** Called in each tick for each chunk, a_Dt is the time passed since the last tick, in msec; direct access to chunk data available. */
2015-01-11 21:12:26 +00:00
void SimulateChunk(std::chrono::milliseconds a_DT, int a_ChunkX, int a_ChunkZ, cChunk * a_Chunk);
2016-02-05 23:45:45 +02:00
2020-07-29 00:12:45 +01:00
/* Called when a single block changes, wakes all simulators up for the block.
The simulator implementation may also decide to wake the block's face-neighbors or blocks farther away. */
void WakeUp(cChunk & a_Chunk, Vector3i a_Position);
2017-07-14 16:18:33 +02:00
/** Does the same processing as WakeUp, but for all blocks within the specified area.
Has better performance than calling WakeUp for each block individually, due to neighbor-checking.
All chunks intersected by the area should be valid (outputs a warning if not).
2020-07-29 00:12:45 +01:00
Note that, unlike WakeUp(), this call adds blocks not only face-neighboring, but also edge-neighboring and corner-neighboring the specified area. */
void WakeUp(const cCuboid & a_Area);
2017-07-14 16:18:33 +02:00
2014-10-25 21:54:00 +01:00
void RegisterSimulator(cSimulator * a_Simulator, int a_Rate); // Takes ownership of the simulator object!
protected:
2020-07-29 00:12:45 +01:00
2014-10-25 21:54:00 +01:00
typedef std::vector <std::pair<cSimulator *, int> > cSimulators;
2016-02-05 23:45:45 +02:00
cWorld & m_World;
cSimulators m_Simulators;
long long m_Ticks;
};