Add WakeUp/AddBlock distinction
* WakeUp is for singular changes (block breaking for example). The simulator should check blocks around the position and discover other affected blocks as it sees fit * AddBlock is for when you know a whole area is to be updated; chunk loading, or area wakeups for example + Prepares for correct handling of destroyed blocks after removal of SolidBlockHandler in the redstone simulator
This commit is contained in:
@@ -28,26 +28,30 @@ class cWorld;
|
||||
class cSimulatorManager
|
||||
{
|
||||
public:
|
||||
|
||||
cSimulatorManager(cWorld & a_World);
|
||||
~cSimulatorManager();
|
||||
|
||||
/** Called in each tick, a_Dt is the time passed since the last tick, in msec. */
|
||||
void Simulate(float a_Dt);
|
||||
|
||||
/** 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. */
|
||||
void SimulateChunk(std::chrono::milliseconds a_DT, int a_ChunkX, int a_ChunkZ, cChunk * a_Chunk);
|
||||
|
||||
/* Called when a single block changes, wakes all simulators up for the block and its face-neighbors. */
|
||||
void WakeUp(Vector3i a_Block, cChunk * a_Chunk);
|
||||
/* 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);
|
||||
|
||||
/** 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).
|
||||
Note that, unlike WakeUp(), this call adds blocks not only face-neighboring, but also edge-neighboring and
|
||||
corner-neighboring the specified area. So far none of the simulators care about that. */
|
||||
void WakeUpArea(const cCuboid & a_Area);
|
||||
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);
|
||||
|
||||
void RegisterSimulator(cSimulator * a_Simulator, int a_Rate); // Takes ownership of the simulator object!
|
||||
|
||||
protected:
|
||||
|
||||
typedef std::vector <std::pair<cSimulator *, int> > cSimulators;
|
||||
|
||||
cWorld & m_World;
|
||||
|
||||
Reference in New Issue
Block a user