diff --git a/dependencies/kekengine b/dependencies/kekengine index 656603f..4026a09 160000 --- a/dependencies/kekengine +++ b/dependencies/kekengine @@ -1 +1 @@ -Subproject commit 656603f4396872afd07565a02f5d73bb66885ec2 +Subproject commit 4026a0992857b70bf5bcd0dda14ebe9af9251ffe diff --git a/src/kekrooms/cpp/kekrooms.cpp b/src/kekrooms/cpp/kekrooms.cpp index f932cb8..80056a9 100644 --- a/src/kekrooms/cpp/kekrooms.cpp +++ b/src/kekrooms/cpp/kekrooms.cpp @@ -32,7 +32,7 @@ using namespace kek; #define CHUNK_RADIUS 2 #define WALLS_PER_CHUNK 20 #define WALL_HEIGHT 9 -#define LIGHT_SPACING 8 +#define LIGHT_SPACING 16 static ButtonElement *buttonPlay; @@ -49,8 +49,7 @@ struct Chunk { std::map loadedChunks; Mesh *floorMesh; TextElement *debugText; -std::shared_ptr red; -std::shared_ptr gray; +std::shared_ptr red, gray, white, wallpaper; void gameLoop(GLFWwindow *window, void *) { Player *player = Engine::getPlayer(); @@ -70,11 +69,16 @@ void gameLoop(GLFWwindow *window, void *) { const Chunk *ch = &it->second; if(std::abs(ch->x - chunkX) > CHUNK_RADIUS || abs(ch->z - chunkZ) > CHUNK_RADIUS) { scene->removeObject(ch->floor); + scene->removeObject(ch->ceiling); for(auto w : ch->walls) { scene->removeObject(w); } + for(auto l : ch->lights) { + scene->lights->remove(l); + } + it = loadedChunks.erase(it); continue; } @@ -82,8 +86,6 @@ void gameLoop(GLFWwindow *window, void *) { it = std::next(it); } - std::shared_ptr wallpaper = Texture::load("image/wallpaper.png"); - for(int x = chunkX - CHUNK_RADIUS; x <= chunkX + CHUNK_RADIUS; x++) { for(int z = chunkZ - CHUNK_RADIUS; z <= chunkZ + CHUNK_RADIUS; z++) { long int chunkID = ((long int) x & 0xFFFF) << 16 | ((long int) z & 0xFFFF); @@ -97,7 +99,7 @@ void gameLoop(GLFWwindow *window, void *) { GameObject *ceiling = new GameObject(); ceiling->addMesh(genCubeMesh(CHUNK_SIZE, 2, CHUNK_SIZE, gray, gray, gray)); - ceiling->addPhysics(new btBoxShape(btVector3(CHUNK_SIZE / 2, 1, CHUNK_SIZE / 2)), 0, btCollisionObject::CF_STATIC_OBJECT); + // ceiling->addPhysics(new btBoxShape(btVector3(CHUNK_SIZE / 2, 1, CHUNK_SIZE / 2)), 0, btCollisionObject::CF_STATIC_OBJECT); ceiling->moveTo(glm::vec3(x * CHUNK_SIZE, WALL_HEIGHT, z * CHUNK_SIZE)); scene->addObject(ceiling); @@ -120,15 +122,23 @@ void gameLoop(GLFWwindow *window, void *) { } std::vector lights; - // for(int lx = 0; lx < CHUNK_SIZE / LIGHT_SPACING; lx++) { - // for(int ly = 0; ly < CHUNK_SIZE / LIGHT_SPACING; ly++) { - // SpotLight *light = new SpotLight(glm::vec3(1), glm::vec3(0, -1, 0), 1, 1, 1, 0.5, 0.6); - PointLight *light = new PointLight(glm::vec3(1), 1, 1, 1); - light->moveTo(glm::vec3(x * CHUNK_SIZE, WALL_HEIGHT - 1, z * CHUNK_SIZE)); - scene->lights->add(light); - lights.push_back(light); - // } - //} + for(int lx = 0; lx < CHUNK_SIZE / LIGHT_SPACING; lx++) { + for(int ly = 0; ly < CHUNK_SIZE / LIGHT_SPACING; ly++) { + // SpotLight *light = new SpotLight(glm::vec3(1), glm::vec3(0, -1, 0), 1, 1, 1, 0.5, 0.6); + glm::vec3 lightPos(x * CHUNK_SIZE + lx * LIGHT_SPACING, WALL_HEIGHT - 1, z * CHUNK_SIZE + ly * LIGHT_SPACING); + + PointLight *light = new PointLight(glm::vec3(1), 1, 1, 1); + light->moveTo(glm::vec3(x * CHUNK_SIZE + lx * LIGHT_SPACING, WALL_HEIGHT - 1, z * CHUNK_SIZE + ly * LIGHT_SPACING)); + scene->lights->add(light); + lights.push_back(light); + + GameObject *lamp = new GameObject(); + lamp->addMesh(genCubeMesh(2, 0.5, 2, white, white, white)); + lamp->moveTo(lightPos); + walls.push_back(lamp); + scene->addObject(lamp); + } + } Chunk newChunk{x, z, floor, ceiling, walls, lights}; loadedChunks.emplace(chunkID, newChunk); @@ -142,8 +152,8 @@ void startGame(void *) { Scene *scene = new Scene(); - std::shared_ptr wallpaper = Texture::load("image/wallpaper.png"); - std::shared_ptr white = Texture::generateColor(glm::vec3(1)); + wallpaper = Texture::load("image/wallpaper.png"); + white = Texture::generateColor(glm::vec3(1)); red = Texture::generateColor(glm::vec3(1, 0, 0)); gray = Texture::generateColor(glm::vec3(0.2, 0.2, 0.2));