]> git.localhorst.tv Git - blank.git/blobdiff - src/ui/ui.cpp
per block type "gravity"
[blank.git] / src / ui / ui.cpp
index 263245cd79bfe61ccdeb57e710bc1f5951c67fd0..774b18d3f7179d8510a22b8a3906cdc70e68a549 100644 (file)
@@ -13,6 +13,7 @@
 #include "../app/init.hpp"
 #include "../audio/Audio.hpp"
 #include "../audio/SoundBank.hpp"
+#include "../geometry/distance.hpp"
 #include "../graphics/Font.hpp"
 #include "../graphics/Viewport.hpp"
 #include "../io/TokenStreamReader.hpp"
@@ -60,7 +61,13 @@ void PlayerController::SetMovement(const glm::vec3 &m) noexcept {
 }
 
 glm::vec3 PlayerController::ControlForce(const Entity &e, const EntityState &s) const {
-       return TargetVelocity(rotateY(move_dir * e.MaxVelocity(), s.yaw), s, 5.0f);
+       if (!iszero(move_dir)) {
+               // scale input by max velocity, apply yaw, and transform to world space
+               return TargetVelocity(glm::vec3(glm::vec4(rotateY(move_dir * e.MaxVelocity(), s.yaw), 0.0f) * transpose(e.Transform())), s, 5.0f);
+       } else {
+               // target velocity of 0 is the same as halt
+               return Halt(s, 5.0f);
+       }
 }
 
 void PlayerController::TurnHead(float dp, float dy) noexcept {
@@ -90,10 +97,10 @@ void PlayerController::Invalidate() noexcept {
 void PlayerController::UpdatePlayer() noexcept {
        if (dirty) {
                Ray aim = player.Aim();
-               if (!world.Intersection(aim, glm::mat4(1.0f), player.GetEntity().ChunkCoords(), aim_world)) {
+               if (!world.Intersection(aim, player.GetEntity().ChunkCoords(), aim_world)) {
                        aim_world = WorldCollision();
                }
-               if (!world.Intersection(aim, glm::mat4(1.0f), player.GetEntity(), aim_entity)) {
+               if (!world.Intersection(aim, player.GetEntity(), aim_entity)) {
                        aim_entity = EntityCollision();
                }
                if (aim_world && aim_entity) {
@@ -368,8 +375,8 @@ void HUD::UpdatePosition() {
 
 void HUD::UpdateOrientation() {
        std::stringstream s;
-       s << std::setprecision(3) << "pitch: " << rad2deg(player.GetEntity().Pitch())
-               << ", yaw: " << rad2deg(player.GetEntity().Yaw());
+       s << std::setprecision(3) << "pitch: " << glm::degrees(player.GetEntity().Pitch())
+               << ", yaw: " << glm::degrees(player.GetEntity().Yaw());
        orientation_text.Set(env.assets.small_ui_font, s.str());
 }
 
@@ -590,20 +597,19 @@ void Interface::HandlePress(const SDL_KeyboardEvent &event) {
                        break;
 
                case Keymap::TOGGLE_AUDIO:
-                       config.audio.enabled = !config.audio.enabled;
-                       client_ctrl.SetAudio(config.audio.enabled);
+                       client_ctrl.SetAudio(!config.audio.enabled);
                        break;
                case Keymap::TOGGLE_VIDEO:
-                       config.video.world = !config.video.world;
-                       client_ctrl.SetVideo(config.video.world);
+                       client_ctrl.SetVideo(!config.video.world);
                        break;
                case Keymap::TOGGLE_HUD:
-                       config.video.hud = !config.video.hud;
-                       client_ctrl.SetHUD(config.video.hud);
+                       client_ctrl.SetHUD(!config.video.hud);
                        break;
                case Keymap::TOGGLE_DEBUG:
-                       config.video.debug = !config.video.debug;
-                       client_ctrl.SetDebug(config.video.debug);
+                       client_ctrl.SetDebug(!config.video.debug);
+                       break;
+               case Keymap::CAMERA_NEXT:
+                       client_ctrl.NextCamera();
                        break;
 
                default:
@@ -782,6 +788,7 @@ void Keymap::LoadDefault() {
        Map(SDL_SCANCODE_F2, TOGGLE_VIDEO);
        Map(SDL_SCANCODE_F3, TOGGLE_DEBUG);
        Map(SDL_SCANCODE_F4, TOGGLE_AUDIO);
+       Map(SDL_SCANCODE_F5, CAMERA_NEXT);
 
        Map(SDL_SCANCODE_ESCAPE, EXIT);
 }
@@ -867,6 +874,7 @@ std::map<std::string, Keymap::Action> action_map = {
        { "toggle_video", Keymap::TOGGLE_VIDEO },
        { "toggle_hud", Keymap::TOGGLE_HUD },
        { "toggle_debug", Keymap::TOGGLE_DEBUG },
+       { "camera_next", Keymap::CAMERA_NEXT },
 
        { "exit", Keymap::EXIT },
 };