510 lines
15 KiB
C++
510 lines
15 KiB
C++
#pragma once
|
|
// #include "Material.h"
|
|
// #include "Vec3.h"
|
|
// #include "Definitions.h"
|
|
// #include "SoundTypes.h"
|
|
// using namespace std;
|
|
#include "Icon_SPU.h"
|
|
#include "Material_SPU.h"
|
|
#include <stddef.h>
|
|
|
|
class ChunkRebuildData;
|
|
class GrassTile_SPU;
|
|
class LeafTile;
|
|
class TallGrass;
|
|
class DeadBushTile;
|
|
class FireTile;
|
|
class PortalTile;
|
|
class MycelTile;
|
|
class PistonExtensionTile;
|
|
class PistonMovingPiece;
|
|
class StoneTile;
|
|
class stoneBrick;
|
|
class Bush;
|
|
class StairTile;
|
|
class LiquidTile;
|
|
class PistonBaseTile;
|
|
class ChestTile;
|
|
class RedStoneDustTile;
|
|
class RepeaterTile;
|
|
class CauldronTile;
|
|
class TripWireSourceTile;
|
|
class Random;
|
|
class HitResult;
|
|
class Level;
|
|
|
|
class Player;
|
|
class LevelSource;
|
|
class Mob;
|
|
class TileEntity;
|
|
class HalfSlabTile;
|
|
class IconRegister;
|
|
|
|
class TileData_SPU
|
|
{
|
|
public:
|
|
|
|
class Bitfield256
|
|
{
|
|
unsigned int m_data[8];
|
|
|
|
void setBit(unsigned char i){ m_data[i>>5] |= (1<<(i%32)); }
|
|
void clearBit(unsigned char i) { m_data[i>>5] &= ~(1<<(i%32)); }
|
|
public:
|
|
bool operator[](unsigned char i) { return (m_data[i>>5] & 1<<(i%32)) != 0; }
|
|
void set(unsigned char i, bool val){ (val) ? setBit(i) : clearBit(i); }
|
|
};
|
|
Bitfield256 mipmapEnable;
|
|
Bitfield256 solid;
|
|
Bitfield256 transculent;
|
|
Bitfield256 _sendTileData;
|
|
Bitfield256 propagate;
|
|
Bitfield256 signalSource;
|
|
Bitfield256 cubeShaped;
|
|
|
|
|
|
char lightBlock[256];
|
|
char lightEmission[256];
|
|
char materialIDs[256];
|
|
Material_SPU materials[Material_SPU::num_Ids];
|
|
|
|
float xx0[256];
|
|
float yy0[256];
|
|
float zz0[256];
|
|
float xx1[256];
|
|
float yy1[256];
|
|
float zz1[256];
|
|
|
|
int iconTexWidth;
|
|
int iconTexHeight;
|
|
Icon_SPU iconData[256];
|
|
|
|
|
|
Icon_SPU grass_iconTop;
|
|
Icon_SPU grass_iconSnowSide;
|
|
Icon_SPU grass_iconSideOverlay;
|
|
|
|
Icon_SPU ironFence_EdgeTexture;
|
|
Icon_SPU thinGlass_EdgeTexture;
|
|
|
|
Icon_SPU farmTile_Wet;
|
|
Icon_SPU farmTile_Dry;
|
|
|
|
Icon_SPU doorTile_Icons[8];
|
|
|
|
Icon_SPU tallGrass_Icons[3];
|
|
|
|
Icon_SPU sandStone_icons[3];
|
|
Icon_SPU sandStone_iconTop;
|
|
Icon_SPU sandStone_iconBottom;
|
|
|
|
Icon_SPU woodTile_icons[4];
|
|
|
|
Icon_SPU treeTile_icons[4];
|
|
Icon_SPU treeTile_iconTop;
|
|
|
|
Icon_SPU leafTile_icons[2][4];
|
|
bool leafTile_allowSame;
|
|
int leafTile_fancyTextureSet;
|
|
|
|
Icon_SPU cropTile_icons[8];
|
|
|
|
Icon_SPU furnaceTile_iconTop;
|
|
Icon_SPU furnaceTile_iconFront;
|
|
Icon_SPU furnaceTile_iconFront_lit;
|
|
|
|
Icon_SPU liquidTile_iconWaterStill;
|
|
Icon_SPU liquidTile_iconWaterFlow;
|
|
Icon_SPU liquidTile_iconLavaStill;
|
|
Icon_SPU liquidTile_iconLavaFlow;
|
|
|
|
Icon_SPU fireTile_icons[2];
|
|
Icon_SPU sapling_icons[4];
|
|
|
|
bool glassTile_allowSame;
|
|
bool iceTile_allowSame;
|
|
|
|
Icon_SPU dispenserTile_iconTop;
|
|
Icon_SPU dispenserTile_iconFront;
|
|
Icon_SPU dispenserTile_iconFrontVertical;
|
|
|
|
Icon_SPU railTile_iconTurn;
|
|
Icon_SPU railTile_iconTurnGolden;
|
|
|
|
Icon_SPU detectorRailTile_icons[2];
|
|
|
|
Icon_SPU tntTile_iconBottom;
|
|
Icon_SPU tntTile_iconTop;
|
|
|
|
Icon_SPU workBench_iconTop;
|
|
Icon_SPU workBench_iconFront;
|
|
|
|
Icon_SPU cactusTile_iconTop;
|
|
Icon_SPU cactusTile_iconBottom;
|
|
|
|
Icon_SPU recordPlayer_iconTop;
|
|
|
|
Icon_SPU pumpkinTile_iconTop;
|
|
Icon_SPU pumpkinTile_iconFace;
|
|
Icon_SPU pumpkinTile_iconFaceLit;
|
|
|
|
Icon_SPU cakeTile_iconTop;
|
|
Icon_SPU cakeTile_iconBottom;
|
|
Icon_SPU cakeTile_iconInner;
|
|
|
|
Icon_SPU smoothStoneBrick_icons[4];
|
|
|
|
Icon_SPU hugeMushroom_icons[2];
|
|
Icon_SPU hugeMushroom_iconStem;
|
|
Icon_SPU hugeMushroom_iconInside;
|
|
|
|
Icon_SPU melonTile_iconTop;
|
|
|
|
Icon_SPU stemTile_iconAngled;
|
|
|
|
Icon_SPU mycelTile_iconTop;
|
|
Icon_SPU mycelTile_iconSnowSide;
|
|
|
|
Icon_SPU netherStalk_icons[3];
|
|
|
|
Icon_SPU enchantmentTable_iconTop;
|
|
Icon_SPU enchantmentTable_iconBottom;
|
|
|
|
Icon_SPU brewingStand_iconBase;
|
|
|
|
Icon_SPU redStoneDust_iconCross;
|
|
Icon_SPU redStoneDust_iconLine;
|
|
Icon_SPU redStoneDust_iconCrossOver;
|
|
Icon_SPU redStoneDust_iconLineOver;
|
|
|
|
Icon_SPU clothTile_icons[16];
|
|
|
|
Icon_SPU stoneSlab_iconSide;
|
|
|
|
Icon_SPU carrot_icons[4];
|
|
Icon_SPU potato_icons[4];
|
|
Icon_SPU anvil_icons[3];
|
|
|
|
|
|
Icon_SPU quartzBlock_icons[5];
|
|
Icon_SPU quartzBlock_iconChiseledTop;
|
|
Icon_SPU quartzBlock_iconLinesTop;
|
|
Icon_SPU quartzBlock_iconTop;
|
|
Icon_SPU quartzBlock_iconBottom;
|
|
|
|
|
|
int anvilPart; // normally part of the AnvilTile class
|
|
|
|
unsigned int stemTile_minColour;
|
|
unsigned int stemTile_maxColour;
|
|
unsigned int waterLily_colour;
|
|
|
|
unsigned int foliageColor_evergreenColor;
|
|
unsigned int foliageColor_birchColor;
|
|
|
|
|
|
protected:
|
|
// float destroySpeed;
|
|
// float explosionResistance;
|
|
// bool isInventoryItem;
|
|
// bool collectStatistics;
|
|
// int m_iMaterial;
|
|
// int m_iBaseItemType;
|
|
|
|
|
|
public:
|
|
// const SoundType *soundType;
|
|
//
|
|
// float gravity;
|
|
// Material *material;
|
|
// float friction;
|
|
|
|
private:
|
|
// unsigned int descriptionId;
|
|
// unsigned int useDescriptionId; // 4J Added
|
|
//
|
|
// wstring m_textureName;
|
|
|
|
protected:
|
|
// Icon *icon;
|
|
|
|
public:
|
|
|
|
int getRenderShape();
|
|
|
|
void setShape(float x0, float y0, float z0, float x1, float y1, float z1);
|
|
float getBrightness(ChunkRebuildData *level, int x, int y, int z);
|
|
int getLightColor(ChunkRebuildData *level, int x, int y, int z); // 4J - brought forward from 1.8.2
|
|
bool shouldRenderFace(ChunkRebuildData *level, int x, int y, int z, int face);
|
|
|
|
public:
|
|
Icon_SPU *getTexture(ChunkRebuildData *level, int x, int y, int z, int face);
|
|
Icon_SPU *getTexture(int face, int data);
|
|
Icon_SPU *getTexture(int face);
|
|
public:
|
|
void updateShape(ChunkRebuildData *level, int x, int y, int z, int forceData = -1, TileEntity* forceEntity = NULL); // 4J added forceData, forceEntity param
|
|
double getShapeX0();
|
|
double getShapeX1();
|
|
double getShapeY0();
|
|
double getShapeY1();
|
|
double getShapeZ0();
|
|
double getShapeZ1();
|
|
// int getColor(int auxData);
|
|
int getColor(ChunkRebuildData *level, int x, int y, int z);
|
|
float getShadeBrightness(ChunkRebuildData *level, int x, int y, int z); // 4J - brought forward from 1.8.2
|
|
bool hasMaterialLiquid() { return false; } // material->isLiquid()
|
|
};
|
|
|
|
class Tile_SPU
|
|
{
|
|
public:
|
|
static const int SHAPE_INVISIBLE = -1;
|
|
static const int SHAPE_BLOCK = 0;
|
|
static const int SHAPE_CROSS_TEXTURE = 1;
|
|
static const int SHAPE_TORCH = 2;
|
|
static const int SHAPE_FIRE = 3;
|
|
static const int SHAPE_WATER = 4;
|
|
static const int SHAPE_RED_DUST = 5;
|
|
static const int SHAPE_ROWS = 6;
|
|
static const int SHAPE_DOOR = 7;
|
|
static const int SHAPE_LADDER = 8;
|
|
static const int SHAPE_RAIL = 9;
|
|
static const int SHAPE_STAIRS = 10;
|
|
static const int SHAPE_FENCE = 11;
|
|
static const int SHAPE_LEVER = 12;
|
|
static const int SHAPE_CACTUS = 13;
|
|
static const int SHAPE_BED = 14;
|
|
static const int SHAPE_DIODE = 15;
|
|
static const int SHAPE_PISTON_BASE = 16;
|
|
static const int SHAPE_PISTON_EXTENSION = 17;
|
|
static const int SHAPE_IRON_FENCE = 18;
|
|
static const int SHAPE_STEM = 19;
|
|
static const int SHAPE_VINE = 20;
|
|
static const int SHAPE_FENCE_GATE = 21;
|
|
static const int SHAPE_ENTITYTILE_ANIMATED = 22;
|
|
static const int SHAPE_LILYPAD = 23;
|
|
static const int SHAPE_CAULDRON = 24;
|
|
static const int SHAPE_BREWING_STAND = 25;
|
|
static const int SHAPE_PORTAL_FRAME = 26;
|
|
static const int SHAPE_EGG = 27;
|
|
static const int SHAPE_COCOA = 28;
|
|
static const int SHAPE_TRIPWIRE_SOURCE = 29;
|
|
static const int SHAPE_TRIPWIRE = 30;
|
|
static const int SHAPE_TREE = 31;
|
|
static const int SHAPE_WALL = 32;
|
|
static const int SHAPE_FLOWER_POT = 33;
|
|
static const int SHAPE_BEACON = 34;
|
|
static const int SHAPE_ANVIL = 35;
|
|
static const int SHAPE_QUARTZ = 39;
|
|
|
|
// 4J - this array of simple constants made so the compiler can optimise references to Ids that were previous of the form Tile_SPU::<whatever>->id, and are now simply Tile_SPU::whatever_Id
|
|
static const int rock_Id = 1;
|
|
static const int grass_Id = 2;
|
|
static const int dirt_Id = 3;
|
|
static const int stoneBrick_Id = 4;
|
|
static const int wood_Id = 5;
|
|
static const int sapling_Id = 6;
|
|
static const int unbreakable_Id = 7;
|
|
static const int water_Id = 8;
|
|
static const int calmWater_Id = 9;
|
|
static const int lava_Id = 10;
|
|
static const int calmLava_Id = 11;
|
|
static const int sand_Id = 12;
|
|
static const int gravel_Id = 13;
|
|
static const int goldOre_Id = 14;
|
|
static const int ironOre_Id = 15;
|
|
static const int coalOre_Id = 16;
|
|
static const int treeTrunk_Id = 17;
|
|
static const int leaves_Id = 18;
|
|
static const int sponge_Id = 19;
|
|
static const int glass_Id = 20;
|
|
static const int lapisOre_Id = 21;
|
|
static const int lapisBlock_Id = 22;
|
|
static const int dispenser_Id = 23;
|
|
static const int sandStone_Id = 24;
|
|
static const int musicBlock_Id = 25;
|
|
static const int bed_Id = 26;
|
|
static const int goldenRail_Id = 27;
|
|
static const int detectorRail_Id = 28;
|
|
static const int pistonStickyBase_Id = 29;
|
|
static const int web_Id = 30;
|
|
static const int tallgrass_Id = 31;
|
|
static const int deadBush_Id = 32;
|
|
static const int pistonBase_Id = 33;
|
|
static const int pistonExtensionPiece_Id = 34;
|
|
static const int cloth_Id = 35;
|
|
static const int pistonMovingPiece_Id = 36;
|
|
static const int flower_Id = 37;
|
|
static const int rose_Id = 38;
|
|
static const int mushroom1_Id = 39;
|
|
static const int mushroom2_Id = 40;
|
|
static const int goldBlock_Id = 41;
|
|
static const int ironBlock_Id = 42;
|
|
static const int stoneSlab_Id = 43;
|
|
static const int stoneSlabHalf_Id = 44;
|
|
static const int redBrick_Id = 45;
|
|
static const int tnt_Id = 46;
|
|
static const int bookshelf_Id = 47;
|
|
static const int mossStone_Id = 48;
|
|
static const int obsidian_Id = 49;
|
|
static const int torch_Id = 50;
|
|
static const int fire_Id = 51;
|
|
static const int mobSpawner_Id = 52;
|
|
static const int stairs_wood_Id = 53;
|
|
static const int chest_Id = 54;
|
|
static const int redStoneDust_Id = 55;
|
|
static const int diamondOre_Id = 56;
|
|
static const int diamondBlock_Id = 57;
|
|
static const int workBench_Id = 58;
|
|
static const int crops_Id = 59;
|
|
static const int farmland_Id = 60;
|
|
static const int furnace_Id = 61;
|
|
static const int furnace_lit_Id = 62;
|
|
static const int sign_Id = 63;
|
|
static const int door_wood_Id = 64;
|
|
static const int ladder_Id = 65;
|
|
static const int rail_Id = 66;
|
|
static const int stairs_stone_Id = 67;
|
|
static const int wallSign_Id = 68;
|
|
static const int lever_Id = 69;
|
|
static const int pressurePlate_stone_Id = 70;
|
|
static const int door_iron_Id = 71;
|
|
static const int pressurePlate_wood_Id = 72;
|
|
static const int redStoneOre_Id = 73;
|
|
static const int redStoneOre_lit_Id = 74;
|
|
static const int notGate_off_Id = 75;
|
|
static const int notGate_on_Id = 76;
|
|
static const int button_stone_Id = 77;
|
|
static const int topSnow_Id = 78;
|
|
static const int ice_Id = 79;
|
|
static const int snow_Id = 80;
|
|
static const int cactus_Id = 81;
|
|
static const int clay_Id = 82;
|
|
static const int reeds_Id = 83;
|
|
static const int recordPlayer_Id = 84;
|
|
static const int fence_Id = 85;
|
|
static const int pumpkin_Id = 86;
|
|
static const int hellRock_Id = 87;
|
|
static const int hellSand_Id = 88;
|
|
static const int lightGem_Id = 89;
|
|
static const int portalTile_Id = 90;
|
|
static const int litPumpkin_Id = 91;
|
|
static const int cake_Id = 92;
|
|
static const int diode_off_Id = 93;
|
|
static const int diode_on_Id = 94;
|
|
static const int aprilFoolsJoke_Id = 95;
|
|
static const int trapdoor_Id = 96;
|
|
|
|
static const int monsterStoneEgg_Id = 97;
|
|
static const int stoneBrickSmooth_Id = 98;
|
|
static const int hugeMushroom1_Id = 99;
|
|
static const int hugeMushroom2_Id = 100;
|
|
static const int ironFence_Id = 101;
|
|
static const int thinGlass_Id = 102;
|
|
static const int melon_Id = 103;
|
|
static const int pumpkinStem_Id = 104;
|
|
static const int melonStem_Id = 105;
|
|
static const int vine_Id = 106;
|
|
static const int fenceGate_Id = 107;
|
|
static const int stairs_bricks_Id = 108;
|
|
static const int stairs_stoneBrickSmooth_Id = 109;
|
|
|
|
static const int mycel_Id = 110;
|
|
static const int waterLily_Id = 111;
|
|
static const int netherBrick_Id = 112;
|
|
static const int netherFence_Id = 113;
|
|
static const int stairs_netherBricks_Id = 114;
|
|
static const int netherStalk_Id = 115;
|
|
static const int enchantTable_Id = 116;
|
|
static const int brewingStand_Id = 117;
|
|
static const int cauldron_Id = 118;
|
|
static const int endPortalTile_Id = 119;
|
|
static const int endPortalFrameTile_Id = 120;
|
|
static const int whiteStone_Id = 121;
|
|
static const int dragonEgg_Id = 122;
|
|
static const int redstoneLight_Id = 123;
|
|
static const int redstoneLight_lit_Id = 124;
|
|
|
|
|
|
static const int woodSlab_Id = 125;
|
|
static const int woodSlabHalf_Id = 126;
|
|
static const int cocoa_Id = 127;
|
|
static const int stairs_sandstone_Id = 128;
|
|
static const int stairs_sprucewood_Id = 134;
|
|
static const int stairs_birchwood_Id = 135;
|
|
static const int stairs_junglewood_Id = 136;
|
|
static const int emeraldOre_Id = 129;
|
|
static const int enderChest_Id = 130;
|
|
static const int tripWireSource_Id = 131;
|
|
static const int tripWire_Id = 132;
|
|
static const int emeraldBlock_Id = 133;
|
|
|
|
static const int cobbleWall_Id = 139;
|
|
static const int flowerPot_Id = 140;
|
|
static const int carrots_Id = 141;
|
|
static const int potatoes_Id = 142;
|
|
static const int anvil_Id = 145;
|
|
static const int button_wood_Id = 143;
|
|
static const int skull_Id = 144;
|
|
static const int netherQuartz_Id = 153;
|
|
static const int quartzBlock_Id = 155;
|
|
static const int stairs_quartz_Id = 156;
|
|
static const int woolCarpet_Id = 171;
|
|
|
|
static Tile_SPU m_tiles[256];
|
|
|
|
Tile_SPU() { id = -1;}
|
|
Tile_SPU(int tileID) { id = tileID; }
|
|
virtual ~Tile_SPU() {}
|
|
|
|
double getShapeX0() { return ms_pTileData->xx0[id]; }
|
|
double getShapeX1() { return ms_pTileData->xx1[id]; }
|
|
double getShapeY0() { return ms_pTileData->yy0[id]; }
|
|
double getShapeY1() { return ms_pTileData->yy1[id]; }
|
|
double getShapeZ0() { return ms_pTileData->zz0[id]; }
|
|
double getShapeZ1() { return ms_pTileData->zz1[id]; }
|
|
Material_SPU* getMaterial();
|
|
|
|
virtual void updateShape(ChunkRebuildData *level, int x, int y, int z, int forceData = -1, TileEntity* forceEntity = NULL); // 4J added forceData, forceEntity param
|
|
virtual void updateDefaultShape();
|
|
virtual void setShape(float x0, float y0, float z0, float x1, float y1, float z1);
|
|
virtual float getBrightness(ChunkRebuildData *level, int x, int y, int z);
|
|
virtual int getLightColor(ChunkRebuildData *level, int x, int y, int z); // 4J - brought forward from 1.8.2
|
|
virtual bool shouldRenderFace(ChunkRebuildData *level, int x, int y, int z, int face);
|
|
virtual int getRenderShape();
|
|
virtual int getColor(ChunkRebuildData *level, int x, int y, int z);
|
|
virtual float getShadeBrightness(ChunkRebuildData *level, int x, int y, int z); // 4J - brought forward from 1.8.2
|
|
virtual bool isSolidRender(bool isServerLevel = false);
|
|
virtual bool isSolidFace(ChunkRebuildData *level, int x, int y, int z, int face);
|
|
virtual int getRenderLayer();
|
|
virtual Icon_SPU *getTexture(ChunkRebuildData *level, int x, int y, int z, int face);
|
|
virtual Icon_SPU *getTexture(int face, int data);
|
|
virtual Icon_SPU *getTexture(int face);
|
|
|
|
bool isSignalSource() { return ms_pTileData->signalSource[id]; }
|
|
bool isCubeShaped() { return ms_pTileData->cubeShaped[id]; }
|
|
|
|
Icon_SPU* icon() { return &ms_pTileData->iconData[id]; }
|
|
|
|
|
|
int id;
|
|
static TileData_SPU* ms_pTileData;
|
|
|
|
static void initTilePointers();
|
|
static Tile_SPU* createFromID(int tileID);
|
|
|
|
};
|
|
|
|
class TileRef_SPU
|
|
{
|
|
// because of the way this ref stuff works, we need all the tile classes to be of the same size,
|
|
// so make sure no data is added to child classes.
|
|
Tile_SPU* m_pTile;
|
|
public:
|
|
TileRef_SPU(int tileID) { m_pTile = Tile_SPU::createFromID(tileID); }
|
|
virtual ~TileRef_SPU() { }
|
|
Tile_SPU* operator->() const { return m_pTile; }
|
|
Tile_SPU* getPtr() { return m_pTile; }
|
|
};
|
|
|
|
//class stoneBrick : public Tile {};
|