X-Git-Url: http://git.localhorst.tv/?a=blobdiff_plain;f=src%2Fui%2Fui.cpp;h=5f60d4401d056e116422b72941965217cd26edce;hb=242b87a5fb412f9006e4b7debc1408cf7ac83000;hp=c45b34b13213cf85dc6317e46e63fecae0abfa2d;hpb=4fbf5a3c1b0e530706023f5fc4be2f68d30ea645;p=blank.git diff --git a/src/ui/ui.cpp b/src/ui/ui.cpp index c45b34b..5f60d44 100644 --- a/src/ui/ui.cpp +++ b/src/ui/ui.cpp @@ -43,6 +43,7 @@ PlayerController::PlayerController(World &world, Player &player) , aim_world() , aim_entity() { player.GetEntity().SetController(*this); + player.GetEntity().GetSteering().SetAcceleration(5.0f); } PlayerController::~PlayerController() { @@ -60,16 +61,6 @@ void PlayerController::SetMovement(const glm::vec3 &m) noexcept { Invalidate(); } -glm::vec3 PlayerController::ControlForce(const Entity &e, const EntityState &s) const { - 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 { player.GetEntity().TurnHead(dp, dy); } @@ -97,10 +88,11 @@ 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)) { + Entity &entity = player.GetEntity(); + if (!world.Intersection(aim, entity.ChunkCoords(), aim_world)) { aim_world = WorldCollision(); } - if (!world.Intersection(aim, glm::mat4(1.0f), player.GetEntity(), aim_entity)) { + if (!world.Intersection(aim, entity, aim_entity)) { aim_entity = EntityCollision(); } if (aim_world && aim_entity) { @@ -111,6 +103,20 @@ void PlayerController::UpdatePlayer() noexcept { aim_world = WorldCollision(); } } + Steering &steering = entity.GetSteering(); + if (!iszero(move_dir)) { + // scale input by max velocity, apply yaw, and transform to world space + steering.SetTargetVelocity(glm::vec3( + glm::vec4(rotateY(move_dir * entity.MaxVelocity(), entity.Yaw()), 0.0f) + * transpose(entity.Transform()) + )); + steering.Enable(Steering::TARGET_VELOCITY); + steering.Disable(Steering::HALT); + } else { + // target velocity of 0 is the same as halt + steering.Enable(Steering::HALT); + steering.Disable(Steering::TARGET_VELOCITY); + } dirty = false; } } @@ -289,7 +295,7 @@ HUD::HUD(Environment &env, Config &config, const Player &player) buf.indices = std::vector({ 0, 1, 2, 3 }); - buf.colors.resize(4, { 10.0f, 10.0f, 10.0f, 1.0f }); + buf.colors.resize(4, { 255, 255, 255, 255 }); crosshair.Update(buf); } @@ -597,20 +603,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: @@ -780,7 +785,6 @@ void Keymap::LoadDefault() { Map(SDL_SCANCODE_0, INV_10); Map(SDL_SCANCODE_INSERT, SECONDARY); - Map(SDL_SCANCODE_RETURN, SECONDARY); Map(SDL_SCANCODE_MENU, TERTIARY); Map(SDL_SCANCODE_DELETE, PRIMARY); Map(SDL_SCANCODE_BACKSPACE, PRIMARY); @@ -789,6 +793,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); } @@ -874,6 +879,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 }, };