]> git.localhorst.tv Git - blank.git/blobdiff - src/world/EntityController.hpp
brought some order to the whole controller thing
[blank.git] / src / world / EntityController.hpp
index 8b14ca8a3d9606c687ba9c35da1107fa4682bb6d..526a3222fa4d985fc53094ab7e2c649376dfdd2e 100644 (file)
@@ -1,13 +1,14 @@
 #ifndef BLANK_WORLD_ENTITYCONTROLLER_HPP_
 #define BLANK_WORLD_ENTITYCONTROLLER_HPP_
 
+#include "EntityState.hpp"
+
 #include <glm/glm.hpp>
 
 
 namespace blank {
 
 class Entity;
-class EntityState;
 
 struct EntityController {
 
@@ -15,7 +16,25 @@ struct EntityController {
 
        virtual void Update(Entity &, float dt) = 0;
 
-       virtual glm::vec3 ControlForce(const EntityState &) const = 0;
+       virtual glm::vec3 ControlForce(const Entity &, const EntityState &) const = 0;
+
+
+       /// try to add as much of add to out so it doesn't exceed max
+       /// returns true if it's maxed out
+       static bool MaxOutForce(
+               glm::vec3 &out,
+               const glm::vec3 &add,
+               float max
+       ) noexcept;
+       /// give a force that makes state's velocity converge with given target velocity
+       /// over 1/n seconds
+       static inline glm::vec3 TargetVelocity(
+               const glm::vec3 &target,
+               const EntityState &state,
+               float n
+       ) noexcept {
+               return (target - state.velocity) * n;
+       }
 
 };