aboutsummaryrefslogtreecommitdiff
path: root/Minecraft.Client/PS3/SPU_Tasks/ChunkUpdate/ChunkRebuildData.h
blob: c733a9285e0680753b990eb0c5e292b466e2fb37 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
#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);

};