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

Function PolyCollideObject

physics/newstyle_fi.cpp:353–460  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

351#define MULTI_ADD_SPHERE_MAX 2.5f
352
353bool 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);

Callers 1

check_hit_objFunction · 0.85

Calls 5

SetNormalizedTimeObjFunction · 0.85
CollidePolygonModelFunction · 0.85
vm_NormalizeVectorFunction · 0.85
vm_AnglesToMatrixFunction · 0.50
vm_TransposeMatrixFunction · 0.50

Tested by

no test coverage detected