]> git.localhorst.tv Git - blank.git/blobdiff - src/ui/ui.cpp
brought some order to the whole controller thing
[blank.git] / src / ui / ui.cpp
index 5a39fa8109ebfc810ed1a333c0d089d407db7706..dd113ca2b620d8fd763934459e9e4b1f088c15ce 100644 (file)
@@ -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();