]> git.localhorst.tv Git - blank.git/blobdiff - src/world/World.hpp
block type prototypability and new types
[blank.git] / src / world / World.hpp
index 767f527a9034b97f352c66eda80f42d3f6569c0b..7936f98cfd6dcec82a639454d4f8cf9f02c33f84 100644 (file)
@@ -17,7 +17,6 @@ namespace blank {
 
 class BlockTypeRegistry;
 class EntityCollision;
-struct EntityDerivative;
 class Viewport;
 class WorldCollision;
 
@@ -61,6 +60,11 @@ public:
 
        /// check if given entity intersects with the world
        bool Intersection(const Entity &e, const EntityState &, std::vector<WorldCollision> &);
+       /// combine contacts into a single penetration vector
+       /// depth is given to point towards position of given state
+       static glm::vec3 CombinedInterpenetration(
+               const EntityState &,
+               const std::vector<WorldCollision> &) noexcept;
 
        /// check if given box (M * AABB) intersects with the world
        /// M is assumed to be calculated in reference to given chunk coords
@@ -95,8 +99,11 @@ public:
 
        // dt in ms
        void Update(int dt);
-       // dt in s
-       void Update(Entity &, float dt);
+
+       /// fix state so entity doesn't intersect with the solid world
+       void ResolveWorldCollision(const Entity &, EntityState &);
+       /// get force due to gravity at given location
+       glm::vec3 GravityAt(const ExactLocation &) const noexcept;
 
        void Render(Viewport &);
        void RenderDebug(Viewport &);
@@ -105,29 +112,6 @@ private:
        using EntityHandle = std::list<Entity>::iterator;
        EntityHandle RemoveEntity(EntityHandle &);
 
-       EntityDerivative CalculateStep(
-               const Entity &,
-               const EntityState &cur,
-               float dt,
-               const EntityDerivative &prev
-       );
-       glm::vec3 CalculateForce(
-               const Entity &,
-               const EntityState &cur
-       );
-       glm::vec3 ControlForce(
-               const Entity &,
-               const EntityState &
-       );
-       glm::vec3 CollisionForce(
-               const Entity &,
-               const EntityState &
-       );
-       glm::vec3 Gravity(
-               const Entity &,
-               const EntityState &
-       );
-
        /// calculate light direction and intensity at entity's location
        void GetLight(
                const Entity &entity,