X-Git-Url: http://git.localhorst.tv/?a=blobdiff_plain;f=src%2Fapp.cpp;h=8c0793dfc123b4ab0f14bafd806aafc8c118f09e;hb=df75211841f870ca42c3b8bbc422ee43a517e766;hp=8c40c61fbc5ab2c74ea00257ff40fe4823b79264;hpb=982b69ce8c393ae18beed5239191b8bc2ee1d5d1;p=blank.git diff --git a/src/app.cpp b/src/app.cpp index 8c40c61..8c0793d 100644 --- a/src/app.cpp +++ b/src/app.cpp @@ -20,6 +20,7 @@ Application::Application() , pitch_sensitivity(-0.0025f) , yaw_sensitivity(-0.001f) , cam() +, hud() , world() , outline() , outline_visible(false) @@ -42,26 +43,11 @@ Application::Application() glGenVertexArrays(1, &VertexArrayID); glBindVertexArray(VertexArrayID); - cam.Position(glm::vec3(0, 4, 4)); - world.Generate(); - outline.vertices = std::vector({ - { 0.0f, 0.0f, 0.0f }, { 1.0f, 0.0f, 0.0f }, - { 1.0f, 0.0f, 0.0f }, { 1.0f, 1.0f, 0.0f }, - { 1.0f, 1.0f, 0.0f }, { 0.0f, 1.0f, 0.0f }, - { 0.0f, 1.0f, 0.0f }, { 0.0f, 0.0f, 0.0f }, - { 0.0f, 0.0f, 0.0f }, { 0.0f, 0.0f, 1.0f }, - { 1.0f, 0.0f, 0.0f }, { 1.0f, 0.0f, 1.0f }, - { 1.0f, 1.0f, 0.0f }, { 1.0f, 1.0f, 1.0f }, - { 0.0f, 1.0f, 0.0f }, { 0.0f, 1.0f, 1.0f }, - { 0.0f, 0.0f, 1.0f }, { 1.0f, 0.0f, 1.0f }, - { 1.0f, 0.0f, 1.0f }, { 1.0f, 1.0f, 1.0f }, - { 1.0f, 1.0f, 1.0f }, { 0.0f, 1.0f, 1.0f }, - { 0.0f, 1.0f, 1.0f }, { 0.0f, 0.0f, 1.0f }, - }); - outline.colors.resize(24, { -1, -1, -1 }); - outline.Invalidate(); + cam.Position(glm::vec3(0, 4, 4)); + hud.Viewport(960, 600); + hud.Display(*world.BlockTypes()[place_id]); glClearColor(0.0, 0.0, 0.0, 1.0); } @@ -106,9 +92,11 @@ void Application::HandleEvents() { right = event.key.state == SDL_PRESSED; break; case SDLK_q: + case SDLK_SPACE: up = event.key.state == SDL_PRESSED; break; case SDLK_e: + case SDLK_LSHIFT: down = event.key.state == SDL_PRESSED; break; } @@ -136,6 +124,7 @@ void Application::HandleEvents() { switch (event.window.event) { case SDL_WINDOWEVENT_RESIZED: cam.Viewport(event.window.data1, event.window.data2); + hud.Viewport(event.window.data1, event.window.data2); break; default: break; @@ -176,7 +165,10 @@ void Application::Update(int dt) { if (world.Intersection(aim, glm::mat4(1.0f), &chunk, &blkid, &dist, &normal)) { glm::vec3 pos = Chunk::ToCoords(blkid); outline_visible = true; + outline.Clear(); + chunk->BlockAt(blkid).type->FillOutlineModel(outline); outline_transform = glm::translate(chunk->Transform(), pos); + outline_transform = glm::scale(outline_transform, glm::vec3(1.0001f)); } else { outline_visible = false; } @@ -184,6 +176,7 @@ void Application::Update(int dt) { if (pick) { if (chunk) { place_id = chunk->BlockAt(blkid).type->id; + hud.Display(*world.BlockTypes()[place_id]); } pick = false; } @@ -214,6 +207,7 @@ void Application::Render() { program.Activate(); + program.SetLightDirection({ -1.0f, -3.0f, -2.0f }); program.SetVP(cam.View(), cam.Projection()); for (Chunk &chunk : world.LoadedChunks()) { @@ -226,6 +220,8 @@ void Application::Render() { outline.Draw(); } + hud.Render(program); + window.Flip(); }