Sloth loves Chunk!

This commit is contained in:
Marc-Eric Martel
2021-10-11 11:37:58 -04:00
parent 2347a3f7e4
commit 6f3dd99ab7
27 changed files with 19795 additions and 194 deletions

View File

@@ -1,7 +1,6 @@
#include "engine.h"
#include <algorithm>
#include <cmath>
#include <iostream>
#include "transformation.h"
#include "player.h"
@@ -11,6 +10,13 @@ Engine::~Engine() { }
void Engine::Init()
{
GLenum glewErr = glewInit();
if (glewErr != GLEW_OK)
{
std::cerr << " ERREUR GLEW : " << glewGetErrorString(glewErr) << std::endl;
abort();
}
glClearColor(0.0f, 0.0f, 0.0f, 1.0f);
glEnable(GL_TEXTURE_2D);
@@ -24,9 +30,6 @@ void Engine::Init()
glEnable(GL_LINE_SMOOTH);
glEnable(GL_CULL_FACE);
// Cull!
glCullFace(GL_BACK);
// Light
GLfloat light0Pos[4] = { 0.0f, CHUNK_SIZE_Y, 0.0f, 1.0f };
GLfloat light0Amb[4] = { 0.9f, 0.9f, 0.9f, 1.f };
@@ -50,6 +53,16 @@ void Engine::Init()
// Blend
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
// Init testChunk
for (int x = 0; x < CHUNK_SIZE_X; ++x) {
for (int z = 0; z < CHUNK_SIZE_Z; ++z) {
for (int y = 0; y < 32; ++y) {
if (x % 2 == 0 && y % 2 == 0 && z % 2 == 0)
m_testChunk.SetBlock(x, y, z, BTYPE_DIRT);
}
}
}
CenterMouse();
HideCursor();
}
@@ -63,6 +76,13 @@ void Engine::LoadResource() {
LoadTexture(m_textureCube2, TEXTURE_PATH "metal2.png");
LoadTexture(m_textureCube3, TEXTURE_PATH "metal3.png");
LoadTexture(m_textureCube4, TEXTURE_PATH "metal4.png");
std::cout << " Loading and compiling shaders ..." << std::endl;
if (!m_shader01.Load(SHADER_PATH "shader01.vert", SHADER_PATH "shader01.frag", true))
{
std::cout << " Failed to load shader " << std::endl;
exit(1);
}
}
void Engine::UnloadResource()
@@ -172,98 +192,29 @@ void Engine::Render(float elapsedTime)
glTexCoord2f(0, nbRep);
glVertex3f(-100.f, -2.f, -100.f);
glEnd();
// Cube
all.ApplyTranslation(0.f, 0.f, -10.f);
all.ApplyRotation(gameTime * 100.f, 0.f, 1.f, 0.f);
all.ApplyRotation(gameTime * 100.f, 0.f, 0.f, 1.f);
all.ApplyRotation(gameTime * 100.f, 1.f, 0.f, 0.f);
all.Use();
switch ((int)(gameTime*5) % 4) {
case 0:
m_textureCube1.Bind();
// Chunk
switch ((int)(gameTime * 5) % 4) {
case 0: m_textureCube1.Bind();
break;
case 1:
m_textureCube2.Bind();
case 1: m_textureCube2.Bind();
break;
case 2:
m_textureCube3.Bind();
case 2: m_textureCube3.Bind();
break;
case 3:
m_textureCube4.Bind();
case 3: m_textureCube4.Bind();
break;
}
glEnable(GL_BLEND);
glBegin(GL_QUADS);
if (m_testChunk.IsDirty())
m_testChunk.Update();
m_shader01.Use();
m_testChunk.Render();
Shader::Disable();
glNormal3f(0, 0, 1);
glTexCoord2f(0, 1);
glVertex3f(0.5f, 0.5f, 0.5f);
glTexCoord2f(1, 1);
glVertex3f(-0.5f, 0.5f, 0.5f);
glTexCoord2f(1, 0);
glVertex3f(-0.5f, -0.5f, 0.5f);
glTexCoord2f(0, 0);
glVertex3f(0.5f, -0.5f, 0.5f);
glNormal3f(0, 0, -1);
glTexCoord2f(1, 0);
glVertex3f(0.5f, -0.5f, -0.5f);
glTexCoord2f(0, 0);
glVertex3f(-0.5f, -0.5f, -0.5f);
glTexCoord2f(0, 1);
glVertex3f(-0.5f, 0.5f, -0.5f);
glTexCoord2f(1, 1);
glVertex3f(0.5f, 0.5f, -0.5f);
glNormal3f(-1, 0, 0);
glTexCoord2f(0, 1);
glVertex3f(-0.5f, 0.5f, 0.5f);
glTexCoord2f(1, 1);
glVertex3f(-0.5f, 0.5f, -0.5f);
glTexCoord2f(1, 0);
glVertex3f(-0.5f, -0.5f, -0.5f);
glTexCoord2f(0, 0);
glVertex3f(-0.5f, -0.5f, 0.5f);
glNormal3f(1, 0, 0);
glTexCoord2f(0, 1);
glVertex3f(0.5f, 0.5f, -0.5f);
glTexCoord2f(1, 1);
glVertex3f(0.5f, 0.5f, 0.5f);
glTexCoord2f(1, 0);
glVertex3f(0.5f, -0.5f, 0.5f);
glTexCoord2f(0, 0);
glVertex3f(0.5f, -0.5f, -0.5f);
glNormal3f(0, 1, 0);
glTexCoord2f(0, 0);
glVertex3f(-0.5f, 0.5f, -0.5f);
glTexCoord2f(0, 1);
glVertex3f(-0.5f, 0.5f, 0.5f);
glTexCoord2f(1, 1);
glVertex3f(0.5f, 0.5f, 0.5f);
glTexCoord2f(1, 0);
glVertex3f(0.5f, 0.5f, -0.5f);
glNormal3f(0, -1, 0);
glTexCoord2f(0, 0);
glVertex3f(-0.5f, -0.5f, 0.5f);
glTexCoord2f(0, 1);
glVertex3f(-0.5f, -0.5f, -0.5f);
glTexCoord2f(1, 1);
glVertex3f(0.5f, -0.5f, -0.5f);
glTexCoord2f(1, 0);
glVertex3f(0.5f, -0.5f, 0.5f);
glDisable(GL_BLEND);
glEnd();
}
void Engine::KeyPressEvent(unsigned char key)
{
switch (key)
{
switch (key) {
case 36: // ESC
Stop();
break;
@@ -316,8 +267,7 @@ void Engine::KeyPressEvent(unsigned char key)
void Engine::KeyReleaseEvent(unsigned char key)
{
switch (key)
{
switch (key) {
case 24: // Y
m_wireframe = !m_wireframe;
if (m_wireframe)