X-Git-Url: http://git.localhorst.tv/?a=blobdiff_plain;f=src%2Fui%2Fui.cpp;h=774b18d3f7179d8510a22b8a3906cdc70e68a549;hb=ed3bdc028edc0ecb5835d1c0bf18dbc59b342daf;hp=8768095559cdf6335cf24be4043984c6cd0a7632;hpb=a957788426ff011acf662e29ec5fc0525c1a578f;p=blank.git diff --git a/src/ui/ui.cpp b/src/ui/ui.cpp index 8768095..774b18d 100644 --- a/src/ui/ui.cpp +++ b/src/ui/ui.cpp @@ -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()); } @@ -433,6 +440,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); @@ -509,7 +518,6 @@ Interface::Interface( , client_ctrl(cc) , fwd(0) , rev(0) -, slot(0) , num_slots(10) , locked(false) { @@ -589,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: @@ -709,7 +716,7 @@ void Interface::UpdateMovement() { } void Interface::InvAbs(int s) { - slot = s % num_slots; + int slot = s % num_slots; while (slot < 0) { slot += num_slots; } @@ -717,7 +724,7 @@ void Interface::InvAbs(int s) { } void Interface::InvRel(int delta) { - InvAbs(slot + delta); + InvAbs(player_ctrl.GetPlayer().GetInventorySlot() + delta); } @@ -781,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); } @@ -866,6 +874,7 @@ std::map 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 }, };