the game where you go into mines and start crafting! but for consoles (forked directly from smartcmd's github)
1#pragma once
2#include "Tile.h"
3#include "TilePos.h"
4#include "Definitions.h"
5
6class Random;
7class HitResult;
8class ChunkRebuildData;
9
10using namespace std;
11
12class BaseRailTile : public Tile
13{
14 friend class Tile;
15 friend class ChunkRebuildData;
16public:
17 static const int DIR_FLAT_Z = 0;
18 static const int DIR_FLAT_X = 1;
19 // the data bit is used by boosters and detectors, so they can't turn
20 static const int RAIL_DATA_BIT = 8;
21 static const int RAIL_DIRECTION_MASK = 7;
22
23private:
24 Icon *iconTurn;
25
26protected:
27 bool usesDataBit;
28
29 class Rail
30 {
31 friend class BaseRailTile;
32 friend class RailTile;
33 private:
34 Level *level;
35 int x, y, z;
36 bool usesDataBit;
37 vector<TilePos *> connections;
38 bool m_bValidRail; // 4J added
39
40 public:
41 Rail(Level *level, int x, int y, int z);
42 ~Rail();
43 private:
44 void updateConnections(int direction);
45 void removeSoftConnections();
46 bool hasRail(int x, int y, int z);
47 Rail *getRail(TilePos *p);
48 bool connectsTo(Rail *rail);
49 bool hasConnection(int x, int y, int z);
50
51 protected:
52 int countPotentialConnections();
53
54 private:
55 bool canConnectTo(Rail *rail);
56 void connectTo(Rail *rail);
57 bool hasNeighborRail(int x, int y, int z);
58 public:
59 void place(bool hasSignal, bool first);
60 };
61public:
62 static bool isRail(Level *level, int x, int y, int z);
63 static bool isRail(int id);
64protected:
65 BaseRailTile(int id, bool usesDataBit);
66public:
67 using Tile::getResourceCount;
68
69 bool isUsesDataBit();
70 virtual AABB *getAABB(Level *level, int x, int y, int z);
71 virtual bool blocksLight();
72 virtual bool isSolidRender(bool isServerLevel = false);
73 virtual HitResult *clip(Level *level, int xt, int yt, int zt, Vec3 *a, Vec3 *b);
74 virtual void updateShape(LevelSource *level, int x, int y, int z, int forceData = -1, shared_ptr<TileEntity> forceEntity = shared_ptr<TileEntity>()); // 4J added forceData, forceEntity param
75 virtual bool isCubeShaped();
76 virtual int getRenderShape();
77 virtual int getResourceCount(Random random);
78 virtual bool mayPlace(Level *level, int x, int y, int z);
79 virtual void onPlace(Level *level, int x, int y, int z);
80 virtual void neighborChanged(Level *level, int x, int y, int z, int type);
81
82protected:
83 virtual void updateState(Level *level, int x, int y, int z, int data, int dir, int type);
84 virtual void updateDir(Level *level, int x, int y, int z, bool first);
85
86public:
87 int getPistonPushReaction();
88 void onRemove(Level *level, int x, int y, int z, int id, int data);
89};