Files

66 lines
1.6 KiB
C
Raw Permalink Normal View History

2026-03-01 12:16:08 +08:00
#pragma once
#include "TorchTile.h"
using namespace std;
class Random;
class NotGateTile : public TorchTile
{
friend class Tile;
private:
static const int RECENT_TOGGLE_TIMER = 20 * 3;
static const int MAX_RECENT_TOGGLES = 8;
2026-03-01 12:16:08 +08:00
bool on;
2026-03-01 12:16:08 +08:00
public:
class Toggle
2026-03-01 12:16:08 +08:00
{
public:
int x, y, z;
__int64 when;
2026-03-01 12:16:08 +08:00
Toggle(int x, int y, int z, __int64 when)
2026-03-01 12:16:08 +08:00
{
this->x = x;
this->y = y;
this->z = z;
this->when = when;
}
};
2026-03-01 12:16:08 +08:00
private:
static unordered_map<Level *, deque<Toggle> *> recentToggles; // 4J - brought forward change from 1.3.2
public:
static void removeLevelReferences(Level *level); // 4J added
private:
bool isToggledTooFrequently(Level *level, int x, int y, int z, bool add);
2026-03-01 12:16:08 +08:00
protected:
NotGateTile(int id, bool on);
public:
int getTickDelay(Level *level);
2026-03-01 12:16:08 +08:00
void onPlace(Level *level, int x, int y, int z);
void onRemove(Level *level, int x, int y, int z, int id, int data);
int getSignal(LevelSource *level, int x, int y, int z, int face);
2026-03-01 12:16:08 +08:00
private:
bool hasNeighborSignal(Level *level, int x, int y, int z);
public:
void tick(Level *level, int x, int y, int z, Random *random);
void neighborChanged(Level *level, int x, int y, int z, int type);
2026-03-01 12:16:08 +08:00
int getDirectSignal(LevelSource *level, int x, int y, int z, int face);
2026-03-01 12:16:08 +08:00
int getResource(int data, Random *random, int playerBonusLevel);
bool isSignalSource();
2026-03-01 12:16:08 +08:00
public:
void animateTick(Level *level, int xt, int yt, int zt, Random *random);
int cloneTileId(Level *level, int x, int y, int z);
void levelTimeChanged(Level *level, __int64 delta, __int64 newTime);
bool isMatching(int id);
2026-03-01 12:16:08 +08:00
};