X-Git-Url: http://git.localhorst.tv/?a=blobdiff_plain;f=src%2Fui%2Fui.cpp;h=dd113ca2b620d8fd763934459e9e4b1f088c15ce;hb=f0a20986c573c4df1eb1212333489252c4b30efa;hp=048aed1ac81559e21e2eee740d90a195bf5df22b;hpb=33b37e7242e4cbfa76e4a0d6e5bb54223b541162;p=blank.git diff --git a/src/ui/ui.cpp b/src/ui/ui.cpp index 048aed1..dd113ca 100644 --- a/src/ui/ui.cpp +++ b/src/ui/ui.cpp @@ -40,7 +40,7 @@ PlayerController::PlayerController(World &world, Player &player) , dirty(true) , aim_world() , aim_entity() { - + player.GetEntity().SetController(*this); } void PlayerController::SetMovement(const glm::vec3 &m) noexcept { @@ -52,6 +52,10 @@ void PlayerController::SetMovement(const glm::vec3 &m) noexcept { Invalidate(); } +glm::vec3 PlayerController::ControlForce(const Entity &e, const EntityState &s) const { + return TargetVelocity(rotateY(move_dir * e.MaxVelocity(), s.yaw), s, 5.0f); +} + void PlayerController::TurnHead(float dp, float dy) noexcept { player.GetEntity().TurnHead(dp, dy); } @@ -77,10 +81,7 @@ void PlayerController::Invalidate() noexcept { } void PlayerController::UpdatePlayer() noexcept { - constexpr float max_vel = 5.0f; // in m/s if (dirty) { - player.GetEntity().TargetVelocity(glm::rotateY(move_dir * max_vel, player.GetEntity().Yaw())); - Ray aim = player.Aim(); if (!world.Intersection(aim, glm::mat4(1.0f), player.GetEntity().ChunkCoords(), aim_world)) { aim_world = WorldCollision(); @@ -104,12 +105,12 @@ void PlayerController::UpdatePlayer() noexcept { DirectInput::DirectInput(World &world, Player &player, WorldManipulator &manip) : PlayerController(world, player) , manip(manip) -, place_timer(256) -, remove_timer(256) { +, place_timer(0.25f) +, remove_timer(0.25f) { } -void DirectInput::Update(int dt) { +void DirectInput::Update(Entity &, float dt) { Invalidate(); // world has changed in the meantime UpdatePlayer(); @@ -457,10 +458,20 @@ Interface::Interface( , fwd(0) , rev(0) , slot(0) -, num_slots(10) { +, num_slots(10) +, locked(false) { } +void Interface::Lock() { + fwd = glm::ivec3(0); + rev = glm::ivec3(0); + locked = true; +} + +void Interface::Unlock() { + locked = false; +} void Interface::HandlePress(const SDL_KeyboardEvent &event) { if (!config.input.keyboard) return; @@ -592,7 +603,7 @@ void Interface::HandleRelease(const SDL_KeyboardEvent &event) { } void Interface::Handle(const SDL_MouseMotionEvent &event) { - if (!config.input.mouse) return; + if (locked || !config.input.mouse) return; player_ctrl.TurnHead( event.yrel * config.input.pitch_sensitivity, event.xrel * config.input.yaw_sensitivity);