]> git.localhorst.tv Git - blank.git/blobdiff - src/ui/ui.cpp
group entity updates in as few packets as possible
[blank.git] / src / ui / ui.cpp
index acf877fd1da6811dca1679d80461d7c86105f0ee..02f372e5c66c57d7a827362814dc61c97aa66bc1 100644 (file)
@@ -102,10 +102,12 @@ void HUD::Render(Viewport &viewport) noexcept {
 Interface::Interface(
        const Config &config,
        Environment &env,
-       World &world)
+       World &world,
+       const Player &player)
 : env(env)
 , world(world)
-, ctrl(world.Player())
+, player(player)
+, ctrl(*player.entity)
 , hud(world.BlockTypes(), env.assets.small_ui_font)
 , aim{{ 0, 0, 0 }, { 0, 0, -1 }}
 , aim_world()
@@ -125,8 +127,8 @@ Interface::Interface(
 , remove_timer(256)
 , remove(0)
 , selection(0)
-, place_sound(env.assets.LoadSound("thump"))
-, remove_sound(env.assets.LoadSound("plop"))
+, place_sound(env.loader.LoadSound("thump"))
+, remove_sound(env.loader.LoadSound("plop"))
 , fwd(0)
 , rev(0)
 , debug(false) {
@@ -204,19 +206,6 @@ void Interface::HandlePress(const SDL_KeyboardEvent &event) {
                        ToggleCollision();
                        break;
 
-               case Keymap::PRINT_BLOCK:
-                       PrintBlockInfo();
-                       break;
-               case Keymap::PRINT_CHUNK:
-                       PrintChunkInfo();
-                       break;
-               case Keymap::PRINT_LIGHT:
-                       PrintLightInfo();
-                       break;
-               case Keymap::PRINT_SELECTION:
-                       PrintSelectionInfo();
-                       break;
-
                case Keymap::TOGGLE_VISUAL:
                        ToggleVisual();
                        break;
@@ -283,92 +272,6 @@ void Interface::ToggleCollision() {
        }
 }
 
-void Interface::PrintBlockInfo() {
-       std::cout << std::endl;
-       if (!aim_world) {
-               PostMessage("not looking at any block");
-               Ray aim = ctrl.Aim();
-               std::stringstream s;
-               s << "aim ray: " << aim.orig << ", " << aim.dir;
-               PostMessage(s.str());
-               return;
-       }
-       std::stringstream s;
-       s << "looking at block " << aim_world.block
-               << " " << aim_world.BlockCoords()
-               << " of chunk " << aim_world.GetChunk().Position()
-       ;
-       PostMessage(s.str());
-       Print(aim_world.GetBlock());
-}
-
-void Interface::PrintChunkInfo() {
-       std::cout << std::endl;
-       if (!aim_world) {
-               PostMessage("not looking at any block");
-               return;
-       }
-       std::stringstream s;
-       s << "looking at chunk " << aim_world.GetChunk().Position();
-       PostMessage(s.str());
-
-       PostMessage("  neighbors:");
-       if (aim_world.GetChunk().HasNeighbor(Block::FACE_LEFT)) {
-               s.str("");
-               s << " left  " << aim_world.GetChunk().GetNeighbor(Block::FACE_LEFT).Position();
-               PostMessage(s.str());
-       }
-       if (aim_world.GetChunk().HasNeighbor(Block::FACE_RIGHT)) {
-               s.str("");
-               s << " right " << aim_world.GetChunk().GetNeighbor(Block::FACE_RIGHT).Position();
-               PostMessage(s.str());
-       }
-       if (aim_world.GetChunk().HasNeighbor(Block::FACE_UP)) {
-               s.str("");
-               s << " up    " << aim_world.GetChunk().GetNeighbor(Block::FACE_UP).Position();
-               PostMessage(s.str());
-       }
-       if (aim_world.GetChunk().HasNeighbor(Block::FACE_DOWN)) {
-               s.str("");
-               s << " down  " << aim_world.GetChunk().GetNeighbor(Block::FACE_DOWN).Position();
-               PostMessage(s.str());
-       }
-       if (aim_world.GetChunk().HasNeighbor(Block::FACE_FRONT)) {
-               s.str("");
-               s << " front " << aim_world.GetChunk().GetNeighbor(Block::FACE_FRONT).Position();
-               PostMessage(s.str());
-       }
-       if (aim_world.GetChunk().HasNeighbor(Block::FACE_BACK)) {
-               s.str("");
-               s << " back  " << aim_world.GetChunk().GetNeighbor(Block::FACE_BACK).Position();
-               PostMessage(s.str());
-       }
-       std::cout << std::endl;
-}
-
-void Interface::PrintLightInfo() {
-       std::stringstream s;
-       s
-               << "light level " << world.PlayerChunk().GetLight(world.Player().Position())
-               << " at position " << world.Player().Position()
-       ;
-       PostMessage(s.str());
-}
-
-void Interface::PrintSelectionInfo() {
-       std::cout << std::endl;
-       Print(selection);
-}
-
-void Interface::Print(const Block &block) {
-       std::stringstream s;
-       s << "type: " << block.type
-               << ", face: " << block.GetFace()
-               << ", turn: " << block.GetTurn()
-       ;
-       PostMessage(s.str());
-}
-
 void Interface::ToggleAudio() {
        config.audio_disabled = !config.audio_disabled;
        if (config.audio_disabled) {
@@ -493,9 +396,9 @@ void Interface::PickBlock() {
 void Interface::PlaceBlock() {
        if (!aim_world) return;
 
-       glm::vec3 next_pos = aim_world.BlockCoords() + aim_world.normal;
-       BlockLookup next_block(&aim_world.GetChunk(), next_pos);
-       if (next_block) {
+       BlockLookup next_block(aim_world.chunk, aim_world.BlockPos(), Block::NormalFace(aim_world.normal));
+       if (!next_block) {
+               return;
        }
        next_block.SetBlock(selection);
 
@@ -503,7 +406,7 @@ void Interface::PlaceBlock() {
        const Entity &player = ctrl.Controlled();
        env.audio.Play(
                place_sound,
-               aim_world.GetChunk().ToSceneCoords(player.ChunkCoords(), next_pos)
+               next_block.GetChunk().ToSceneCoords(player.ChunkCoords(), next_block.GetBlockCoords())
        );
 }
 
@@ -623,7 +526,7 @@ void Interface::UpdateOutline() {
        outl_buf.Clear();
        aim_world.GetType().FillOutlineModel(outl_buf);
        outline.Update(outl_buf);
-       outline_transform = aim_world.GetChunk().Transform(world.Player().ChunkCoords());
+       outline_transform = aim_world.GetChunk().Transform(player.entity->ChunkCoords());
        outline_transform *= aim_world.BlockTransform();
        outline_transform *= glm::scale(glm::vec3(1.005f));
 }
@@ -710,11 +613,6 @@ void Keymap::LoadDefault() {
        Map(SDL_SCANCODE_F3, TOGGLE_DEBUG);
        Map(SDL_SCANCODE_F4, TOGGLE_AUDIO);
 
-       Map(SDL_SCANCODE_B, PRINT_BLOCK);
-       Map(SDL_SCANCODE_C, PRINT_CHUNK);
-       Map(SDL_SCANCODE_L, PRINT_LIGHT);
-       Map(SDL_SCANCODE_P, PRINT_SELECTION);
-
        Map(SDL_SCANCODE_ESCAPE, EXIT);
 }
 
@@ -806,14 +704,6 @@ const char *Keymap::ActionToString(Action action) {
                        return "toggle_visual";
                case TOGGLE_DEBUG:
                        return "toggle_debug";
-               case PRINT_BLOCK:
-                       return "print_block";
-               case PRINT_CHUNK:
-                       return "print_chunk";
-               case PRINT_LIGHT:
-                       return "print_light";
-               case PRINT_SELECTION:
-                       return "print_selection";
                case EXIT:
                        return "exit";
        }
@@ -854,14 +744,6 @@ Keymap::Action Keymap::StringToAction(const std::string &str) {
                return TOGGLE_VISUAL;
        } else if (str == "toggle_debug") {
                return TOGGLE_DEBUG;
-       } else if (str == "print_block") {
-               return PRINT_BLOCK;
-       } else if (str == "print_chunk") {
-               return PRINT_CHUNK;
-       } else if (str == "print_light") {
-               return PRINT_LIGHT;
-       } else if (str == "print_selection") {
-               return PRINT_SELECTION;
        } else if (str == "exit") {
                return EXIT;
        } else {