Compare commits
	
		
			4 Commits
		
	
	
		
			HUD
			...
			MeshOptimi
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
|  | 75ca13ccfc | ||
|  | 9aa426b804 | ||
|  | cf75843117 | ||
|  | 0c79d55a84 | 
| @@ -110,28 +110,49 @@ void Chunk::SetBlock(int x, int y, int z, BlockType type, World* world) { | |||||||
|  |  | ||||||
| BlockType Chunk::GetBlock(int x, int y, int z) { return m_blocks.Get(x, y, z); } | BlockType Chunk::GetBlock(int x, int y, int z) { return m_blocks.Get(x, y, z); } | ||||||
|  |  | ||||||
| void Chunk::CheckNeighbors(unsigned int x, unsigned int z, World* world) { | NEIGHBOR_CHUNK_POSITION Chunk::CheckNeighbors(unsigned int x, unsigned int z, World* world) { | ||||||
|     unsigned int cx, cy; |     unsigned int cx, cy; | ||||||
|  |  | ||||||
|     world->GetScope(cx, cy); |     world->GetScope(cx, cy); | ||||||
|  |  | ||||||
|     if (x == 0 && m_posX - cx >= 0 && |     if (x == 0 && m_posX - cx >= 0 && world->ChunkAt((m_posX - cx - 1) * CHUNK_SIZE_X, 1, (m_posY - cy) * CHUNK_SIZE_Z)) { | ||||||
|         world->ChunkAt((m_posX - cx - 1) * CHUNK_SIZE_X, 1, (m_posY - cy) * CHUNK_SIZE_Z)) |  | ||||||
|         world->ChunkAt((m_posX - cx - 1) * CHUNK_SIZE_X, 1, (m_posY - cy) * CHUNK_SIZE_Z)->MakeDirty(); |         world->ChunkAt((m_posX - cx - 1) * CHUNK_SIZE_X, 1, (m_posY - cy) * CHUNK_SIZE_Z)->MakeDirty(); | ||||||
|     else if (x == CHUNK_SIZE_X - 1 && m_posX - cx < WORLD_SIZE_X &&  |         return X_MINUS; | ||||||
|         world->ChunkAt((m_posX - cx + 1) * CHUNK_SIZE_X, 1, (m_posY - cy) * CHUNK_SIZE_Z)) |     } | ||||||
|  |     else if (x == CHUNK_SIZE_X - 1 && m_posX - cx < WORLD_SIZE_X && world->ChunkAt((m_posX - cx + 1) * CHUNK_SIZE_X, 1, (m_posY - cy) * CHUNK_SIZE_Z)) { | ||||||
|         world->ChunkAt((m_posX - cx + 1) * CHUNK_SIZE_X, 1, (m_posY - cy) * CHUNK_SIZE_Z)->MakeDirty(); |         world->ChunkAt((m_posX - cx + 1) * CHUNK_SIZE_X, 1, (m_posY - cy) * CHUNK_SIZE_Z)->MakeDirty(); | ||||||
|  |         return X_PLUS; | ||||||
|  |     } | ||||||
|  |  | ||||||
|     if (z == 0 && m_posY - cy >= 0 &&  |     if (z == 0 && m_posY - cy >= 0 && world->ChunkAt((m_posX - cx) * CHUNK_SIZE_X, 1, (m_posY - cy - 1) * CHUNK_SIZE_Z)) { | ||||||
|         world->ChunkAt((m_posX - cx) * CHUNK_SIZE_X, 1, (m_posY - cy - 1) * CHUNK_SIZE_Z)) |  | ||||||
|         world->ChunkAt((m_posX - cx) * CHUNK_SIZE_X, 1, (m_posY - cy - 1) * CHUNK_SIZE_Z)->MakeDirty(); |         world->ChunkAt((m_posX - cx) * CHUNK_SIZE_X, 1, (m_posY - cy - 1) * CHUNK_SIZE_Z)->MakeDirty(); | ||||||
|     else if (z == CHUNK_SIZE_X - 1 && m_posY - cy < WORLD_SIZE_Y && |         return Z_MINUS; | ||||||
|         world->ChunkAt((m_posX - cx) * CHUNK_SIZE_X, 1, (m_posY - cy + 1) * CHUNK_SIZE_Z)) |     } | ||||||
|  |     else if (z == CHUNK_SIZE_X - 1 && m_posY - cy < WORLD_SIZE_Y && world->ChunkAt((m_posX - cx) * CHUNK_SIZE_X, 1, (m_posY - cy + 1) * CHUNK_SIZE_Z)) { | ||||||
|         world->ChunkAt((m_posX - cx) * CHUNK_SIZE_X, 1, (m_posY - cy + 1) * CHUNK_SIZE_Z)->MakeDirty(); |         world->ChunkAt((m_posX - cx) * CHUNK_SIZE_X, 1, (m_posY - cy + 1) * CHUNK_SIZE_Z)->MakeDirty(); | ||||||
|  |         return Z_PLUS; | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     return NONE; | ||||||
| } | } | ||||||
|  |  | ||||||
| void Chunk::GetPosition(unsigned int& x, unsigned int& y) const { x = m_posX; y = m_posY; } | void Chunk::GetPosition(unsigned int& x, unsigned int& y) const { x = m_posX; y = m_posY; } | ||||||
|  |  | ||||||
|  | void Chunk::AddAllVertices(VertexBuffer::VertexData* vd, int& count, BlockType bt, int cx, int cy, int x, int y, int z, float u, float v, float s, World* world) { | ||||||
|  |     if (world->BlockAt(cx + 1, y, cy) == BTYPE_AIR) { | ||||||
|  |         AddXPlusVertices(vd, count, bt, x, y, z, u, v, s); | ||||||
|  |     } | ||||||
|  |     if (world->BlockAt(cx - 1, y, cy) == BTYPE_AIR) { | ||||||
|  |         AddXMinusVertices(vd, count, bt, x, y, z, u, v, s); | ||||||
|  |     } | ||||||
|  |     if (world->BlockAt(cx, y, cy + 1) == BTYPE_AIR) { | ||||||
|  |         AddZPlusVertices(vd, count, bt, x, y, z, u, v, s); | ||||||
|  |     } | ||||||
|  |     if (world->BlockAt(cx, y, cy - 1) == BTYPE_AIR) { | ||||||
|  |         AddZMinusVertices(vd, count, bt, x, y, z, u, v, s); | ||||||
|  |     } | ||||||
|  | } | ||||||
|  |  | ||||||
| void Chunk::FlushMeshToVBO() { | void Chunk::FlushMeshToVBO() { | ||||||
|     m_vertexBuffer.SetMeshData(m_vd, m_vcount); |     m_vertexBuffer.SetMeshData(m_vd, m_vcount); | ||||||
|     m_vcount = 0; |     m_vcount = 0; | ||||||
| @@ -181,47 +202,66 @@ void Chunk::AddBlockToMesh(VertexBuffer::VertexData* vd, int& count, BlockType b | |||||||
|  |  | ||||||
|     int cx = x + (m_posX - cex) * CHUNK_SIZE_X, cy = z + (m_posY - cey) * CHUNK_SIZE_Z; |     int cx = x + (m_posX - cex) * CHUNK_SIZE_X, cy = z + (m_posY - cey) * CHUNK_SIZE_Z; | ||||||
|  |  | ||||||
|     if (y == CHUNK_SIZE_Y - 1 || GetBlock(x, y + 1, z) == BTYPE_AIR) {                      //  y |     bool isOnBorder = (x == 0 || x == CHUNK_SIZE_X - 1 || | ||||||
|  |                        z == 0 || z == CHUNK_SIZE_Z - 1 || | ||||||
|  |                        y == 0 || y == CHUNK_SIZE_Y - 1); | ||||||
|  |  | ||||||
|  |     NEIGHBOR_CHUNK_POSITION ncp = CheckNeighbors(x, z, world); | ||||||
|  |  | ||||||
|  |     if (y == CHUNK_SIZE_Y - 1 || GetBlock(x, y + 1, z) == BTYPE_AIR) {                                              // Y+ | ||||||
|         vd[count++] = VertexBuffer::VertexData(x, y + 1.f, z, .8f, .8f, .8f, u, v); |         vd[count++] = VertexBuffer::VertexData(x, y + 1.f, z, .8f, .8f, .8f, u, v); | ||||||
|         vd[count++] = VertexBuffer::VertexData(x, y + 1.f, z + 1.f, .8f, .8f, .8f, u, v + s); |         vd[count++] = VertexBuffer::VertexData(x, y + 1.f, z + 1.f, .8f, .8f, .8f, u, v + s); | ||||||
|         vd[count++] = VertexBuffer::VertexData(x + 1.f, y + 1.f, z + 1.f, .8f, .8f, .8f, u + s, v + s); |         vd[count++] = VertexBuffer::VertexData(x + 1.f, y + 1.f, z + 1.f, .8f, .8f, .8f, u + s, v + s); | ||||||
|         vd[count++] = VertexBuffer::VertexData(x + 1.f, y + 1.f, z, .8f, .8f, .8f, u + s, v); |         vd[count++] = VertexBuffer::VertexData(x + 1.f, y + 1.f, z, .8f, .8f, .8f, u + s, v); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     if (y == 0 || GetBlock(x, y - 1, z) == BTYPE_AIR) {                                     // -y |     if (y == 0 || GetBlock(x, y - 1, z) == BTYPE_AIR) {                                                             // Y- | ||||||
|         vd[count++] = VertexBuffer::VertexData(x, y, z + 1.f, .2f, .2f, .2f, u, v); |         vd[count++] = VertexBuffer::VertexData(x, y, z + 1.f, .2f, .2f, .2f, u, v); | ||||||
|         vd[count++] = VertexBuffer::VertexData(x, y, z, .2f, .2f, .2f, u, v + s); |         vd[count++] = VertexBuffer::VertexData(x, y, z, .2f, .2f, .2f, u, v + s); | ||||||
|         vd[count++] = VertexBuffer::VertexData(x + 1.f, y, z, .2f, .2f, .2f, u + s, v + s); |         vd[count++] = VertexBuffer::VertexData(x + 1.f, y, z, .2f, .2f, .2f, u + s, v + s); | ||||||
|         vd[count++] = VertexBuffer::VertexData(x + 1.f, y, z + 1.f, .2f, .2f, .2f, u + s, v); |         vd[count++] = VertexBuffer::VertexData(x + 1.f, y, z + 1.f, .2f, .2f, .2f, u + s, v); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     if (world->BlockAt(cx + 1, y, cy) == BTYPE_AIR) {                      //  x |     if (!isOnBorder || (x == CHUNK_SIZE_X - 1 && ncp == X_PLUS) || (x == CHUNK_SIZE_X - 1 && ncp == NONE)) {        // X+ | ||||||
|  |         AddAllVertices(vd, count, bt, cx, cy, x, y, z, u, v, s, world); | ||||||
|  |     } | ||||||
|  |     else if (!isOnBorder || (x == 0 && ncp == X_MINUS) || (x == 0 && ncp == NONE)) {							    // X- | ||||||
|  |         AddAllVertices(vd, count, bt, cx, cy, x, y, z, u, v, s, world); | ||||||
|  | 	} | ||||||
|  |     else if (!isOnBorder || (z == CHUNK_SIZE_Z - 1 && ncp == Z_PLUS) || (z == CHUNK_SIZE_Z - 1 && ncp == NONE)) {	// Z+ | ||||||
|  |         AddAllVertices(vd, count, bt, cx, cy, x, y, z, u, v, s, world); | ||||||
|  | 	} | ||||||
|  |     else if (!isOnBorder || (z == 0 && ncp == Z_MINUS) || (z == 0 && ncp == NONE)) {								// Z- | ||||||
|  |         AddAllVertices(vd, count, bt, cx, cy, x, y, z, u, v, s, world); | ||||||
|  |     } | ||||||
|  | } | ||||||
|  |  | ||||||
|  | void Chunk::AddXPlusVertices(VertexBuffer::VertexData* vd, int& count, BlockType bt, int x, int y, int z, float u, float v, float s) { | ||||||
|     vd[count++] = VertexBuffer::VertexData(x + 1.f, y, z, .9f, .9f, .9f, u, v); |     vd[count++] = VertexBuffer::VertexData(x + 1.f, y, z, .9f, .9f, .9f, u, v); | ||||||
|     vd[count++] = VertexBuffer::VertexData(x + 1.f, y + 1.f, z, .9f, .9f, .9f, u, v + s); |     vd[count++] = VertexBuffer::VertexData(x + 1.f, y + 1.f, z, .9f, .9f, .9f, u, v + s); | ||||||
|     vd[count++] = VertexBuffer::VertexData(x + 1.f, y + 1.f, z + 1.f, .9f, .9f, .9f, u + s, v + s); |     vd[count++] = VertexBuffer::VertexData(x + 1.f, y + 1.f, z + 1.f, .9f, .9f, .9f, u + s, v + s); | ||||||
|     vd[count++] = VertexBuffer::VertexData(x + 1.f, y, z + 1.f, .9f, .9f, .9f, u + s, v); |     vd[count++] = VertexBuffer::VertexData(x + 1.f, y, z + 1.f, .9f, .9f, .9f, u + s, v); | ||||||
|     } | } | ||||||
|  |  | ||||||
|     if (world->BlockAt(cx - 1, y, cy) == BTYPE_AIR) {                                     // -x | void Chunk::AddXMinusVertices(VertexBuffer::VertexData* vd, int& count, BlockType bt, int x, int y, int z, float u, float v, float s) { | ||||||
|     vd[count++] = VertexBuffer::VertexData(x, y + 1.f, z + 1.f, .5f, .5f, .5f, u, v + s); |     vd[count++] = VertexBuffer::VertexData(x, y + 1.f, z + 1.f, .5f, .5f, .5f, u, v + s); | ||||||
|     vd[count++] = VertexBuffer::VertexData(x, y + 1.f, z, .5f, .5f, .5f, u + s, v + s); |     vd[count++] = VertexBuffer::VertexData(x, y + 1.f, z, .5f, .5f, .5f, u + s, v + s); | ||||||
|     vd[count++] = VertexBuffer::VertexData(x, y, z, .5f, .5f, .5f, u + s, v); |     vd[count++] = VertexBuffer::VertexData(x, y, z, .5f, .5f, .5f, u + s, v); | ||||||
|     vd[count++] = VertexBuffer::VertexData(x, y, z + 1.f, .5f, .5f, .5f, u, v); |     vd[count++] = VertexBuffer::VertexData(x, y, z + 1.f, .5f, .5f, .5f, u, v); | ||||||
|     } | } | ||||||
|  |  | ||||||
|     if (world->BlockAt(cx, y, cy + 1) == BTYPE_AIR) {                      //  z | void Chunk::AddZPlusVertices(VertexBuffer::VertexData* vd, int& count, BlockType bt, int x, int y, int z, float u, float v, float s) { | ||||||
|     vd[count++] = VertexBuffer::VertexData(x, y, z + 1.f, .4f, .4f, .4f, u, v); |     vd[count++] = VertexBuffer::VertexData(x, y, z + 1.f, .4f, .4f, .4f, u, v); | ||||||
|     vd[count++] = VertexBuffer::VertexData(x + 1.f, y, z + 1.f, .4f, .4f, .4f, u + s, v); |     vd[count++] = VertexBuffer::VertexData(x + 1.f, y, z + 1.f, .4f, .4f, .4f, u + s, v); | ||||||
|     vd[count++] = VertexBuffer::VertexData(x + 1.f, y + 1.f, z + 1.f, .4f, .4f, .4f, u + s, v + s); |     vd[count++] = VertexBuffer::VertexData(x + 1.f, y + 1.f, z + 1.f, .4f, .4f, .4f, u + s, v + s); | ||||||
|     vd[count++] = VertexBuffer::VertexData(x, y + 1.f, z + 1.f, .4f, .4f, .4f, u, v + s); |     vd[count++] = VertexBuffer::VertexData(x, y + 1.f, z + 1.f, .4f, .4f, .4f, u, v + s); | ||||||
|     } | } | ||||||
|  |  | ||||||
|     if (world->BlockAt(cx, y, cy - 1) == BTYPE_AIR) {                                     // -z | void Chunk::AddZMinusVertices(VertexBuffer::VertexData* vd, int& count, BlockType bt, int x, int y, int z, float u, float v, float s) { | ||||||
|     vd[count++] = VertexBuffer::VertexData(x, y + 1.f, z, 1.f, 1.f, 1.f, u, v + s); |     vd[count++] = VertexBuffer::VertexData(x, y + 1.f, z, 1.f, 1.f, 1.f, u, v + s); | ||||||
|     vd[count++] = VertexBuffer::VertexData(x + 1.f, y + 1.f, z, 1.f, 1.f, 1.f, u + s, v + s); |     vd[count++] = VertexBuffer::VertexData(x + 1.f, y + 1.f, z, 1.f, 1.f, 1.f, u + s, v + s); | ||||||
|         vd[count++] = VertexBuffer::VertexData(x + 1.f, y, z , 1.f, 1.f, 1.f, u + s, v); |     vd[count++] = VertexBuffer::VertexData(x + 1.f, y, z, 1.f, 1.f, 1.f, u + s, v); | ||||||
|         vd[count++] = VertexBuffer::VertexData(x, y, z , 1.f, 1.f, 1.f, u, v); |     vd[count++] = VertexBuffer::VertexData(x, y, z, 1.f, 1.f, 1.f, u, v); | ||||||
|     } |  | ||||||
| } | } | ||||||
|  |  | ||||||
| void Chunk::Render() const { m_vertexBuffer.Render(); } | void Chunk::Render() const { m_vertexBuffer.Render(); } | ||||||
|   | |||||||
| @@ -31,9 +31,14 @@ class Chunk { | |||||||
|         void RemoveBlock(int x, int y, int z, World* world); |         void RemoveBlock(int x, int y, int z, World* world); | ||||||
|         void SetBlock(int x, int y, int z, BlockType type, World* world); |         void SetBlock(int x, int y, int z, BlockType type, World* world); | ||||||
|         BlockType GetBlock(int x, int y, int z); |         BlockType GetBlock(int x, int y, int z); | ||||||
|         void CheckNeighbors(unsigned int x, unsigned int z, World* world); |         NEIGHBOR_CHUNK_POSITION CheckNeighbors(unsigned int x, unsigned int z, World* world); | ||||||
|         void GetPosition(unsigned int& x, unsigned int& y) const; |         void GetPosition(unsigned int& x, unsigned int& y) const; | ||||||
|  |  | ||||||
|  |         void AddAllVertices(VertexBuffer::VertexData* vd, int& count, BlockType bt,int cx, int cy, int x, int y, int z, float u, float v, float s, World* world); | ||||||
|  |         void AddXPlusVertices(VertexBuffer::VertexData* vd, int& count, BlockType bt, int x, int y, int z, float u, float v, float s); | ||||||
|  |         void AddXMinusVertices(VertexBuffer::VertexData* vd, int& count, BlockType bt, int x, int y, int z, float u, float v, float s); | ||||||
|  |         void AddZPlusVertices(VertexBuffer::VertexData* vd, int& count, BlockType bt, int x, int y, int z, float u, float v, float s); | ||||||
|  |         void AddZMinusVertices(VertexBuffer::VertexData* vd, int& count, BlockType bt, int x, int y, int z, float u, float v, float s); | ||||||
|  |  | ||||||
|         void Update(BlockInfo* blockinfo[BTYPE_LAST], World* world); |         void Update(BlockInfo* blockinfo[BTYPE_LAST], World* world); | ||||||
|         void FlushMeshToVBO(); |         void FlushMeshToVBO(); | ||||||
|   | |||||||
| @@ -19,8 +19,8 @@ | |||||||
| #define SEED 12345 | #define SEED 12345 | ||||||
|  |  | ||||||
| #ifdef _DEBUG | #ifdef _DEBUG | ||||||
| #define WORLD_SIZE_X 64 | #define WORLD_SIZE_X 2 | ||||||
| #define WORLD_SIZE_Y 64 | #define WORLD_SIZE_Y 2 | ||||||
|  |  | ||||||
| #define FRAMES_RENDER_CHUNKS 4 | #define FRAMES_RENDER_CHUNKS 4 | ||||||
| #define FRAMES_UPDATE_CHUNKS 4 | #define FRAMES_UPDATE_CHUNKS 4 | ||||||
| @@ -39,8 +39,8 @@ | |||||||
| #endif | #endif | ||||||
|  |  | ||||||
| #ifdef NDEBUG | #ifdef NDEBUG | ||||||
| #define WORLD_SIZE_X 16 | #define WORLD_SIZE_X 2 | ||||||
| #define WORLD_SIZE_Y 16 | #define WORLD_SIZE_Y 2 | ||||||
|  |  | ||||||
| #define FRAMES_RENDER_CHUNKS 1 | #define FRAMES_RENDER_CHUNKS 1 | ||||||
| #define FRAMES_UPDATE_CHUNKS 1 | #define FRAMES_UPDATE_CHUNKS 1 | ||||||
| @@ -58,6 +58,7 @@ | |||||||
|  |  | ||||||
| typedef uint8_t BlockType; | typedef uint8_t BlockType; | ||||||
| enum BLOCK_TYPE { BTYPE_AIR, BTYPE_DIRT, BTYPE_GRASS, BTYPE_METAL, BTYPE_ICE, BTYPE_LAST }; | enum BLOCK_TYPE { BTYPE_AIR, BTYPE_DIRT, BTYPE_GRASS, BTYPE_METAL, BTYPE_ICE, BTYPE_LAST }; | ||||||
|  | enum NEIGHBOR_CHUNK_POSITION { NONE, X_MINUS, X_PLUS, Z_MINUS, Z_PLUS }; | ||||||
|  |  | ||||||
| //#define TEXTURE_PATH        "../SQCSim2021/media/textures/" | //#define TEXTURE_PATH        "../SQCSim2021/media/textures/" | ||||||
| //#define SHADER_PATH		    "../SQCSim2021/media/shaders/" | //#define SHADER_PATH		    "../SQCSim2021/media/shaders/" | ||||||
|   | |||||||
| @@ -105,7 +105,14 @@ void Player::ApplyPhysics(Vector3f input, World* world, float elapsedTime, Audio | |||||||
| 	bt1 = world->BlockAt(GetPosition().x + input.x, GetPosition().y, GetPosition().z); | 	bt1 = world->BlockAt(GetPosition().x + input.x, GetPosition().y, GetPosition().z); | ||||||
| 	bt2 = world->BlockAt(GetPosition().x + input.x, GetPosition().y - 0.9f, GetPosition().z); | 	bt2 = world->BlockAt(GetPosition().x + input.x, GetPosition().y - 0.9f, GetPosition().z); | ||||||
| 	bt3 = world->BlockAt(GetPosition().x + input.x, GetPosition().y - 1.7f, GetPosition().z); | 	bt3 = world->BlockAt(GetPosition().x + input.x, GetPosition().y - 1.7f, GetPosition().z); | ||||||
| 	if (bt1 != BTYPE_AIR || bt2 != BTYPE_AIR || bt3 != BTYPE_AIR) { | 	if (bt1 == BTYPE_AIR && bt2 != BTYPE_AIR && bt3 != BTYPE_AIR) { | ||||||
|  | 		if (input.x > 0) | ||||||
|  | 			input.x = m_velocity.x = 0.5f; | ||||||
|  | 		else | ||||||
|  | 			input.x = m_velocity.x = -0.5f; | ||||||
|  | 		m_velocity.y = 0.3; | ||||||
|  | 		m_velocity.z *= .5f; | ||||||
|  | 	} else if (bt1 != BTYPE_AIR || bt2 != BTYPE_AIR || bt3 != BTYPE_AIR) { | ||||||
| 		input.x = m_velocity.x = 0; | 		input.x = m_velocity.x = 0; | ||||||
| 		m_velocity.z *= .5f; | 		m_velocity.z *= .5f; | ||||||
| 	} | 	} | ||||||
| @@ -113,7 +120,14 @@ void Player::ApplyPhysics(Vector3f input, World* world, float elapsedTime, Audio | |||||||
| 	bt1 = world->BlockAt(GetPosition().x, GetPosition().y, GetPosition().z + input.z); | 	bt1 = world->BlockAt(GetPosition().x, GetPosition().y, GetPosition().z + input.z); | ||||||
| 	bt2 = world->BlockAt(GetPosition().x, GetPosition().y - 0.9f, GetPosition().z + input.z); | 	bt2 = world->BlockAt(GetPosition().x, GetPosition().y - 0.9f, GetPosition().z + input.z); | ||||||
| 	bt3 = world->BlockAt(GetPosition().x, GetPosition().y - 1.7f, GetPosition().z + input.z); | 	bt3 = world->BlockAt(GetPosition().x, GetPosition().y - 1.7f, GetPosition().z + input.z); | ||||||
| 	if (bt1 != BTYPE_AIR || bt2 != BTYPE_AIR || bt3 != BTYPE_AIR) { | 	if (bt1 == BTYPE_AIR && bt2 != BTYPE_AIR && bt3 != BTYPE_AIR) { | ||||||
|  | 		if (input.z > 0) | ||||||
|  | 			input.z = m_velocity.z = 0.5f; | ||||||
|  | 		else | ||||||
|  | 			input.z = m_velocity.z = -0.5f; | ||||||
|  | 		m_velocity.y = 0.3; | ||||||
|  | 		m_velocity.x *= .5f; | ||||||
|  | 	} else if (bt1 != BTYPE_AIR || bt2 != BTYPE_AIR || bt3 != BTYPE_AIR) { | ||||||
| 		input.z = m_velocity.z = 0; | 		input.z = m_velocity.z = 0; | ||||||
| 		m_velocity.x *= .5f; | 		m_velocity.x *= .5f; | ||||||
| 	} | 	} | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user