MCPcopy Create free account
hub / github.com/DescentDevelopers/Descent3 / check_hit_obj

Function check_hit_obj

physics/findintersection.cpp:3325–3649  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

3323}
3324
3325void check_hit_obj(int objnum) {
3326 vector hit_point;
3327 float cur_dist;
3328 const object *obj = &Objects[objnum];
3329 bool f_x = false;
3330 int collision_type;
3331 int m_obj_index = fvi_query_ptr->thisobjnum;
3332 object *m_obj = &Objects[m_obj_index];
3333
3334 if (!(fvi_query_ptr->flags & FQ_CHECK_OBJS) && (obj->type != OBJ_ROOM))
3335 return;
3336 if ((fvi_query_ptr->flags & (FQ_IGNORE_EXTERNAL_ROOMS)) && (obj->type == OBJ_ROOM))
3337 return;
3338
3339 if (obj->flags & OF_NO_OBJECT_COLLISIONS)
3340 return;
3341
3342 if (!(obj->flags & OF_DEAD)) {
3343 if (m_obj_index != objnum) {
3344 if (!((m_obj_index > -1) && ((collision_type = CollisionResult[m_obj->type][obj->type]) == RESULT_NOTHING) &&
3345 (CollisionResult[obj->type][m_obj->type] == RESULT_NOTHING))) {
3346 // Account for ray casting
3347 if (m_obj_index <= -1 && (CollisionRayResult[obj->type] == RESULT_NOTHING))
3348 return;
3349
3350 if (object_movement_AABB(&Objects[objnum])) {
3351#ifndef NED_PHYSICS
3352#ifdef _DEBUG
3353 if (Physics_player_verbose) {
3354 if (OBJNUM(Player_object) == objnum && m_obj_index != -1) {
3355 mprintf(0, "FVI: %d AABB with player\n", m_obj_index);
3356 } else if (Player_object == m_obj) {
3357 mprintf(0, "FVI: Player AABB with %d\n", objnum);
3358 }
3359 }
3360#endif
3361#endif
3362
3363 if (fvi_query_ptr->ignore_obj_list == nullptr || !obj_in_list(objnum, fvi_query_ptr->ignore_obj_list)) {
3364 if (!ObjectsAreRelated(objnum, m_obj_index)) {
3365
3366 if (m_obj_index < 0) {
3367 switch (obj->type) {
3368 case OBJ_ROOM:
3369 if (fvi_query_ptr->flags & FQ_EXTERNAL_ROOMS_AS_SPHERE)
3370 collision_type = RESULT_CHECK_SPHERE_SPHERE;
3371 else
3372 collision_type = RESULT_CHECK_SPHERE_ROOM;
3373 break;
3374 case OBJ_PLAYER:
3375 if (fvi_query_ptr->flags & FQ_PLAYERS_AS_SPHERE)
3376 collision_type = RESULT_CHECK_SPHERE_SPHERE;
3377 else
3378 collision_type = RESULT_CHECK_SPHERE_POLY;
3379 break;
3380 case OBJ_ROBOT:
3381 if (fvi_query_ptr->flags & FQ_ROBOTS_AS_SPHERE)
3382 collision_type = RESULT_CHECK_SPHERE_SPHERE;

Callers 3

check_terrain_nodeFunction · 0.85
do_fvi_terrainFunction · 0.85
fvi_rooms_objsFunction · 0.85

Calls 7

object_movement_AABBFunction · 0.85
obj_in_listFunction · 0.85
ObjectsAreRelatedFunction · 0.85
fvi_roomFunction · 0.85
PolyCollideObjectFunction · 0.85
compute_movement_AABBFunction · 0.85
check_vector_to_objectFunction · 0.85

Tested by

no test coverage detected