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

Function check_ceiling

physics/findintersection.cpp:2464–2525  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

2462}
2463
2464void check_ceiling() {
2465 vector hit_point;
2466 float cur_dist;
2467
2468 vector face_normal = {0.0, -1.0, 0.0};
2469 vector *vertex_ptr_list[4];
2470 vector vlist[4];
2471 int face_hit_type;
2472 vector wall_norm;
2473 vector colp;
2474
2475 // Bail early if hitpnt is not high enough
2476 if (fvi_query_ptr->rad + fvi_hit_data_ptr->hit_pnt.y < CEILING_HEIGHT)
2477 return;
2478
2479 vlist[0].x = 0.0;
2480 vlist[0].y = CEILING_HEIGHT;
2481 vlist[0].z = 0.0;
2482 vlist[1].x = TERRAIN_WIDTH * TERRAIN_SIZE;
2483 vlist[1].y = CEILING_HEIGHT;
2484 vlist[1].z = 0.0;
2485 vlist[2].x = TERRAIN_WIDTH * TERRAIN_SIZE;
2486 vlist[2].y = CEILING_HEIGHT;
2487 vlist[2].z = TERRAIN_DEPTH * TERRAIN_SIZE;
2488 vlist[3].x = 0.0;
2489 vlist[3].y = CEILING_HEIGHT;
2490 vlist[3].z = TERRAIN_DEPTH * TERRAIN_SIZE;
2491
2492 vertex_ptr_list[0] = &vlist[0];
2493 vertex_ptr_list[1] = &vlist[1];
2494 vertex_ptr_list[2] = &vlist[2];
2495 vertex_ptr_list[3] = &vlist[3];
2496
2497 // Did we hit this face?
2498 face_hit_type = check_line_to_face(&hit_point, &colp, &cur_dist, &wall_norm, fvi_query_ptr->p0,
2499 &fvi_hit_data_ptr->hit_pnt, &face_normal, vertex_ptr_list, 4, fvi_query_ptr->rad);
2500
2501 if (face_hit_type) {
2502 if (cur_dist <= fvi_collision_dist) {
2503 if ((cur_dist < fvi_collision_dist) || !(fvi_query_ptr->flags & FQ_MULTI_POINT)) {
2504 fvi_hit_data_ptr->num_hits = 0;
2505
2506 fvi_hit_data_ptr->hit_pnt = hit_point;
2507 fvi_collision_dist = cur_dist;
2508 compute_movement_AABB();
2509 } else if (fvi_hit_data_ptr->num_hits == MAX_HITS) {
2510 goto ignore_hit;
2511 }
2512
2513 fvi_hit_data_ptr->hit_type[fvi_hit_data_ptr->num_hits] = HIT_CEILING;
2514 fvi_hit_data_ptr->hit_wallnorm[fvi_hit_data_ptr->num_hits] = wall_norm;
2515 // fvi_hit_data_ptr->hit_seg = -1; -- set in the fvi_FindIntersection function
2516 fvi_hit_data_ptr->hit_object[fvi_hit_data_ptr->num_hits] = -1;
2517 fvi_hit_data_ptr->hit_face[fvi_hit_data_ptr->num_hits] = 0;
2518 fvi_hit_data_ptr->hit_face_room[fvi_hit_data_ptr->num_hits] = 0;
2519 fvi_hit_data_ptr->hit_face_pnt[fvi_hit_data_ptr->num_hits] = colp;
2520
2521 fvi_hit_data_ptr->num_hits++;

Callers 1

fvi_FindIntersectionFunction · 0.85

Calls 2

check_line_to_faceFunction · 0.85
compute_movement_AABBFunction · 0.85

Tested by

no test coverage detected