From 1cbb4bea6b2f456031879d946963757e6b9424cc Mon Sep 17 00:00:00 2001 From: Sally Cochenour Date: Tue, 3 Mar 2020 15:47:02 -0500 Subject: [PATCH] Limited vertical range on player waypoints --- src/k_kart.c | 22 ++++------------------ src/k_waypoint.c | 21 ++++++++++++++------- 2 files changed, 18 insertions(+), 25 deletions(-) diff --git a/src/k_kart.c b/src/k_kart.c index 789e271d8..dd86fe201 100644 --- a/src/k_kart.c +++ b/src/k_kart.c @@ -5739,24 +5739,19 @@ void K_KartPlayerAfterThink(player_t *player) Input Arguments:- player - The player the next waypoint is being found for - closest - Use closest waypoint algorithm, instead of best touching Return:- The waypoint that is the player's next waypoint --------------------------------------------------*/ -static waypoint_t *K_GetPlayerNextWaypoint(player_t *player, boolean closest) +static waypoint_t *K_GetPlayerNextWaypoint(player_t *player) { waypoint_t *bestwaypoint = NULL; + if ((player != NULL) && (player->mo != NULL) && (P_MobjWasRemoved(player->mo) == false)) { - waypoint_t *waypoint = NULL; + waypoint_t *waypoint = K_GetClosestWaypointToMobj(player->mo); boolean updaterespawn = false; - if (closest == true) - waypoint = K_GetClosestWaypointToMobj(player->mo); - else - waypoint = K_GetBestWaypointTouchingMobj(player->mo); - bestwaypoint = waypoint; // check the waypoint's location in relation to the player @@ -6006,16 +6001,7 @@ static void K_UpdateDistanceFromFinishLine(player_t *const player) else { waypoint_t *finishline = K_GetFinishLineWaypoint(); - waypoint_t *nextwaypoint = K_GetPlayerNextWaypoint(player, true); //false - - /* - if ((nextwaypoint == NULL) && (player->nextwaypoint == NULL)) - { - // Special case: if player nextwaypoint is still NULL, we want to fix that as soon as possible, so use the closest waypoint instead. - // This will most likely only happen on map load or player spawn. - nextwaypoint = K_GetPlayerNextWaypoint(player, true); - } - */ + waypoint_t *nextwaypoint = K_GetPlayerNextWaypoint(player); if (nextwaypoint != NULL) { diff --git a/src/k_waypoint.c b/src/k_waypoint.c index 68b21520e..d66076630 100644 --- a/src/k_waypoint.c +++ b/src/k_waypoint.c @@ -221,15 +221,22 @@ waypoint_t *K_GetClosestWaypointToMobj(mobj_t *const mobj) for (i = 0; i < numwaypoints; i++) { checkwaypoint = &waypointheap[i]; - checkdist = P_AproxDistance( - (mobj->x >> FRACBITS) - (checkwaypoint->mobj->x >> FRACBITS), - (mobj->y >> FRACBITS) - (checkwaypoint->mobj->y >> FRACBITS)); - checkdist = P_AproxDistance(checkdist, (mobj->z >> FRACBITS) - (checkwaypoint->mobj->z >> FRACBITS)); - if (checkdist < closestdist) + checkdist = abs((mobj->z >> FRACBITS) - (checkwaypoint->mobj->z >> FRACBITS)); + + // TODO: Keep the old version of this function, + // make this 128 check a separate function. + if (checkdist <= 128) { - closestwaypoint = checkwaypoint; - closestdist = checkdist; + checkdist = P_AproxDistance( + (mobj->x >> FRACBITS) - (checkwaypoint->mobj->x >> FRACBITS), + (mobj->y >> FRACBITS) - (checkwaypoint->mobj->y >> FRACBITS)); + + if (checkdist < closestdist) + { + closestwaypoint = checkwaypoint; + closestdist = checkdist; + } } } }