| 3323 | } |
| 3324 | |
| 3325 | void 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; |
no test coverage detected