RigsofRods
Soft-body Physics Simulation
All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Modules Pages
Collisions.h
Go to the documentation of this file.
1 /*
2  This source file is part of Rigs of Rods
3  Copyright 2005-2012 Pierre-Michel Ricordel
4  Copyright 2007-2012 Thomas Fischer
5  Copyright 2009 Lefteris Stamatogiannakis
6  Copyright 2013-2022 Petr Ohlidal
7 
8  For more information, see http://www.rigsofrods.org/
9 
10  Rigs of Rods is free software: you can redistribute it and/or modify
11  it under the terms of the GNU General Public License version 3, as
12  published by the Free Software Foundation.
13 
14  Rigs of Rods is distributed in the hope that it will be useful,
15  but WITHOUT ANY WARRANTY; without even the implied warranty of
16  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17  GNU General Public License for more details.
18 
19  You should have received a copy of the GNU General Public License
20  along with Rigs of Rods. If not, see <http://www.gnu.org/licenses/>.
21 */
22 
23 #pragma once
24 
25 #include "Application.h"
26 #include "SimData.h" // for collision_box_t
27 
28 #include <mutex>
29 #include <Ogre.h>
30 #include <string>
31 
32 namespace RoR {
33 
36 
39 
41 {
42  std::string es_instance_name;
43  std::string es_box_name;
44  Ogre::Quaternion es_direction;
46  int es_cbox;
47  bool es_enabled;
48 };
49 
51 {
52  Ogre::Vector3 a;
53  Ogre::Vector3 b;
54  Ogre::Vector3 c;
55  Ogre::AxisAlignedBox aab;
56  Ogre::Matrix3 forward;
57  Ogre::Matrix3 reverse;
59  bool enabled;
60 };
61 typedef std::vector<collision_tri_t> CollisionTriVec;
62 
65 {
66  std::string mesh_name;
67  std::string source_name;
68  Ogre::Vector3 position = Ogre::Vector3::ZERO;
69  Ogre::Quaternion orientation = Ogre::Quaternion::IDENTITY;
70  Ogre::Vector3 scale = Ogre::Vector3::ZERO;
71  Ogre::AxisAlignedBox bounding_box;
75  int num_verts = 0;
76  int num_indices = 0;
77 };
78 typedef std::vector<collision_mesh_t> CollisionMeshVec;
79 
81 {
82 public:
83 
84  typedef std::vector<collision_box_t> CollisionBoxVec;
85 
87  {
89  FX_HARD, // hard surface: rubber burning and sparks
90  FX_DUSTY, // dusty surface (with dust colour)
91  FX_CLUMPY, // throws clumps (e.g. snow, grass) with colour
93  };
94 
95  Collisions(Ogre::Vector3 terrn_size);
96  ~Collisions();
97 
98 private:
99 
105  {
106  static const int ELEMENT_TRI_BASE_INDEX = 1000000; // Effectively a maximum number of collision boxes
107 
108  inline hash_coll_element_t(unsigned int cell_id_, int value): cell_id(cell_id_), element_index(value) {}
109 
110  inline bool IsCollisionBox() const { return element_index < ELEMENT_TRI_BASE_INDEX; }
111  inline bool IsCollisionTri() const { return element_index >= ELEMENT_TRI_BASE_INDEX; }
112 
113  unsigned int cell_id;
114 
118  };
119 
120  static const int LATEST_GROUND_MODEL_VERSION = 3;
121  static const int MAX_EVENT_SOURCE = 500;
122 
123  // this is a power of two, change with caution
124  static const int HASH_POWER = 20;
125  static const int HASH_SIZE = 1 << HASH_POWER;
126 
127  // terrain size is limited to 327km x 327km:
128  static const int CELL_SIZE = 2.0; // we divide through this
129  static const int MAXIMUM_CELL = 0x7FFF;
130 
131  // collision boxes pool
132  CollisionBoxVec m_collision_boxes; // Formerly MAX_COLLISION_BOXES = 5000
133  std::vector<collision_box_t*> m_last_called_cboxes; // Only used for character, actors have their own cache `Actor::m_active_eventboxes`
134 
135  // collision tris pool
136  CollisionTriVec m_collision_tris; // Formerly MAX_COLLISION_TRIS = 100000
137  CollisionMeshVec m_collision_meshes; // For diagnostics/editing only.
138 
139  Ogre::AxisAlignedBox m_collision_aab; // Tight bounding box around all collision meshes
140 
141  // collision hashtable
142  std::array<float, HASH_SIZE> hashtable_height;
143  std::vector<hash_coll_element_t> hashtable[HASH_SIZE];
144 
145  // ground models
146  std::map<Ogre::String, ground_model_t> ground_models;
147 
148  // event sources
151 
152  bool permitEvent(Actor* actor, CollisionEventFilter filter);
153 
156  unsigned int hashmask;
157 
158  const Ogre::Vector3 m_terrain_size;
159 
160  void hash_add(int cell_x, int cell_z, int value, float h);
161  int hash_find(int cell_x, int cell_z);
162  unsigned int hashfunc(unsigned int cellid);
163  void parseGroundConfig(Ogre::ConfigFile* cfg, Ogre::String groundModel = "");
164 
165  Ogre::Vector3 calcCollidedSide(const Ogre::Vector3& pos, const Ogre::Vector3& lo, const Ogre::Vector3& hi);
166 
167 public:
168 
169  // how many elements per cell? power of 2 minus 2 is better
170  static const int CELL_BLOCKSIZE = 126;
171 
172  bool forcecam;
173  Ogre::Vector3 forcecampos;
175 
176  Ogre::Vector3 getPosition(const Ogre::String& inst, const Ogre::String& box);
177  Ogre::Quaternion getDirection(const Ogre::String& inst, const Ogre::String& box);
178  collision_box_t* getBox(const Ogre::String& inst, const Ogre::String& box);
179  const int GetCellSize() const { return CELL_SIZE; }
180 
181  std::pair<bool, Ogre::Real> intersectsTris(Ogre::Ray ray);
182 
188  std::pair<bool, Ogre::Real> intersectsTerrain(Ogre::Ray ray);
189 
190  float getSurfaceHeight(float x, float z);
191  float getSurfaceHeightBelow(float x, float z, float height);
192  bool collisionCorrect(Ogre::Vector3* refpos, bool envokeScriptCallbacks = true);
193  bool groundCollision(node_t* node, float dt);
194  bool isInside(Ogre::Vector3 pos, const Ogre::String& inst, const Ogre::String& box, float border = 0);
195  bool isInside(Ogre::Vector3 pos, collision_box_t* cbox, float border = 0);
196  bool nodeCollision(node_t* node, float dt);
197  void envokeScriptCallback(collision_box_t* cbox, node_t* node = 0); // Only invoke on main thread! Oterwise use `MSG_SIM_SCRIPT_CALLBACK_QUEUED`
198  void findPotentialEventBoxes(Actor* actor, CollisionBoxPtrVec& out_boxes);
199 
200  void finishLoadingTerrain();
201 
202  int addCollisionBox(bool rotating, bool virt, Ogre::Vector3 pos, Ogre::Vector3 rot, Ogre::Vector3 l, Ogre::Vector3 h, Ogre::Vector3 sr, const Ogre::String& eventname, const Ogre::String& instancename, const Ogre::String& reverb_preset_name, bool forcecam, Ogre::Vector3 campos, Ogre::Vector3 sc = Ogre::Vector3::UNIT_SCALE, Ogre::Vector3 dr = Ogre::Vector3::ZERO, CollisionEventFilter event_filter = EVENT_ALL, int scripthandler = -1);
203  void addCollisionMesh(Ogre::String const& srcname, Ogre::String const& meshname, Ogre::Vector3 const& pos, Ogre::Quaternion const& q, Ogre::Vector3 const& scale, ground_model_t* gm = 0, std::vector<int>* collTris = 0);
204  void registerCollisionMesh(Ogre::String const& srcname, Ogre::String const& meshname, Ogre::Vector3 const& pos, Ogre::AxisAlignedBox bounding_box, ground_model_t* gm, int ctri_start, int ctri_count);
205  int addCollisionTri(Ogre::Vector3 p1, Ogre::Vector3 p2, Ogre::Vector3 p3, ground_model_t* gm);
206  void createCollisionDebugVisualization(Ogre::SceneNode* root_node, Ogre::AxisAlignedBox const& area_limit, std::vector<Ogre::SceneNode*>& out_nodes);
207  void removeCollisionBox(int number);
208  void removeCollisionTri(int number);
210 
211  Ogre::AxisAlignedBox getCollisionAAB() { return m_collision_aab; };
212 
213  // ground models things
214  int loadDefaultModels();
215  int loadGroundModelsConfigFile(Ogre::String filename);
216  std::map<Ogre::String, ground_model_t>* getGroundModels() { return &ground_models; };
217  void setupLandUse(const char* configfile);
218  ground_model_t* getGroundModelByString(const Ogre::String name);
219 
220  void getMeshInformation(Ogre::Mesh* mesh, size_t& vertex_count, Ogre::Vector3* & vertices,
221  size_t& index_count, unsigned* & indices,
222  const Ogre::Vector3& position = Ogre::Vector3::ZERO,
223  const Ogre::Quaternion& orient = Ogre::Quaternion::IDENTITY, const Ogre::Vector3& scale = Ogre::Vector3::UNIT_SCALE);
224 
229 };
230 
231 Ogre::Vector3 primitiveCollision(node_t* node, Ogre::Vector3 velocity, float mass, Ogre::Vector3 normal, float dt, ground_model_t* gm, float penetration = 0);
232 
235 
236 } // namespace RoR
RoR::Collisions::m_terrain_size
const Ogre::Vector3 m_terrain_size
Definition: Collisions.h:158
ROR_ASSERT
#define ROR_ASSERT(_EXPR)
Definition: Application.h:40
RoR::Collisions::FX_PARTICLE
@ FX_PARTICLE
Definition: Collisions.h:92
RoR::Collisions::parseGroundConfig
void parseGroundConfig(Ogre::ConfigFile *cfg, Ogre::String groundModel="")
Definition: Collisions.cpp:206
RoR::Collisions::landuse
Landusemap * landuse
Definition: Collisions.h:154
RoR::Actor
Softbody object; can be anything from soda can to a space shuttle Constructed from a truck definition...
Definition: Actor.h:50
RoR::primitiveCollision
Ogre::Vector3 primitiveCollision(node_t *node, Ogre::Vector3 velocity, float mass, Ogre::Vector3 normal, float dt, ground_model_t *gm, float penetration=0)
Definition: Collisions.cpp:1261
RoR::Collisions::hash_coll_element_t
Definition: Collisions.h:104
RoR::collision_tri_t::enabled
bool enabled
Definition: Collisions.h:59
RoR::Collisions::FX_CLUMPY
@ FX_CLUMPY
Definition: Collisions.h:91
RoR::Collisions::MAXIMUM_CELL
static const int MAXIMUM_CELL
Definition: Collisions.h:129
RoR::Collisions::hash_coll_element_t::IsCollisionBox
bool IsCollisionBox() const
Definition: Collisions.h:110
RoR::collision_tri_t::reverse
Ogre::Matrix3 reverse
Definition: Collisions.h:57
RoR::collision_tri_t
Definition: Collisions.h:50
RoR::Collisions
Definition: Collisions.h:80
RoR::eventsource_t::es_instance_name
std::string es_instance_name
Specified by user when calling "GameScript::spawnObject()".
Definition: Collisions.h:42
z
float z
Definition: (ValueTypes) quaternion.h:7
RoR::collision_mesh_t
Records which collision triangles belong to which mesh.
Definition: Collisions.h:64
RoR::Collisions::getSurfaceHeightBelow
float getSurfaceHeightBelow(float x, float z, float height)
Definition: Collisions.cpp:709
RoR::eventsource_t
< Scripting
Definition: Collisions.h:40
RoR::Collisions::GetCellSize
const int GetCellSize() const
Definition: Collisions.h:179
RoR::CollisionEventFilter
CollisionEventFilter
Specified in terrain object (.ODEF) file, syntax: 'event <type> <filter>'.
Definition: SimData.h:46
RoR::Collisions::defaultgm
ground_model_t * defaultgm
Definition: Collisions.h:174
RoR::Collisions::free_eventsource
int free_eventsource
Definition: Collisions.h:150
RoR::Collisions::groundCollision
bool groundCollision(node_t *node, float dt)
Definition: Collisions.cpp:1245
RoR::Collisions::clearEventCache
void clearEventCache()
Definition: Collisions.h:209
RoR::Collisions::findPotentialEventBoxes
void findPotentialEventBoxes(Actor *actor, CollisionBoxPtrVec &out_boxes)
Definition: Collisions.cpp:1121
RoR::Collisions::HASH_POWER
static const int HASH_POWER
Definition: Collisions.h:124
RoR::Collisions::collision_version
int collision_version
Definition: Collisions.h:155
RoR::collision_mesh_t::bounding_box
Ogre::AxisAlignedBox bounding_box
Definition: Collisions.h:71
RoR::Collisions::hash_coll_element_t::element_index
int element_index
Values below ELEMENT_TRI_BASE_INDEX are collision box indices (Collisions::m_collision_boxes),...
Definition: Collisions.h:117
RoR::Collisions::getPosition
Ogre::Vector3 getPosition(const Ogre::String &inst, const Ogre::String &box)
Definition: Collisions.cpp:1166
RoR::Collisions::CELL_BLOCKSIZE
static const int CELL_BLOCKSIZE
Definition: Collisions.h:170
RoR::Collisions::getCollisionTriangles
CollisionTriVec const & getCollisionTriangles() const
Definition: Collisions.h:228
RoR::CollisionBoxPtrVec
std::vector< collision_box_t * > CollisionBoxPtrVec
Definition: SimData.h:700
RoR::collision_mesh_t::scale
Ogre::Vector3 scale
Definition: Collisions.h:70
RoR::Collisions::FX_DUSTY
@ FX_DUSTY
Definition: Collisions.h:90
RoR::Collisions::registerCollisionMesh
void registerCollisionMesh(Ogre::String const &srcname, Ogre::String const &meshname, Ogre::Vector3 const &pos, Ogre::AxisAlignedBox bounding_box, ground_model_t *gm, int ctri_start, int ctri_count)
Mark already generated collision tris as belonging to (virtual) mesh.
Definition: Collisions.cpp:1488
RoR::Collisions::addCollisionMesh
void addCollisionMesh(Ogre::String const &srcname, Ogre::String const &meshname, Ogre::Vector3 const &pos, Ogre::Quaternion const &q, Ogre::Vector3 const &scale, ground_model_t *gm=0, std::vector< int > *collTris=0)
generate collision tris from existing mesh resource
Definition: Collisions.cpp:1441
RoR::collision_tri_t::gm
ground_model_t * gm
Definition: Collisions.h:58
RoR::Collisions::collisionCorrect
bool collisionCorrect(Ogre::Vector3 *refpos, bool envokeScriptCallbacks=true)
Definition: Collisions.cpp:799
RoR::Collisions::hashtable_height
std::array< float, HASH_SIZE > hashtable_height
Definition: Collisions.h:142
RoR::collision_box_t
Definition: SimData.h:677
RoR::Collisions::FX_NONE
@ FX_NONE
Definition: Collisions.h:88
RoR::Collisions::calcCollidedSide
Ogre::Vector3 calcCollidedSide(const Ogre::Vector3 &pos, const Ogre::Vector3 &lo, const Ogre::Vector3 &hi)
Definition: Collisions.cpp:295
RoR::Collisions::removeCollisionTri
void removeCollisionTri(int number)
Definition: Collisions.cpp:356
RoR::Collisions::hash_find
int hash_find(int cell_x, int cell_z)
Definition: Collisions.cpp:393
RoR::Collisions::loadDefaultModels
int loadDefaultModels()
Definition: Collisions.cpp:145
RoR::collision_tri_t::a
Ogre::Vector3 a
Definition: Collisions.h:52
RoR::Collisions::loadGroundModelsConfigFile
int loadGroundModelsConfigFile(Ogre::String filename)
Definition: Collisions.cpp:150
RoR::collision_mesh_t::collision_tri_count
int collision_tri_count
Definition: Collisions.h:74
RoR::Collisions::addCollisionBox
int addCollisionBox(bool rotating, bool virt, Ogre::Vector3 pos, Ogre::Vector3 rot, Ogre::Vector3 l, Ogre::Vector3 h, Ogre::Vector3 sr, const Ogre::String &eventname, const Ogre::String &instancename, const Ogre::String &reverb_preset_name, bool forcecam, Ogre::Vector3 campos, Ogre::Vector3 sc=Ogre::Vector3::UNIT_SCALE, Ogre::Vector3 dr=Ogre::Vector3::ZERO, CollisionEventFilter event_filter=EVENT_ALL, int scripthandler=-1)
Definition: Collisions.cpp:401
RoR::Collisions::intersectsTris
std::pair< bool, Ogre::Real > intersectsTris(Ogre::Ray ray)
Definition: Collisions.cpp:634
RoR::collision_tri_t::forward
Ogre::Matrix3 forward
Definition: Collisions.h:56
RoR::collision_mesh_t::collision_tri_start
int collision_tri_start
Definition: Collisions.h:73
RoR::collision_mesh_t::num_indices
int num_indices
Definition: Collisions.h:76
RoR::Collisions::removeCollisionBox
void removeCollisionBox(int number)
Definition: Collisions.cpp:343
RoR::Collisions::getGroundModelByString
ground_model_t * getGroundModelByString(const Ogre::String name)
Definition: Collisions.cpp:365
RoR::eventsource_t::es_box_name
std::string es_box_name
Specified in ODEF file as "event".
Definition: Collisions.h:43
SimData.h
Core data structures for simulation; Everything affected by by either physics, network or user intera...
RoR::Collisions::getCollisionAAB
Ogre::AxisAlignedBox getCollisionAAB()
Definition: Collisions.h:211
RoR::Collisions::envokeScriptCallback
void envokeScriptCallback(collision_box_t *cbox, node_t *node=0)
Definition: Collisions.cpp:608
RoR::Collisions::getBox
collision_box_t * getBox(const Ogre::String &inst, const Ogre::String &box)
Definition: Collisions.cpp:1190
RoR::Collisions::forcecampos
Ogre::Vector3 forcecampos
Definition: Collisions.h:173
RoR::Collisions::hashmask
unsigned int hashmask
Definition: Collisions.h:156
RoR::collision_mesh_t::ground_model
ground_model_t * ground_model
Definition: Collisions.h:72
RoR::eventsource_t::es_cbox
int es_cbox
Collision box ID.
Definition: Collisions.h:46
RoR::Collisions::HASH_SIZE
static const int HASH_SIZE
Definition: Collisions.h:125
RoR::Collisions::CollisionBoxVec
std::vector< collision_box_t > CollisionBoxVec
Definition: Collisions.h:84
RoR::Collisions::ground_models
std::map< Ogre::String, ground_model_t > ground_models
Definition: Collisions.h:146
RoR::Collisions::addCollisionTri
int addCollisionTri(Ogre::Vector3 p1, Ogre::Vector3 p2, Ogre::Vector3 p3, ground_model_t *gm)
Definition: Collisions.cpp:557
RoR::Collisions::hashtable
std::vector< hash_coll_element_t > hashtable[HASH_SIZE]
Definition: Collisions.h:143
RoR::collision_tri_t::aab
Ogre::AxisAlignedBox aab
Definition: Collisions.h:55
Application.h
Central state/object manager and communications hub.
RoR::node_t
Physics: A vertex in the softbody structure.
Definition: SimData.h:259
RoR::Collisions::m_collision_tris
CollisionTriVec m_collision_tris
Definition: Collisions.h:136
RoR::Collisions::SurfaceType
SurfaceType
Definition: Collisions.h:86
RoR::eventsource_t::es_script_handler
int es_script_handler
AngelScript function ID.
Definition: Collisions.h:45
RoR::Collisions::getSurfaceHeight
float getSurfaceHeight(float x, float z)
Definition: Collisions.cpp:704
RoR::CollisionTriVec
std::vector< collision_tri_t > CollisionTriVec
Definition: Collisions.h:61
RoR::Collisions::Collisions
Collisions(Ogre::Vector3 terrn_size)
Definition: Collisions.cpp:118
RoR::CollisionMeshVec
std::vector< collision_mesh_t > CollisionMeshVec
Definition: Collisions.h:78
RoR::Collisions::forcecam
bool forcecam
Definition: Collisions.h:172
RoR::Collisions::FX_HARD
@ FX_HARD
Definition: Collisions.h:89
RoR::Collisions::nodeCollision
bool nodeCollision(node_t *node, float dt)
Definition: Collisions.cpp:959
RoR::Collisions::getMeshInformation
void getMeshInformation(Ogre::Mesh *mesh, size_t &vertex_count, Ogre::Vector3 *&vertices, size_t &index_count, unsigned *&indices, const Ogre::Vector3 &position=Ogre::Vector3::ZERO, const Ogre::Quaternion &orient=Ogre::Quaternion::IDENTITY, const Ogre::Vector3 &scale=Ogre::Vector3::UNIT_SCALE)
Definition: Collisions.cpp:1502
RoR::Collisions::createCollisionDebugVisualization
void createCollisionDebugVisualization(Ogre::SceneNode *root_node, Ogre::AxisAlignedBox const &area_limit, std::vector< Ogre::SceneNode * > &out_nodes)
Definition: Collisions.cpp:1347
RoR::Collisions::m_collision_meshes
CollisionMeshVec m_collision_meshes
Definition: Collisions.h:137
RoR::Collisions::getCollisionMeshes
CollisionMeshVec const & getCollisionMeshes() const
Definition: Collisions.h:227
RoR::Collisions::MAX_EVENT_SOURCE
static const int MAX_EVENT_SOURCE
Definition: Collisions.h:121
RoR::Collisions::LATEST_GROUND_MODEL_VERSION
static const int LATEST_GROUND_MODEL_VERSION
Definition: Collisions.h:120
RoR::collision_mesh_t::num_verts
int num_verts
Definition: Collisions.h:75
RoR::Collisions::defaultgroundgm
ground_model_t * defaultgroundgm
Definition: Collisions.h:174
RoR::Collisions::hash_coll_element_t::ELEMENT_TRI_BASE_INDEX
static const int ELEMENT_TRI_BASE_INDEX
Definition: Collisions.h:106
RoR::Collisions::permitEvent
bool permitEvent(Actor *actor, CollisionEventFilter filter)
Definition: Collisions.cpp:939
RoR::Collisions::getDirection
Ogre::Quaternion getDirection(const Ogre::String &inst, const Ogre::String &box)
Definition: Collisions.cpp:1178
RoR::Collisions::getEventSource
eventsource_t & getEventSource(int pos)
Definition: Collisions.h:225
RoR::ground_model_t
Surface friction properties.
Definition: SimData.h:703
RoR::Collisions::getGroundModels
std::map< Ogre::String, ground_model_t > * getGroundModels()
Definition: Collisions.h:216
RoR::Collisions::m_last_called_cboxes
std::vector< collision_box_t * > m_last_called_cboxes
Definition: Collisions.h:133
RoR::Collisions::setupLandUse
void setupLandUse(const char *configfile)
Definition: Collisions.cpp:333
RoR::Collisions::isInside
bool isInside(Ogre::Vector3 pos, const Ogre::String &inst, const Ogre::String &box, float border=0)
Definition: Collisions.cpp:1202
RoR::EVENT_ALL
@ EVENT_ALL
(default) ~ Triggered by any node on any vehicle
Definition: SimData.h:49
RoR::collision_tri_t::b
Ogre::Vector3 b
Definition: Collisions.h:53
RoR::Collisions::hash_add
void hash_add(int cell_x, int cell_z, int value, float h)
Definition: Collisions.cpp:384
RoR::Collisions::m_collision_aab
Ogre::AxisAlignedBox m_collision_aab
Definition: Collisions.h:139
RoR::eventsource_t::es_direction
Ogre::Quaternion es_direction
Definition: Collisions.h:44
RoR::collision_mesh_t::orientation
Ogre::Quaternion orientation
Definition: Collisions.h:69
RoR::Collisions::finishLoadingTerrain
void finishLoadingTerrain()
Definition: Collisions.cpp:1618
RoR::Collisions::hashfunc
unsigned int hashfunc(unsigned int cellid)
Returns index to 'hashtable'.
Definition: Collisions.cpp:373
RoR::collision_mesh_t::source_name
std::string source_name
Definition: Collisions.h:67
RoR::Collisions::getCollisionBoxes
CollisionBoxVec const & getCollisionBoxes() const
Definition: Collisions.h:226
RoR::eventsource_t::es_enabled
bool es_enabled
Definition: Collisions.h:47
RoR::Collisions::hash_coll_element_t::hash_coll_element_t
hash_coll_element_t(unsigned int cell_id_, int value)
Definition: Collisions.h:108
RoR::Collisions::hash_coll_element_t::IsCollisionTri
bool IsCollisionTri() const
Definition: Collisions.h:111
RoR::Collisions::hash_coll_element_t::cell_id
unsigned int cell_id
Definition: Collisions.h:113
RoR::collision_tri_t::c
Ogre::Vector3 c
Definition: Collisions.h:54
RoR
Definition: AppContext.h:36
RoR::Collisions::CELL_SIZE
static const int CELL_SIZE
Definition: Collisions.h:128
x
float x
Definition: (ValueTypes) quaternion.h:5
RoR::Collisions::intersectsTerrain
std::pair< bool, Ogre::Real > intersectsTerrain(Ogre::Ray ray)
Checks whether a Ray intersects the terrain.
Definition: Collisions.cpp:677
RoR::Collisions::eventsources
eventsource_t eventsources[MAX_EVENT_SOURCE]
Definition: Collisions.h:149
RoR::Collisions::m_collision_boxes
CollisionBoxVec m_collision_boxes
Definition: Collisions.h:132
RoR::Landusemap
Definition: Landusemap.h:33
RoR::collision_mesh_t::position
Ogre::Vector3 position
Definition: Collisions.h:68
RoR::collision_mesh_t::mesh_name
std::string mesh_name
Definition: Collisions.h:66
RoR::Collisions::~Collisions
~Collisions()
Definition: Collisions.cpp:140