130 lines
3.9 KiB
C++
130 lines
3.9 KiB
C++
|
|
#pragma once
|
|
#ifndef SN_TARGET_PS3_SPU
|
|
#include "..\..\..\stdafx.h"
|
|
#include "..\..\..\..\Minecraft.World\Region.h"
|
|
#include "..\..\..\Tesselator.h"
|
|
#include "..\..\..\..\Minecraft.World\LightLayer.h"
|
|
#endif // SN_TARGET_PS3_SPU
|
|
|
|
#include "..\..\..\..\Minecraft.World\LightLayer.h"
|
|
#include "Tile_SPU.h"
|
|
#include "Tesselator_SPU.h"
|
|
|
|
class TileRenderer_SPU;
|
|
|
|
|
|
|
|
class ChunkRebuildData
|
|
{
|
|
public:
|
|
enum tileFlags
|
|
{
|
|
e_flag_NoRender = 0x01,
|
|
e_flag_SPURenderCodeMissing = 0x02
|
|
};
|
|
|
|
enum chunkFlags
|
|
{
|
|
e_flag_EmptyChunk = 0x01,
|
|
e_flag_HasCeiling = 0x02,
|
|
e_flag_TouchedSky = 0x04,
|
|
e_flag_Rendered = 0x08
|
|
};
|
|
|
|
// private:
|
|
static const int sc_size = 20;
|
|
unsigned char m_tileIds[sc_size*sc_size*sc_size]; // byte
|
|
unsigned char m_brightness[sc_size*sc_size*sc_size]; // 2x 4bit
|
|
unsigned char m_data_flags[sc_size*sc_size*sc_size]; // 2x 4bit
|
|
int m_grassColor[sc_size*sc_size];
|
|
int m_foliageColor[sc_size*sc_size];
|
|
int m_waterColor[sc_size*sc_size];
|
|
|
|
TileData_SPU m_tileData;
|
|
Tesselator_SPU m_tesselator;
|
|
|
|
#ifdef SN_TARGET_PS3_SPU
|
|
void* m_pRegion;
|
|
#else
|
|
Region* m_pRegion;
|
|
#endif // SN_TARGET_PS3_SPU
|
|
int m_x0;
|
|
int m_y0;
|
|
int m_z0;
|
|
float m_brightnessRamp[16];
|
|
int m_levelSkyDarken;
|
|
unsigned int m_flags;
|
|
unsigned int m_currentLayer;
|
|
int m_lastHitBlockX;
|
|
int m_lastHitBlockY;
|
|
int m_lastHitBlockZ;
|
|
unsigned int m_pad[3];// padding to 16 byte alignment
|
|
|
|
|
|
int getTileIdx(int x, int y, int z) { return (( x - m_x0 )*sc_size*sc_size) + (( y - m_y0 )*sc_size) + ( z - m_z0 ); }
|
|
int getTileIdx(int x, int z) { return (( x - m_x0 )*sc_size) + ( z - m_z0 ); }
|
|
|
|
void buildTile(int x, int y, int z);
|
|
void disableUnseenTiles();
|
|
void createTileData();
|
|
public:
|
|
|
|
#if 0 //def SN_TARGET_PS3_SPU
|
|
int getTile(int x, int y, int z);
|
|
int getBrightnessSky(int x, int y, int z);
|
|
int getBrightnessBlock(int x, int y, int z);
|
|
int getData(int x, int y, int z);
|
|
int getFlags(int x, int y, int z);
|
|
|
|
void setFlag(int x, int y, int z, int flag);
|
|
int getGrassColor(int x, int z);
|
|
int getFoliageColor(int x, int z);
|
|
|
|
#else
|
|
int getTile( int x, int y, int z ) { return m_tileIds[getTileIdx(x,y,z)]; }
|
|
int getBrightnessSky(int x, int y, int z) { return m_brightness[getTileIdx(x,y,z)] & 0x0f; }
|
|
int getBrightnessBlock(int x, int y, int z) { return m_brightness[getTileIdx(x,y,z)] >> 4; }
|
|
int getData(int x, int y, int z) { return m_data_flags[getTileIdx(x,y,z)] & 0x0f; }
|
|
int getFlags(int x, int y, int z) { return m_data_flags[getTileIdx(x,y,z)] >> 4; }
|
|
|
|
void setFlag(int x, int y, int z, int flag) { m_data_flags[getTileIdx(x,y,z)] |= (flag<<4); }
|
|
int getGrassColor( int x, int z ) { return m_grassColor[getTileIdx(x,z)]; }
|
|
int getFoliageColor( int x, int z ) { return m_foliageColor[getTileIdx(x,z)]; }
|
|
int getWaterColor( int x, int z ) { return m_waterColor[getTileIdx(x,z)]; }
|
|
#endif
|
|
|
|
|
|
#ifndef SN_TARGET_PS3_SPU
|
|
void buildMaterials();
|
|
void buildMaterial(int matSPUIndex, Material* mat);
|
|
int getMaterialID(Tile* pTile);
|
|
void buildForChunk(Region* region, Level* level, int x0, int y0, int z0);
|
|
void copyFromTesselator();
|
|
void storeInTesselator();
|
|
#endif
|
|
bool isEmptyTile(int x, int y, int z);
|
|
bool isEmptyChunk() { return m_flags & e_flag_EmptyChunk;}
|
|
bool isSolidRenderTile(int x, int y, int z);
|
|
bool isSolidBlockingTile(int x, int y, int z);
|
|
float getBrightness(int x, int y, int z, int emitt);
|
|
float getBrightness(int x, int y, int z);
|
|
|
|
// 4J - changes brought forward from 1.8.2
|
|
int getBrightness(LightLayer::variety layer, int x, int y, int z);
|
|
int getBrightnessPropagate(LightLayer::variety layer, int x, int y, int z);
|
|
|
|
int getLightColor(int x, int y, int z, int emitt); // 4J - change brought forward from 1.8.2
|
|
int getRawBrightness(int x, int y, int z);
|
|
int getRawBrightness(int x, int y, int z, bool propagate);
|
|
|
|
int LevelChunk_getRawBrightness(int x, int y, int z, int skyDampen);
|
|
Material_SPU* getMaterial(int x, int y, int z);
|
|
|
|
|
|
void tesselateAllTiles(TileRenderer_SPU* pTileRenderer);
|
|
|
|
};
|
|
|
|
|