53 int contacters_size = 0;
54 std::vector<ActorInstanceID_t> collision_partners;
57 if (actor !=
m_actor && (ignorestate || actor->ar_update_physics) &&
60 collision_partners.push_back(actor->ar_instance_id);
62 contacters_size += is_linked ? actor->ar_num_contacters : actor->ar_num_contactable_nodes;
70 for (
int i = 0; i < actor->ar_num_collcabs; i++)
72 actor->ar_intra_collcabrate[i].rate = 0;
73 actor->ar_inter_collcabrate[i].rate = 0;
188 int newaxis = axis + 1;
195 int newindex = kdindex + kdindex + 1;
202 kdindex = newindex + 1;
212 kdindex = 2 * kdindex + 1;
229 int slice_size = end - begin;
232 int newindex=index+index+1;
268 median = begin + (slice_size / 2);
304 while (!(j < k || k < i))
332 for (
int i = start; i < median; ++i)
334 minex = std::min(
m_ref_list[i].point[axis], minex);
336 for (
int i = median+1; i < end; ++i)
338 maxex = std::max(maxex,
m_ref_list[i].point[axis]);
354 refelem.setPoint(actor->ar_nodes[
hit_pointid_list[refelem.pidrefid].nodenum].AbsPosition);
Game state manager and message-queue provider.
Ogre::AxisAlignedBox ar_bounding_box
standard bounding box (surrounds all nodes of an actor)
collcab_rate_t ar_intra_collcabrate[MAX_CABS]
ActorInstanceID_t ar_instance_id
Static attr; session-unique ID.
ActorPtrVec ar_linked_actors
BEWARE: Includes indirect links, see DetermineLinkedActors(); Other actors linked using 'hooks/ties/r...
collcab_rate_t ar_inter_collcabrate[MAX_CABS]
int ar_num_contacters
Total number of nodes which can selfcontact cabs.
bool ar_collision_relevant
Physics state;.
int ar_num_contactable_nodes
Total number of nodes which can contact ground or cabs.
ActorPtrVec & GetActors()
const ActorPtr & GetActorById(ActorInstanceID_t actor_id)
ActorManager * GetActorManager()
void update_structures_for_contacters(bool ignoreinternal)
std::vector< kdnode_t > m_kdtree
std::vector< refelem_t > m_ref_list
void partintwo(const int start, const int median, const int end, const int axis, float &minex, float &maxex)
void queryrec(int kdindex, int axis)
void query(const Ogre::Vector3 &vec1, const Ogre::Vector3 &vec2, const Ogre::Vector3 &vec3, const float enlargeBB)
void UpdateIntraPoint(bool contactables=false)
std::vector< PointidID_t > hit_list
std::vector< ActorInstanceID_t > m_collision_partners
IntraPoint: always just owning actor; InterPoint: all colliding actors.
void refresh_node_positions()
std::vector< pointid_t > hit_pointid_list
std::unordered_set< ActorInstanceID_t > hit_list_actorset
void UpdateInterPoint(bool ignorestate=false)
void build_kdtree_incr(int axis, int index)
GameContext * GetGameContext()
int ActorInstanceID_t
Unique sequentially generated ID of an actor in session. Use ActorManager::GetActorById()
int RefelemID_t
index to PointColDetector::m_ref_list, use RoR::REFELEMID_INVALID as empty value.
uint16_t NodeNum_t
Node position within Actor::ar_nodes; use RoR::NODENUM_INVALID as empty value.
static const RefelemID_t REFELEMID_INVALID
Ogre::Vector3 AbsPosition
absolute position in the world (shaky)
bool nd_contacter
Attr; User-defined.
bool nd_contactable
Attr; This node will be treated as contacter on inter truck collisions.