Handle ActiveBlockModifier intervals properly, down to 1s
[oweals/minetest.git] / src / collision.h
index 17243140148a8686e1a1fe50974935816979eb6c..e823a08fefb978825e4fe76f24508a818d398163 100644 (file)
@@ -23,21 +23,39 @@ with this program; if not, write to the Free Software Foundation, Inc.,
 #include "common_irrlicht.h"
 
 class Map;
+class IGameDef;
 
 struct collisionMoveResult
 {
        bool touching_ground;
+       bool collides;
 
        collisionMoveResult():
-               touching_ground(false)
+               touching_ground(false),
+               collides(false)
        {}
 };
 
-collisionMoveResult collisionMoveSimple(Map *map, f32 pos_max_d,
-               const core::aabbox3d<f32> &box_0,
+// Moves using a single iteration; speed should not exceed pos_max_d/dtime
+collisionMoveResult collisionMoveSimple(Map *map, IGameDef *gamedef,
+               f32 pos_max_d, const core::aabbox3d<f32> &box_0,
                f32 dtime, v3f &pos_f, v3f &speed_f);
-//{return collisionMoveResult();}
 
+// Moves using as many iterations as needed
+collisionMoveResult collisionMovePrecise(Map *map, IGameDef *gamedef,
+               f32 pos_max_d, const core::aabbox3d<f32> &box_0,
+               f32 dtime, v3f &pos_f, v3f &speed_f);
+
+enum CollisionType
+{
+       COLLISION_FALL
+};
+
+struct CollisionInfo
+{
+       CollisionType t;
+       f32 speed;
+};
 
 #endif