X-Git-Url: http://git.localhorst.tv/?a=blobdiff_plain;f=src%2Finterface.cpp;h=f4b13b015d6d69fcbf6adbfc6e0a92d6c3d6454e;hb=bd6bd2c875f4b6baef913e5315aa9f7e7cd7da7a;hp=f20903bd0a2c5acec54f7d2bd5904c66e160c02f;hpb=c3c5045f06327db2a3c97eae77a072bc06677286;p=blank.git diff --git a/src/interface.cpp b/src/interface.cpp index f20903b..f4b13b0 100644 --- a/src/interface.cpp +++ b/src/interface.cpp @@ -3,8 +3,10 @@ #include "geometry.hpp" #include "world.hpp" +#include #include #include +#include namespace blank { @@ -12,7 +14,7 @@ namespace blank { Interface::Interface(World &world) : world(world) , ctrl(world.Player()) -, hud() +, hud(world.BlockTypes()) , aim_chunk(nullptr) , aim_block(0) , aim_normal() @@ -30,7 +32,7 @@ Interface::Interface(World &world) , up(false) , down(false) { hud.Viewport(960, 600); - hud.Display(*world.BlockTypes()[selection.type]); + hud.Display(selection); } @@ -48,17 +50,85 @@ void Interface::Handle(const SDL_KeyboardEvent &event) { case SDLK_d: right = event.state == SDL_PRESSED; break; - case SDLK_q: case SDLK_SPACE: up = event.state == SDL_PRESSED; break; - case SDLK_e: case SDLK_LSHIFT: down = event.state == SDL_PRESSED; break; + + case SDLK_q: + if (event.state == SDL_PRESSED) { + FaceBlock(); + } + break; + case SDLK_e: + if (event.state == SDL_PRESSED) { + TurnBlock(); + } + break; + + case SDLK_b: + if (event.state == SDL_PRESSED) { + PrintBlockInfo(); + } + break; + case SDLK_l: + if (event.state == SDL_PRESSED) { + PrintLightInfo(); + } + break; + case SDLK_p: + if (event.state == SDL_PRESSED) { + PrintSelectionInfo(); + } + break; } } +void Interface::FaceBlock() { + selection.SetFace(Block::Face((selection.GetFace() + 1) % Block::FACE_COUNT)); + hud.Display(selection); +} + +void Interface::TurnBlock() { + selection.SetTurn(Block::Turn((selection.GetTurn() + 1) % Block::TURN_COUNT)); + hud.Display(selection); +} + +void Interface::PrintBlockInfo() { + std::cout << std::endl; + if (!aim_chunk) { + std::cout << "not looking at any block" << std::endl; + return; + } + std::cout << "looking at block " << aim_block + << " " << Chunk::ToCoords(aim_block) + << " of chunk " << aim_chunk->Position() + << std::endl; + Print(aim_chunk->BlockAt(aim_block)); +} + +void Interface::PrintLightInfo() { + std::cout + << "light level " << world.PlayerChunk().GetLight(world.Player().Position()) + << " at position " << world.Player().Position() + << std::endl; +} + +void Interface::PrintSelectionInfo() { + std::cout << std::endl; + Print(selection); +} + +void Interface::Print(const Block &block) { + std::cout << "type: " << block.type + << ", face: " << block.GetFace() + << ", turn: " << block.GetTurn() + << std::endl; +} + + void Interface::Handle(const SDL_MouseMotionEvent &event) { ctrl.RotateYaw(event.xrel * yaw_sensitivity); ctrl.RotatePitch(event.yrel * pitch_sensitivity); @@ -79,7 +149,7 @@ void Interface::Handle(const SDL_MouseButtonEvent &event) { void Interface::PickBlock() { if (!aim_chunk) return; selection = aim_chunk->BlockAt(aim_block); - hud.Display(*world.BlockTypes()[selection.type]); + hud.Display(selection); } void Interface::PlaceBlock() { @@ -90,13 +160,13 @@ void Interface::PlaceBlock() { mod_chunk = &world.Next(*aim_chunk, aim_normal); next_pos -= aim_normal * glm::vec3(Chunk::Extent()); } - mod_chunk->BlockAt(next_pos) = selection; + mod_chunk->SetBlock(next_pos, selection); mod_chunk->Invalidate(); } void Interface::RemoveBlock() { if (!aim_chunk) return; - aim_chunk->BlockAt(aim_block) = remove; + aim_chunk->SetBlock(aim_block, remove); aim_chunk->Invalidate(); } @@ -114,7 +184,7 @@ void Interface::SelectNext() { if (size_t(selection.type) >= world.BlockTypes().Size()) { selection.type = 1; } - hud.Display(*world.BlockTypes()[selection.type]); + hud.Display(selection); } void Interface::SelectPrevious() { @@ -122,7 +192,7 @@ void Interface::SelectPrevious() { if (selection.type <= 0) { selection.type = world.BlockTypes().Size() - 1; } - hud.Display(*world.BlockTypes()[selection.type]); + hud.Display(selection); } void Interface::Handle(const SDL_WindowEvent &event) {