Luanti 5.15.0-dev
 
Loading...
Searching...
No Matches
collision.h
Go to the documentation of this file.
1// Luanti
2// SPDX-License-Identifier: LGPL-2.1-or-later
3// Copyright (C) 2013 celeron55, Perttu Ahola <celeron55@gmail.com>
4
5#pragma once
6
8#include <vector>
9
10class IGameDef;
11class Environment;
12class ActiveObject;
13
19
27
29{
30 CollisionInfo() = default;
31
34 v3s16 node_p = v3s16(-32768,-32768,-32768); // COLLISION_NODE
35 ActiveObject *object = nullptr; // COLLISION_OBJECT
39};
40
42{
44
45 bool collides = false;
46 bool touching_ground = false;
47 bool standing_on_object = false;
48 std::vector<CollisionInfo> collisions;
49};
50
54
57 const aabb3f &box_0,
58 f32 stepheight, f32 dtime,
59 v3f *pos_f, v3f *speed_f,
60 v3f accel_f, ActiveObject *self=NULL,
61 bool collide_with_objects=true);
62
69 const aabb3f &box_0, const v3f &pos_f, ActiveObject *self = nullptr,
70 bool collide_with_objects = true);
71
72// Helper function:
73// Checks for collision of a moving aabbox with a static aabbox
74// Returns -1 if no collision, 0 if X collision, 1 if Y collision, 2 if Z collision
75// dtime receives time until first collision, invalid if -1 is returned
77 const aabb3f &staticbox, const aabb3f &movingbox,
78 v3f speed, f32 *dtime);
79
80// Helper function:
81// Checks if moving the movingbox up by the given distance would hit a ceiling.
83 const std::vector<aabb3f> &staticboxes,
84 const aabb3f &movingbox,
85 f32 y_increase, f32 d);
Definition activeobject.h:149
Definition environment.h:31
Definition gamedef.h:26
CollisionAxis
Definition collision.h:21
@ COLLISION_AXIS_X
Definition collision.h:23
@ COLLISION_AXIS_Y
Definition collision.h:24
@ COLLISION_AXIS_Z
Definition collision.h:25
@ COLLISION_AXIS_NONE
Definition collision.h:22
bool g_collision_problems_encountered
Status if any problems were ever encountered during collision detection.
Definition collision.cpp:26
bool collision_check_intersection(Environment *env, IGameDef *gamedef, const aabb3f &box_0, const v3f &pos_f, ActiveObject *self=nullptr, bool collide_with_objects=true)
A simpler version of "collisionMoveSimple" that only checks whether a collision occurs at the given p...
Definition collision.cpp:643
collisionMoveResult collisionMoveSimple(Environment *env, IGameDef *gamedef, const aabb3f &box_0, f32 stepheight, f32 dtime, v3f *pos_f, v3f *speed_f, v3f accel_f, ActiveObject *self=NULL, bool collide_with_objects=true)
Definition collision.cpp:376
bool wouldCollideWithCeiling(const std::vector< aabb3f > &staticboxes, const aabb3f &movingbox, f32 y_increase, f32 d)
CollisionAxis axisAlignedCollision(const aabb3f &staticbox, const aabb3f &movingbox, v3f speed, f32 *dtime)
Definition collision.cpp:91
CollisionType
Definition collision.h:15
@ COLLISION_OBJECT
Definition collision.h:17
@ COLLISION_NODE
Definition collision.h:16
core::aabbox3d< f32 > aabb3f
Definition irr_aabb3d.h:11
core::vector3d< s16 > v3s16
Definition irr_v3d.h:13
core::vector3df v3f
Definition irr_v3d.h:11
Definition collision.h:29
CollisionInfo()=default
CollisionAxis axis
Definition collision.h:33
CollisionType type
Definition collision.h:32
v3f old_speed
Definition collision.h:37
v3s16 node_p
Definition collision.h:34
v3f new_pos
Definition collision.h:36
v3f new_speed
Definition collision.h:38
Definition collision.h:42
std::vector< CollisionInfo > collisions
Definition collision.h:48
bool collides
Definition collision.h:45
collisionMoveResult()=default
bool touching_ground
Definition collision.h:46
bool standing_on_object
Definition collision.h:47