X-Git-Url: http://git.localhorst.tv/?a=blobdiff_plain;f=src%2Finterface.cpp;h=45439da0e9a1de63c497063f192a6109c60434b9;hb=e74f1ad236429f05db90c0ace825277e2a3fbc05;hp=1f66b73e06ffc56afd1da35b1b502cafbdb0d193;hpb=f924498d348c33d0c27f129c599a7466312253b2;p=blank.git diff --git a/src/interface.cpp b/src/interface.cpp index 1f66b73..45439da 100644 --- a/src/interface.cpp +++ b/src/interface.cpp @@ -3,13 +3,15 @@ #include "geometry.hpp" #include "world.hpp" +#include #include #include +#include namespace blank { -Interface::Interface(World &world) +Interface::Interface(const Config &config, World &world) : world(world) , ctrl(world.Player()) , hud(world.BlockTypes()) @@ -18,9 +20,7 @@ Interface::Interface(World &world) , aim_normal() , outline() , outline_transform(1.0f) -, move_velocity(0.005f) -, pitch_sensitivity(-0.0025f) -, yaw_sensitivity(-0.001f) +, config(config) , remove(0) , selection(1) , front(false) @@ -35,6 +35,8 @@ Interface::Interface(World &world) void Interface::Handle(const SDL_KeyboardEvent &event) { + if (config.keyboard_disabled) return; + switch (event.keysym.sym) { case SDLK_w: front = event.state == SDL_PRESSED; @@ -65,6 +67,27 @@ void Interface::Handle(const SDL_KeyboardEvent &event) { TurnBlock(); } break; + + case SDLK_b: + if (event.state == SDL_PRESSED) { + PrintBlockInfo(); + } + break; + case SDLK_c: + if (event.state == SDL_PRESSED) { + PrintChunkInfo(); + } + break; + case SDLK_l: + if (event.state == SDL_PRESSED) { + PrintLightInfo(); + } + break; + case SDLK_p: + if (event.state == SDL_PRESSED) { + PrintSelectionInfo(); + } + break; } } @@ -78,13 +101,80 @@ void Interface::TurnBlock() { 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::PrintChunkInfo() { + std::cout << std::endl; + if (!aim_chunk) { + std::cout << "not looking at any block" << std::endl; + return; + } + std::cout << "looking at chunk " + << aim_chunk->Position() + << std::endl; + + std::cout << " neighbors:" << std::endl; + if (aim_chunk->HasNeighbor(Block::FACE_LEFT)) { + std::cout << " left " << aim_chunk->GetNeighbor(Block::FACE_LEFT).Position() << std::endl; + } + if (aim_chunk->HasNeighbor(Block::FACE_RIGHT)) { + std::cout << " right " << aim_chunk->GetNeighbor(Block::FACE_RIGHT).Position() << std::endl; + } + if (aim_chunk->HasNeighbor(Block::FACE_UP)) { + std::cout << " up " << aim_chunk->GetNeighbor(Block::FACE_UP).Position() << std::endl; + } + if (aim_chunk->HasNeighbor(Block::FACE_DOWN)) { + std::cout << " down " << aim_chunk->GetNeighbor(Block::FACE_DOWN).Position() << std::endl; + } + if (aim_chunk->HasNeighbor(Block::FACE_FRONT)) { + std::cout << " front " << aim_chunk->GetNeighbor(Block::FACE_FRONT).Position() << std::endl; + } + if (aim_chunk->HasNeighbor(Block::FACE_BACK)) { + std::cout << " back " << aim_chunk->GetNeighbor(Block::FACE_BACK).Position() << std::endl; + } + std::cout << std::endl; +} + +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); + if (config.mouse_disabled) return; + ctrl.RotateYaw(event.xrel * config.yaw_sensitivity); + ctrl.RotatePitch(event.yrel * config.pitch_sensitivity); } void Interface::Handle(const SDL_MouseButtonEvent &event) { + if (config.mouse_disabled) return; + if (event.state != SDL_PRESSED) return; if (event.button == 1) { @@ -110,18 +200,20 @@ 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(); } void Interface::Handle(const SDL_MouseWheelEvent &event) { + if (config.mouse_disabled) return; + if (event.y < 0) { SelectNext(); } else if (event.y > 0) { @@ -155,19 +247,19 @@ void Interface::Handle(const SDL_WindowEvent &event) { void Interface::Update(int dt) { glm::vec3 vel; if (right && !left) { - vel.x = move_velocity; + vel.x = config.move_velocity; } else if (left && !right) { - vel.x = -move_velocity; + vel.x = -config.move_velocity; } if (up && !down) { - vel.y = move_velocity; + vel.y = config.move_velocity; } else if (down && !up) { - vel.y = -move_velocity; + vel.y = -config.move_velocity; } if (back && !front) { - vel.z = move_velocity; + vel.z = config.move_velocity; } else if (front && !back) { - vel.z = -move_velocity; + vel.z = -config.move_velocity; } ctrl.Velocity(vel); ctrl.Update(dt); @@ -188,6 +280,8 @@ void Interface::Update(int dt) { void Interface::Render(DirectionalLighting &program) { + if (config.visual_disabled) return; + if (aim_chunk) { program.SetM(outline_transform); outline.Draw();