]> git.localhorst.tv Git - blank.git/blobdiff - src/ui/ui.cpp
light entities according to block light level
[blank.git] / src / ui / ui.cpp
index dd113ca2b620d8fd763934459e9e4b1f088c15ce..8563f7ded08409344be3957f7620640268ca7e3f 100644 (file)
@@ -17,6 +17,7 @@
 #include "../graphics/Viewport.hpp"
 #include "../io/TokenStreamReader.hpp"
 #include "../model/bounds.hpp"
+#include "../net/CongestionControl.hpp"
 #include "../world/BlockLookup.hpp"
 #include "../world/World.hpp"
 #include "../world/WorldManipulator.hpp"
@@ -43,6 +44,12 @@ PlayerController::PlayerController(World &world, Player &player)
        player.GetEntity().SetController(*this);
 }
 
+PlayerController::~PlayerController() {
+       if (&player.GetEntity().GetController() == this) {
+               player.GetEntity().UnsetController();
+       }
+}
+
 void PlayerController::SetMovement(const glm::vec3 &m) noexcept {
        if (dot(m, m) > 1.0f) {
                move_dir = normalize(m);
@@ -202,6 +209,11 @@ HUD::HUD(Environment &env, Config &config, const Player &player)
 , block_text()
 , show_block(false)
 , show_entity(false)
+// net stats
+, bandwidth_text()
+, rtt_text()
+, packet_loss_text()
+, show_net(false)
 // message box
 , messages(env.assets.small_ui_font)
 , msg_timer(5000)
@@ -242,6 +254,20 @@ HUD::HUD(Environment &env, Config &config, const Player &player)
        entity_text.Background(glm::vec4(0.5f));
        entity_text.Set(env.assets.small_ui_font, "Entity: none");
 
+       // net stats
+       bandwidth_text.Position(glm::vec3(-25.0f, 25.0f + 6 * ls, 0.0f), Gravity::NORTH_EAST);
+       bandwidth_text.Foreground(glm::vec4(1.0f));
+       bandwidth_text.Background(glm::vec4(0.5f));
+       bandwidth_text.Set(env.assets.small_ui_font, "TX: 0.0KB/s RX: 0.0KB/s");
+       rtt_text.Position(glm::vec3(-25.0f, 25.0f + 7 * ls, 0.0f), Gravity::NORTH_EAST);
+       rtt_text.Foreground(glm::vec4(1.0f));
+       rtt_text.Background(glm::vec4(0.5f));
+       rtt_text.Set(env.assets.small_ui_font, "RTT: unavailable");
+       packet_loss_text.Position(glm::vec3(-25.0f, 25.0f + 8 * ls, 0.0f), Gravity::NORTH_EAST);
+       packet_loss_text.Foreground(glm::vec4(1.0f));
+       packet_loss_text.Background(glm::vec4(0.5f));
+       packet_loss_text.Set(env.assets.small_ui_font, "Packet loss: 0.0%");
+
        // message box
        messages.Position(glm::vec3(25.0f, -25.0f - 2 * ls, 0.0f), Gravity::SOUTH_WEST);
        messages.Foreground(glm::vec4(1.0f));
@@ -341,10 +367,10 @@ void HUD::UpdatePosition() {
 }
 
 void HUD::UpdateOrientation() {
-       //std::stringstream s;
-       //s << std::setprecision(3) << "pitch: " << rad2deg(ctrl.Pitch())
-       //      << ", yaw: " << rad2deg(ctrl.Yaw());
-       //orientation_text.Set(env.assets.small_ui_font, s.str());
+       std::stringstream s;
+       s << std::setprecision(3) << "pitch: " << rad2deg(player.GetEntity().Pitch())
+               << ", yaw: " << rad2deg(player.GetEntity().Yaw());
+       orientation_text.Set(env.assets.small_ui_font, s.str());
 }
 
 void HUD::PostMessage(const char *msg) {
@@ -355,6 +381,27 @@ void HUD::PostMessage(const char *msg) {
 }
 
 
+void HUD::UpdateNetStats(const CongestionControl &stat) {
+       if (!config.video.debug) return;
+
+       std::stringstream s;
+       s << std::fixed << std::setprecision(1)
+               << "TX: " << stat.Upstream()
+               << "KB/s, RX: " << stat.Downstream() << "KB/s";
+       bandwidth_text.Set(env.assets.small_ui_font, s.str());
+
+       s.str("");
+       s << "RTT: " << stat.RoundTripTime() << "ms";
+       rtt_text.Set(env.assets.small_ui_font, s.str());
+
+       s.str("");
+       s << "Packet loss: " << (stat.PacketLoss() * 100.0f) << "%";
+       packet_loss_text.Set(env.assets.small_ui_font, s.str());
+
+       show_net = true;
+}
+
+
 void HUD::Update(int dt) {
        msg_timer.Update(dt);
        if (msg_timer.HitOnce()) {
@@ -386,6 +433,8 @@ void HUD::Render(Viewport &viewport) noexcept {
                if (block_visible) {
                        DirectionalLighting &world_prog = viewport.HUDProgram();
                        world_prog.SetLightDirection({ 1.0f, 3.0f, 5.0f });
+                       world_prog.SetLightColor({ 1.0f, 1.0f, 1.0f });
+                       world_prog.SetAmbientColor({ 0.1f, 0.1f, 0.1f });
                        // disable distance fog
                        world_prog.SetFogDensity(0.0f);
 
@@ -418,6 +467,11 @@ void HUD::Render(Viewport &viewport) noexcept {
                } else if (show_entity) {
                        entity_text.Render(viewport);
                }
+               if (show_net) {
+                       bandwidth_text.Render(viewport);
+                       rtt_text.Render(viewport);
+                       packet_loss_text.Render(viewport);
+               }
        }
 }