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

Function collide_two_objects

physics/collide.cpp:2395–2541  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

2393}
2394
2395void collide_two_objects(object *A, object *B, vector *collision_point, vector *collision_normal, fvi_info *hit_info) {
2396 int collision_type;
2397 int a_num = A - Objects;
2398 int b_num = B - Objects;
2399 uint8_t a_good = 0, b_good = 0;
2400 uint8_t a_hittime_good = 1, b_hittime_good = 1;
2401
2402 // Only do omega particle collisions if specifically allowed
2403 extern bool Enable_omega_collions;
2404 if (((A->type == OBJ_WEAPON) && (A->id == OMEGA_INDEX)) || ((B->type == OBJ_WEAPON) && (B->id == OMEGA_INDEX)))
2405 if (!Enable_omega_collions)
2406 return;
2407
2408 ASSERT(CollisionResult[A->type][B->type] != RESULT_NOTHING);
2409
2410 collision_type = COLLISION_OF(A->type, B->type);
2411
2412 check_lg_inform(A, B);
2413 check_lg_inform(B, A);
2414
2415 // mprintf( (0, "Object %d of type %d collided with object %d of type %d\n", A-Objects,A->type, B-Objects, B->type ));
2416
2417 // COLLISION SCRIPT HOOK
2418 if (Game_mode & GM_MULTI) {
2419 ASSERT(!(A->flags & OF_DEAD));
2420 ASSERT(!(B->flags & OF_DEAD));
2421
2422 // Make sure we have good scripts to call
2423 if (A->type == OBJ_PLAYER || A->type == OBJ_ROBOT || A->type == OBJ_POWERUP || A->type == OBJ_WEAPON ||
2424 A->type == OBJ_BUILDING || A->type == OBJ_DOOR || A->type == OBJ_CLUTTER)
2425 a_good = 1;
2426 if (B->type == OBJ_PLAYER || B->type == OBJ_ROBOT || B->type == OBJ_POWERUP || B->type == OBJ_WEAPON ||
2427 B->type == OBJ_BUILDING || B->type == OBJ_DOOR || B->type == OBJ_CLUTTER)
2428 b_good = 1;
2429
2430 if (A->type == OBJ_PLAYER && (Players[A->id].flags & (PLAYER_FLAGS_DYING | PLAYER_FLAGS_DEAD)))
2431 a_good = 0;
2432 if (B->type == OBJ_PLAYER && (Players[B->id].flags & (PLAYER_FLAGS_DYING | PLAYER_FLAGS_DEAD)))
2433 b_good = 0;
2434
2435 if (A->type == OBJ_POWERUP && A->effect_info->last_object_hit == b_num &&
2436 (Gametime - A->effect_info->last_object_hit_time) < 1) {
2437 a_good = 0;
2438 a_hittime_good = 0;
2439 }
2440
2441 if (B->type == OBJ_POWERUP && B->effect_info->last_object_hit == a_num &&
2442 (Gametime - B->effect_info->last_object_hit_time) < 1) {
2443 b_good = 0;
2444 b_hittime_good = 0;
2445 }
2446
2447 if (a_good && b_good) {
2448 DLLInfo.me_handle = A->handle;
2449 DLLInfo.it_handle = B->handle;
2450 DLLInfo.collide_info.point.x = collision_point->x;
2451 DLLInfo.collide_info.point.y = collision_point->y;
2452 DLLInfo.collide_info.point.z = collision_point->z;

Callers 3

do_physics_simFunction · 0.85
do_walking_simFunction · 0.85
AquireElectricalTargetFunction · 0.85

Calls 5

check_lg_informFunction · 0.85
CallGameDLLFunction · 0.85
Osiris_CallEventFunction · 0.85
AINotifyFunction · 0.85
bump_two_objectsFunction · 0.70

Tested by

no test coverage detected