mirror of
https://github.com/4jcraft/4jcraft.git
synced 2026-04-25 15:33:38 +00:00
61 lines
1.6 KiB
C++
61 lines
1.6 KiB
C++
#pragma once
|
|
#include "LiquidTile.h"
|
|
|
|
class Random;
|
|
|
|
class LiquidTileDynamic : public LiquidTile {
|
|
friend class Tile;
|
|
|
|
private:
|
|
// 4J Added
|
|
typedef struct _LiquidTickData {
|
|
Level* level;
|
|
int x, y, z;
|
|
Random* random;
|
|
_LiquidTickData(Level* level, int x, int y, int z, Random* random)
|
|
: level(level), x(x), y(y), z(z), random(random) {}
|
|
} LiquidTickData;
|
|
std::deque<LiquidTickData>
|
|
m_tilesToTick; // For an iterative version of instatick
|
|
bool m_iterativeInstatick;
|
|
|
|
protected:
|
|
LiquidTileDynamic(int id, Material* material);
|
|
virtual ~LiquidTileDynamic();
|
|
|
|
private:
|
|
void setStatic(Level* level, int x, int y, int z);
|
|
int maxCount;
|
|
|
|
public:
|
|
virtual bool isPathfindable(LevelSource* level, int x, int y, int z);
|
|
|
|
private:
|
|
// 4J Added
|
|
void iterativeTick(Level* level, int x, int y, int z, Random* random);
|
|
void mainTick(Level* level, int x, int y, int z, Random* random);
|
|
|
|
public:
|
|
void tick(Level* level, int x, int y, int z, Random* random);
|
|
|
|
private:
|
|
void trySpreadTo(Level* level, int x, int y, int z, int neighbor);
|
|
|
|
bool* result;
|
|
int* dist;
|
|
|
|
private:
|
|
int getSlopeDistance(Level* level, int x, int y, int z, int pass, int from);
|
|
bool* getSpread(Level* level, int x, int y, int z);
|
|
bool isWaterBlocking(Level* level, int x, int y, int z);
|
|
|
|
protected:
|
|
int getHighest(Level* level, int x, int y, int z, int current);
|
|
|
|
private:
|
|
bool canSpreadTo(Level* level, int x, int y, int z);
|
|
|
|
public:
|
|
void onPlace(Level* level, int x, int y, int z);
|
|
bool canInstantlyTick();
|
|
}; |