| 351 | #define MULTI_ADD_SPHERE_MAX 2.5f |
| 352 | |
| 353 | bool PolyCollideObject(object *obj) { |
| 354 | #ifndef NED_PHYSICS |
| 355 | float normalized_time[MAX_SUBOBJECTS]; |
| 356 | #endif |
| 357 | vector temp_pos = Original_pos = View_position; |
| 358 | matrix temp_orient = Original_orient = View_matrix; |
| 359 | bool f_use_big_sphere = false; |
| 360 | float addition; |
| 361 | |
| 362 | ASSERT(obj >= Objects && obj <= &Objects[Highest_object_index]); |
| 363 | |
| 364 | #ifndef NED_PHYSICS |
| 365 | if ((Game_mode & GM_MULTI) && !(Netgame.flags & NF_USE_ACC_WEAP) && Objects[fvi_moveobj].type == OBJ_WEAPON && |
| 366 | obj->type == OBJ_PLAYER) |
| 367 | f_use_big_sphere = true; |
| 368 | #endif |
| 369 | |
| 370 | fvi_do_orient = (Objects[fvi_moveobj].type == OBJ_WEAPON); |
| 371 | |
| 372 | #ifndef NED_PHYSICS |
| 373 | if (f_use_big_sphere) { |
| 374 | addition = fvi_query_ptr->rad; |
| 375 | |
| 376 | if (addition < MULTI_ADD_SPHERE_MIN) { |
| 377 | addition = MULTI_ADD_SPHERE_MIN; |
| 378 | if (Objects[fvi_moveobj].mtype.phys_info.flags & PF_NEVER_USE_BIG_SPHERE) |
| 379 | addition /= 2; |
| 380 | } else if (addition > MULTI_ADD_SPHERE_MAX) |
| 381 | addition = MULTI_ADD_SPHERE_MAX; |
| 382 | |
| 383 | fvi_query_ptr->rad += addition; |
| 384 | } |
| 385 | #endif |
| 386 | |
| 387 | if (fvi_do_orient) { |
| 388 | fvi_move_fvec = Objects[fvi_moveobj].orient.fvec; |
| 389 | fvi_move_uvec = Objects[fvi_moveobj].orient.uvec; |
| 390 | } |
| 391 | |
| 392 | Fvi_f_normal = false; |
| 393 | |
| 394 | View_position = obj->pos; |
| 395 | View_matrix = obj->orient; |
| 396 | |
| 397 | ASSERT(obj->flags & OF_POLYGON_OBJECT); |
| 398 | |
| 399 | #ifndef NED_PHYSICS |
| 400 | if (obj->type == OBJ_PLAYER || obj->type == OBJ_ROBOT || obj->type == OBJ_DEBRIS || obj->type == OBJ_DOOR || |
| 401 | obj->type == OBJ_BUILDING || obj->type == OBJ_CLUTTER || obj->type == OBJ_BUILDING) { |
| 402 | SetNormalizedTimeObj(obj, normalized_time); |
| 403 | CollidePolygonModel(&obj->pos, &obj->orient, obj->rtype.pobj_info.model_num, normalized_time, |
| 404 | obj->rtype.pobj_info.subobj_flags); |
| 405 | } else { |
| 406 | CollidePolygonModel(&obj->pos, &obj->orient, obj->rtype.pobj_info.model_num, nullptr, |
| 407 | obj->rtype.pobj_info.subobj_flags); |
| 408 | } |
| 409 | #else |
| 410 | CollidePolygonModel(&obj->pos, &obj->orient, obj->rtype.pobj_info.model_num, NULL, obj->rtype.pobj_info.subobj_flags); |
no test coverage detected