X-Git-Url: http://git.localhorst.tv/?a=blobdiff_plain;f=src%2Fui%2Fui.cpp;h=be03c7e88f22fe7d202440a208b91b3eb2d7d4a9;hb=ede25c0a2f59e21521d1cd962e6ea9d78169ca12;hp=198defb2850f5a628247784c2ebc1bddea41fed5;hpb=5998b18978bd8e7a0c9deb516474634e1d3521c9;p=blank.git diff --git a/src/ui/ui.cpp b/src/ui/ui.cpp index 198defb..be03c7e 100644 --- a/src/ui/ui.cpp +++ b/src/ui/ui.cpp @@ -2,6 +2,7 @@ #include "Interface.hpp" #include "../app/Assets.hpp" +#include "../app/Environment.hpp" #include "../app/FrameCounter.hpp" #include "../app/init.hpp" #include "../audio/Audio.hpp" @@ -92,16 +93,12 @@ void HUD::Render(Viewport &viewport) noexcept { Interface::Interface( const Config &config, - const Assets &assets, - Audio &audio, - const FrameCounter &counter, + Environment &env, World &world) -: audio(audio) -, counter(counter) +: env(env) , world(world) , ctrl(world.Player()) -, font(assets.LoadFont("DejaVuSans", 16)) -, hud(world.BlockTypes(), font) +, hud(world.BlockTypes(), env.assets.small_ui_font) , aim{{ 0, 0, 0 }, { 0, 0, -1 }} , aim_chunk(nullptr) , aim_block(0) @@ -109,21 +106,25 @@ Interface::Interface( , outline() , outline_transform(1.0f) , counter_text() -, messages(font) +, messages(env.assets.small_ui_font) , msg_timer(5000) , config(config) , place_timer(256) , remove_timer(256) , remove(0) , selection(1) -, place_sound(assets.LoadSound("thump")) -, remove_sound(assets.LoadSound("plop")) +, place_sound(env.assets.LoadSound("thump")) +, remove_sound(env.assets.LoadSound("plop")) , fwd(0) , rev(0) { counter_text.Hide(); counter_text.Position(glm::vec3(-25.0f, 25.0f, 0.0f), Gravity::NORTH_EAST); counter_text.Foreground(glm::vec4(1.0f)); counter_text.Background(glm::vec4(0.5f)); + position_text.Hide(); + position_text.Position(glm::vec3(-25.0f, 25.0f + env.assets.small_ui_font.LineSkip(), 0.0f), Gravity::NORTH_EAST); + position_text.Foreground(glm::vec4(1.0f)); + position_text.Background(glm::vec4(0.5f)); messages.Position(glm::vec3(25.0f, -25.0f, 0.0f), Gravity::SOUTH_WEST); messages.Foreground(glm::vec4(1.0f)); messages.Background(glm::vec4(0.5f)); @@ -182,7 +183,7 @@ void Interface::HandlePress(const SDL_KeyboardEvent &event) { ToggleVisual(); break; case SDLK_F3: - ToggleCounter(); + ToggleDebug(); break; case SDLK_F4: ToggleAudio(); @@ -338,20 +339,28 @@ void Interface::ToggleVisual() { } } -void Interface::ToggleCounter() { +void Interface::ToggleDebug() { counter_text.Toggle(); + position_text.Toggle(); if (counter_text.Visible()) { UpdateCounter(); + UpdatePosition(); } } void Interface::UpdateCounter() { std::stringstream s; s << std::setprecision(3) << - "avg: " << counter.Average().running << "ms, " - "peak: " << counter.Peak().running << "ms"; + "avg: " << env.counter.Average().running << "ms, " + "peak: " << env.counter.Peak().running << "ms"; std::string text = s.str(); - counter_text.Set(font, text); + counter_text.Set(env.assets.small_ui_font, text); +} + +void Interface::UpdatePosition() { + std::stringstream s; + s << std::setprecision(3) << "pos: " << ctrl.Controlled().AbsolutePosition(); + position_text.Set(env.assets.small_ui_font, s.str()); } @@ -400,11 +409,10 @@ void Interface::PlaceBlock() { next_pos -= aim_normal * glm::vec3(Chunk::Extent()); } mod_chunk->SetBlock(next_pos, selection); - mod_chunk->Invalidate(); if (config.audio_disabled) return; const Entity &player = ctrl.Controlled(); - audio.Play( + env.audio.Play( place_sound, mod_chunk->ToSceneCoords(player.ChunkCoords(), next_pos) ); @@ -413,11 +421,10 @@ void Interface::PlaceBlock() { void Interface::RemoveBlock() noexcept { if (!aim_chunk) return; aim_chunk->SetBlock(aim_block, remove); - aim_chunk->Invalidate(); if (config.audio_disabled) return; const Entity &player = ctrl.Controlled(); - audio.Play( + env.audio.Play( remove_sound, aim_chunk->ToSceneCoords(player.ChunkCoords(), Chunk::ToCoords(aim_block)) ); @@ -484,9 +491,12 @@ void Interface::Update(int dt) { CheckAim(); } - if (counter_text.Visible() && counter.Changed()) { + if (counter_text.Visible() && env.counter.Changed()) { UpdateCounter(); } + if (position_text.Visible()) { + UpdatePosition(); + } } namespace { @@ -522,6 +532,9 @@ void Interface::Render(Viewport &viewport) noexcept { if (counter_text.Visible()) { counter_text.Render(viewport); } + if (position_text.Visible()) { + position_text.Render(viewport); + } if (msg_timer.Running()) { messages.Render(viewport);