]> git.localhorst.tv Git - blank.git/blobdiff - src/ui/ui.cpp
measure packet round trip time
[blank.git] / src / ui / ui.cpp
index 048aed1ac81559e21e2eee740d90a195bf5df22b..6a2e2ee167042720101bab5f7d1062d3c2cc610f 100644 (file)
@@ -40,7 +40,13 @@ PlayerController::PlayerController(World &world, Player &player)
 , dirty(true)
 , aim_world()
 , aim_entity() {
+       player.GetEntity().SetController(*this);
+}
 
+PlayerController::~PlayerController() {
+       if (&player.GetEntity().GetController() == this) {
+               player.GetEntity().UnsetController();
+       }
 }
 
 void PlayerController::SetMovement(const glm::vec3 &m) noexcept {
@@ -52,6 +58,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 +87,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 +111,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 +464,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 +609,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);