the game where you go into mines and start crafting! but for consoles (forked directly from smartcmd's github)
1#pragma once
2
3class Level;
4class LevelSource;
5class Tile;
6class RailTile;
7class Material;
8class TileEntity;
9class ThinFenceTile;
10class FenceTile;
11class FenceGateTile;
12class BrewingStandTile;
13class CauldronTile;
14class EggTile;
15class TheEndPortalFrameTile;
16class RepeaterTile;
17class ComparatorTile;
18class DiodeTile;
19class FireTile;
20class StemTile;
21class StairTile;
22class CocoaTile;
23class AnvilTile;
24class FlowerPotTile;
25class WallTile;
26class BeaconTile;
27class HopperTile;
28class Icon;
29class Minecraft;
30
31class TileRenderer
32{
33 friend class FallingTileRenderer;
34 private:
35 LevelSource* level;
36 Icon *fixedTexture;
37 bool xFlipTexture;
38 bool noCulling;
39 public :
40 static bool fancy;
41 bool setColor;
42
43 float tileShapeX0;
44 float tileShapeX1;
45 float tileShapeY0;
46 float tileShapeY1;
47 float tileShapeZ0;
48 float tileShapeZ1;
49 bool fixedShape;
50 bool smoothShapeLighting;
51 Minecraft *minecraft;
52 ///////////////////////////////////////// Data caching
53 unordered_map<int,int> getLightColorCount;
54 int xMin, yMin, zMin;
55 int xMin2, yMin2, zMin2;
56 int getLightColor( Tile *tt, LevelSource *level, int x, int y, int z);
57 float getShadeBrightness( Tile *tt, LevelSource *level, int x, int y, int z);
58 bool isTranslucentAt( LevelSource *level, int x, int y, int z);
59 unsigned int *cache;
60 unsigned char *tileIds;
61 static const unsigned int cache_getLightColor_valid = 0x80000000;
62 static const unsigned int cache_isTranslucentAt_valid = 0x40000000;
63 static const unsigned int cache_isSolidBlockingTile_valid = 0x20000000;
64 static const unsigned int cache_getLightColor_mask = 0x00f000f0;
65 static const unsigned int cache_isTranslucentAt_flag = 0x00000001;
66 static const unsigned int cache_isSolidBlockingTile_flag = 0x00000002;
67 /////////////////////////////////////////
68
69 void _init();
70
71public:
72 TileRenderer( LevelSource* level, int xMin, int yMin, int zMin, unsigned char *tileIds );
73 TileRenderer( LevelSource* level );
74 TileRenderer();
75 ~TileRenderer();
76 void setFixedTexture( Icon *fixedTexture );
77 void clearFixedTexture();
78 bool hasFixedTexture();
79 void setShape(float x0, float y0, float z0, float x1, float y1, float z1);
80 void setShape(Tile *tt);
81 void setFixedShape(float x0, float y0, float z0, float x1, float y1, float z1);
82 void clearFixedShape();
83
84 void tesselateInWorldFixedTexture( Tile* tile, int x, int y, int z, Icon *fixedTexture ); // 4J renamed to differentiate from tesselateInWorld
85 void tesselateInWorldNoCulling( Tile* tile, int x, int y, int z, int forceData = -1,
86 shared_ptr< TileEntity > forceEntity = shared_ptr< TileEntity >() ); // 4J added forceData, forceEntity param
87 bool tesselateInWorld( Tile* tt, int x, int y, int z, int forceData = -1, shared_ptr< TileEntity > forceEntity =
88 shared_ptr< TileEntity >() ); // 4J added forceData, forceEntity param
89
90 private:
91 bool tesselateAirPortalFrameInWorld(TheEndPortalFrameTile *tt, int x, int y, int z);
92 bool tesselateBedInWorld( Tile* tt, int x, int y, int z );
93 bool tesselateBrewingStandInWorld(BrewingStandTile *tt, int x, int y, int z);
94 bool tesselateCauldronInWorld(CauldronTile *tt, int x, int y, int z);
95 bool tesselateFlowerPotInWorld(FlowerPotTile *tt, int x, int y, int z);
96 bool tesselateAnvilInWorld(AnvilTile *tt, int x, int y, int z);
97
98public:
99 bool tesselateAnvilInWorld(AnvilTile *tt, int x, int y, int z, int data);
100
101private:
102 bool tesselateAnvilInWorld(AnvilTile *tt, int x, int y, int z, int data, bool render);
103 float tesselateAnvilPiece(AnvilTile *tt, int x, int y, int z, int part, float bottom, float width, float height, float length, bool rotate, bool render, int data);
104
105public:
106 bool tesselateTorchInWorld( Tile* tt, int x, int y, int z );
107private:
108 bool tesselateRepeaterInWorld(RepeaterTile *tt, int x, int y, int z);
109 bool tesselateComparatorInWorld(ComparatorTile *tt, int x, int y, int z);
110 bool tesselateDiodeInWorld(DiodeTile *tt, int x, int y, int z);
111 void tesselateDiodeInWorld( DiodeTile* tt, int x, int y, int z, int dir );
112 static const int FLIP_NONE = 0, FLIP_CW = 1, FLIP_CCW = 2, FLIP_180 = 3;
113
114 int northFlip;
115 int southFlip;
116 int eastFlip;
117 int westFlip;
118 int upFlip;
119 int downFlip;
120 public:
121 void tesselatePistonBaseForceExtended( Tile* tile, int x, int y, int z, int forceData = -1 ); // 4J added data param
122 private:
123 bool tesselatePistonBaseInWorld( Tile* tt, int x, int y, int z, bool forceExtended, int forceData = -1 ); // 4J added data param
124 void renderPistonArmUpDown( float x0, float x1, float y0, float y1, float z0, float z1, float br, float armLengthPixels );
125 void renderPistonArmNorthSouth( float x0, float x1, float y0, float y1, float z0, float z1, float br, float armLengthPixels );
126 void renderPistonArmEastWest( float x0, float x1, float y0, float y1, float z0, float z1, float br, float armLengthPixels );
127 public:
128 void tesselatePistonArmNoCulling( Tile* tile, int x, int y, int z, bool fullArm, int forceData = -1 ); // 4J added data param
129 private:
130 bool tesselatePistonExtensionInWorld( Tile* tt, int x, int y, int z, bool fullArm, int forceData = -1 ); // 4J added data param
131 public:
132 bool tesselateLeverInWorld( Tile* tt, int x, int y, int z );
133 bool tesselateTripwireSourceInWorld(Tile *tt, int x, int y, int z);
134 bool tesselateTripwireInWorld(Tile *tt, int x, int y, int z);
135 bool tesselateFireInWorld( FireTile* tt, int x, int y, int z );
136 bool tesselateDustInWorld( Tile* tt, int x, int y, int z );
137 bool tesselateRailInWorld( RailTile* tt, int x, int y, int z );
138 bool tesselateLadderInWorld( Tile* tt, int x, int y, int z );
139 bool tesselateVineInWorld( Tile* tt, int x, int y, int z );
140 bool tesselateThinPaneInWorld(Tile *tt, int x, int y, int z);
141 bool tesselateThinFenceInWorld( ThinFenceTile* tt, int x, int y, int z );
142 bool tesselateCrossInWorld( Tile* tt, int x, int y, int z );
143 bool tesselateStemInWorld( Tile* _tt, int x, int y, int z );
144 bool tesselateRowInWorld( Tile* tt, int x, int y, int z );
145 void tesselateTorch( Tile* tt, float x, float y, float z, float xxa, float zza, int data );
146 void tesselateCrossTexture( Tile* tt, int data, float x, float y, float z, float scale );
147 void tesselateStemTexture( Tile* tt, int data, float h, float x, float y, float z );
148 bool tesselateLilypadInWorld(Tile *tt, int x, int y, int z);
149 void tesselateStemDirTexture( StemTile* tt, int data, int dir, float h, float x, float y, float z );
150
151 void tesselateRowTexture( Tile* tt, int data, float x, float y, float z );
152 bool tesselateWaterInWorld( Tile* tt, int x, int y, int z );
153 private:
154 float getWaterHeight( int x, int y, int z, Material* m );
155 public:
156 void renderBlock( Tile* tt, Level* level, int x, int y, int z );
157 void renderBlock(Tile *tt, Level *level, int x, int y, int z, int data);
158 bool tesselateBlockInWorld( Tile* tt, int x, int y, int z );
159 // AP - added so we can cull earlier
160 bool tesselateBlockInWorld( Tile* tt, int x, int y, int z, int faceFlags );
161 bool tesselateTreeInWorld(Tile *tt, int x, int y, int z);
162 bool tesselateQuartzInWorld(Tile *tt, int x, int y, int z);
163 bool tesselateCocoaInWorld(CocoaTile *tt, int x, int y, int z);
164
165 private:
166 bool applyAmbienceOcclusion;
167 float llxyz, llxy0, llxyZ, ll0yz, ll0yZ, llXyz, llXy0;
168 float llXyZ, llxYz, llxY0, llxYZ, ll0Yz, llXYz, llXY0;
169 float ll0YZ, llXYZ, llx0z, llX0z, llx0Z, llX0Z;
170
171 // 4J - brought forward changes from 1.8.2
172 int ccxyz, ccxy0, ccxyZ, cc0yz, cc0yZ, ccXyz, ccXy0;
173 int ccXyZ, ccxYz, ccxY0, ccxYZ, cc0Yz, ccXYz, ccXY0;
174 int cc0YZ, ccXYZ, ccx0z, ccX0z, ccx0Z, ccX0Z;
175
176 int tc1, tc2, tc3, tc4; // 4J - brought forward changes from 1.8.2
177 float c1r, c2r, c3r, c4r;
178 float c1g, c2g, c3g, c4g;
179 float c1b, c2b, c3b, c4b;
180
181 public:
182 // 4J - brought forward changes from 1.8.2
183 // AP - added faceFlags so we can cull earlier
184 bool tesselateBlockInWorldWithAmbienceOcclusionTexLighting( Tile* tt, int pX, int pY, int pZ, float pBaseRed,
185 float pBaseGreen, float pBaseBlue, int faceFlags, bool smoothShapeLighting );
186
187private:
188 int blend( int a, int b, int c, int def );
189 int blend(int a, int b, int c, int d, double fa, double fb, double fc, double fd);
190public:
191 bool tesselateBlockInWorld( Tile* tt, int x, int y, int z, float r, float g, float b );
192 bool tesselateBeaconInWorld( Tile *tt, int x, int y, int z);
193 bool tesselateCactusInWorld( Tile* tt, int x, int y, int z );
194 bool tesselateCactusInWorld( Tile* tt, int x, int y, int z, float r, float g, float b );
195 bool tesselateFenceInWorld( FenceTile* tt, int x, int y, int z );
196 bool tesselateWallInWorld(WallTile *tt, int x, int y, int z);
197 bool tesselateEggInWorld(EggTile *tt, int x, int y, int z);
198 bool tesselateFenceGateInWorld(FenceGateTile *tt, int x, int y, int z);
199 bool tesselateHopperInWorld(Tile *tt, int x, int y, int z);
200 bool tesselateHopperInWorld(Tile *tt, int x, int y, int z, int data, bool render);
201 bool tesselateStairsInWorld( StairTile* tt, int x, int y, int z );
202 bool tesselateDoorInWorld( Tile* tt, int x, int y, int z );
203 void renderFaceUp( Tile* tt, double x, double y, double z, Icon *tex );
204 void renderFaceDown( Tile* tt, double x, double y, double z, Icon *tex );
205 void renderNorth( Tile* tt, double x, double y, double z, Icon *tex );
206 void renderSouth( Tile* tt, double x, double y, double z, Icon *tex );
207 void renderWest( Tile* tt, double x, double y, double z, Icon *tex );
208 void renderEast( Tile* tt, double x, double y, double z, Icon *tex );
209 void renderCube( Tile* tile, float alpha );
210 void renderTile( Tile* tile, int data, float brightness, float fAlpha = 1.0f, bool useCompiled = true ); // 4J Added useCompiled
211 static bool canRender( int renderShape );
212 Icon *getTexture(Tile *tile, LevelSource *level, int x, int y, int z, int face);
213
214 Icon *getTexture(Tile *tile, int face, int data);
215 Icon *getTexture(Tile *tile, int face);
216 Icon *getTexture(Tile *tile);
217 Icon *getTextureOrMissing(Icon *icon);
218};