summaryrefslogtreecommitdiff
path: root/src/collision.h
diff options
context:
space:
mode:
authorKahrl <kahrl@gmx.net>2012-03-19 04:25:09 +0100
committerPerttu Ahola <celeron55@gmail.com>2012-06-17 16:34:39 +0300
commit1575448b1a71dd029a8d135d2aff9096483a9953 (patch)
tree3e4c7a68abbcf630484615e6ee202f2f0d83ade2 /src/collision.h
parent9f031a67594162a53b07acbfbc65faf8c4938e99 (diff)
downloadminetest-1575448b1a71dd029a8d135d2aff9096483a9953.tar.gz
minetest-1575448b1a71dd029a8d135d2aff9096483a9953.tar.bz2
minetest-1575448b1a71dd029a8d135d2aff9096483a9953.zip
Custom boxy nodes (stairs, slabs) and collision changes
Diffstat (limited to 'src/collision.h')
-rw-r--r--src/collision.h36
1 files changed, 31 insertions, 5 deletions
diff --git a/src/collision.h b/src/collision.h
index a4eca0dd8..243c4b294 100644
--- a/src/collision.h
+++ b/src/collision.h
@@ -21,6 +21,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
#define COLLISION_HEADER
#include "irrlichttypes_bloated.h"
+#include <vector>
class Map;
class IGameDef;
@@ -29,22 +30,47 @@ struct collisionMoveResult
{
bool touching_ground;
bool collides;
+ bool collides_xz;
+ bool standing_on_unloaded;
collisionMoveResult():
touching_ground(false),
- collides(false)
+ collides(false),
+ collides_xz(false),
+ standing_on_unloaded(false)
{}
};
// 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);
+ f32 pos_max_d, const aabb3f &box_0,
+ f32 stepheight, f32 dtime,
+ v3f &pos_f, v3f &speed_f, v3f &accel_f);
+#if 0
+// This doesn't seem to work and isn't used
// 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);
+ f32 pos_max_d, const aabb3f &box_0,
+ f32 stepheight, f32 dtime,
+ v3f &pos_f, v3f &speed_f, v3f &accel_f);
+#endif
+
+// Helper function:
+// Checks for collision of a moving aabbox with a static aabbox
+// Returns -1 if no collision, 0 if X collision, 1 if Y collision, 2 if Z collision
+// dtime receives time until first collision, invalid if -1 is returned
+int axisAlignedCollision(
+ const aabb3f &staticbox, const aabb3f &movingbox,
+ const v3f &speed, f32 d, f32 &dtime);
+
+// Helper function:
+// Checks if moving the movingbox up by the given distance would hit a ceiling.
+bool wouldCollideWithCeiling(
+ const std::vector<aabb3f> &staticboxes,
+ const aabb3f &movingbox,
+ f32 y_increase, f32 d);
+
enum CollisionType
{