mirror of
https://github.com/KartKrewDev/RingRacers.git
synced 2025-10-30 08:01:28 +00:00
Refactor player waypoint code
- Condense K_GetPlayerNextWaypoint and K_UpdateDistanceFromFinishLine into slightly smaller functions - Rename K_GetPlayerNextWaypoint to K_SetPlayerNextWaypoint - Add K_UpdatePlayerWaypoints
This commit is contained in:
parent
9d9dac6e96
commit
3179669ce7
2 changed files with 66 additions and 56 deletions
121
src/k_kart.c
121
src/k_kart.c
|
|
@ -9422,26 +9422,27 @@ void K_KartPlayerAfterThink(player_t *player)
|
||||||
}
|
}
|
||||||
|
|
||||||
/*--------------------------------------------------
|
/*--------------------------------------------------
|
||||||
static waypoint_t *K_GetPlayerNextWaypoint(player_t *player)
|
static boolean K_SetPlayerNextWaypoint(player_t *player)
|
||||||
|
|
||||||
Gets the next waypoint of a player, by finding their closest waypoint, then checking which of itself and next or
|
Sets the next waypoint of a player, by finding their closest waypoint, then checking which of itself and next or
|
||||||
previous waypoints are infront of the player.
|
previous waypoints are infront of the player.
|
||||||
|
Also sets the current waypoint.
|
||||||
|
|
||||||
Input Arguments:-
|
Input Arguments:-
|
||||||
player - The player the next waypoint is being found for
|
player - The player the next waypoint is being found for
|
||||||
|
|
||||||
Return:-
|
Return:-
|
||||||
The waypoint that is the player's next waypoint
|
Whether it is safe to update the respawn waypoint
|
||||||
--------------------------------------------------*/
|
--------------------------------------------------*/
|
||||||
static waypoint_t *K_GetPlayerNextWaypoint(player_t *player)
|
static boolean K_SetPlayerNextWaypoint(player_t *player)
|
||||||
{
|
{
|
||||||
waypoint_t *finishline = K_GetFinishLineWaypoint();
|
waypoint_t *finishline = K_GetFinishLineWaypoint();
|
||||||
waypoint_t *bestwaypoint = NULL;
|
waypoint_t *bestwaypoint = NULL;
|
||||||
|
boolean updaterespawn = false;
|
||||||
|
|
||||||
if ((player != NULL) && (player->mo != NULL) && (P_MobjWasRemoved(player->mo) == false))
|
if ((player != NULL) && (player->mo != NULL) && (P_MobjWasRemoved(player->mo) == false))
|
||||||
{
|
{
|
||||||
waypoint_t *waypoint = K_GetBestWaypointForMobj(player->mo, player->currentwaypoint);
|
waypoint_t *waypoint = K_GetBestWaypointForMobj(player->mo, player->currentwaypoint);
|
||||||
boolean updaterespawn = false;
|
|
||||||
|
|
||||||
// Our current waypoint.
|
// Our current waypoint.
|
||||||
bestwaypoint = waypoint;
|
bestwaypoint = waypoint;
|
||||||
|
|
@ -9630,25 +9631,19 @@ static waypoint_t *K_GetPlayerNextWaypoint(player_t *player)
|
||||||
player->pflags &= ~PF_UPDATEMYRESPAWN;
|
player->pflags &= ~PF_UPDATEMYRESPAWN;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Respawn point should only be updated when we're going to a nextwaypoint
|
// If nextwaypoint is NULL, it means we don't want to update the waypoint until we touch another one.
|
||||||
if ((updaterespawn) &&
|
// player->nextwaypoint will keep its previous value in this case.
|
||||||
(player->respawn.state == RESPAWNST_NONE) &&
|
if (bestwaypoint != NULL)
|
||||||
(bestwaypoint != NULL) &&
|
|
||||||
(bestwaypoint != player->nextwaypoint) &&
|
|
||||||
(K_GetWaypointIsSpawnpoint(bestwaypoint)) &&
|
|
||||||
(K_GetWaypointIsEnabled(bestwaypoint) == true))
|
|
||||||
{
|
{
|
||||||
player->respawn.wp = bestwaypoint;
|
player->nextwaypoint = bestwaypoint;
|
||||||
player->lastsafelap = player->laps;
|
|
||||||
player->lastsafecheatcheck = player->cheatchecknum;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return bestwaypoint;
|
return updaterespawn;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*--------------------------------------------------
|
/*--------------------------------------------------
|
||||||
void K_UpdateDistanceFromFinishLine(player_t *const player)
|
static void K_UpdateDistanceFromFinishLine(player_t *const player)
|
||||||
|
|
||||||
Updates the distance a player has to the finish line.
|
Updates the distance a player has to the finish line.
|
||||||
|
|
||||||
|
|
@ -9658,46 +9653,11 @@ static waypoint_t *K_GetPlayerNextWaypoint(player_t *player)
|
||||||
Return:-
|
Return:-
|
||||||
None
|
None
|
||||||
--------------------------------------------------*/
|
--------------------------------------------------*/
|
||||||
void K_UpdateDistanceFromFinishLine(player_t *const player)
|
static void K_UpdateDistanceFromFinishLine(player_t *const player)
|
||||||
{
|
{
|
||||||
if (K_PodiumSequence() == true)
|
|
||||||
{
|
|
||||||
K_UpdatePodiumWaypoints(player);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
if ((player != NULL) && (player->mo != NULL))
|
if ((player != NULL) && (player->mo != NULL))
|
||||||
{
|
{
|
||||||
waypoint_t *finishline = K_GetFinishLineWaypoint();
|
waypoint_t *finishline = K_GetFinishLineWaypoint();
|
||||||
waypoint_t *nextwaypoint = NULL;
|
|
||||||
|
|
||||||
if (player->respawn.state == RESPAWNST_MOVE &&
|
|
||||||
player->respawn.init == true &&
|
|
||||||
player->lastsafelap < player->laps)
|
|
||||||
{
|
|
||||||
player->laps = player->lastsafelap;
|
|
||||||
player->cheatchecknum = player->lastsafecheatcheck;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (player->spectator)
|
|
||||||
{
|
|
||||||
// Don't update waypoints while spectating
|
|
||||||
nextwaypoint = finishline;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
nextwaypoint = K_GetPlayerNextWaypoint(player);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (nextwaypoint != NULL)
|
|
||||||
{
|
|
||||||
// If nextwaypoint is NULL, it means we don't want to update the waypoint until we touch another one.
|
|
||||||
// player->nextwaypoint will keep its previous value in this case.
|
|
||||||
player->nextwaypoint = nextwaypoint;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Update prev value (used for grief prevention code)
|
|
||||||
player->distancetofinishprev = player->distancetofinish;
|
|
||||||
|
|
||||||
// nextwaypoint is now the waypoint that is in front of us
|
// nextwaypoint is now the waypoint that is in front of us
|
||||||
if ((player->exiting && !(player->pflags & PF_NOCONTEST)) || player->spectator)
|
if ((player->exiting && !(player->pflags & PF_NOCONTEST)) || player->spectator)
|
||||||
|
|
@ -9874,6 +9834,40 @@ void K_UpdateDistanceFromFinishLine(player_t *const player)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*--------------------------------------------------
|
||||||
|
static void K_UpdatePlayerWaypoints(player_t *const player)
|
||||||
|
|
||||||
|
Updates the player's waypoints and finish line distance.
|
||||||
|
|
||||||
|
Input Arguments:-
|
||||||
|
player - The player to update
|
||||||
|
|
||||||
|
Return:-
|
||||||
|
None
|
||||||
|
--------------------------------------------------*/
|
||||||
|
static void K_UpdatePlayerWaypoints(player_t *const player)
|
||||||
|
{
|
||||||
|
waypoint_t *const old_nextwaypoint = player->nextwaypoint;
|
||||||
|
|
||||||
|
boolean updaterespawn = K_SetPlayerNextWaypoint(player);
|
||||||
|
|
||||||
|
// Update prev value (used for grief prevention code)
|
||||||
|
player->distancetofinishprev = player->distancetofinish;
|
||||||
|
K_UpdateDistanceFromFinishLine(player);
|
||||||
|
|
||||||
|
// Respawn point should only be updated when we're going to a nextwaypoint
|
||||||
|
if ((updaterespawn) &&
|
||||||
|
(player->respawn.state == RESPAWNST_NONE) &&
|
||||||
|
(player->nextwaypoint != old_nextwaypoint) &&
|
||||||
|
(K_GetWaypointIsSpawnpoint(player->nextwaypoint)) &&
|
||||||
|
(K_GetWaypointIsEnabled(player->nextwaypoint) == true))
|
||||||
|
{
|
||||||
|
player->respawn.wp = player->nextwaypoint;
|
||||||
|
player->lastsafelap = player->laps;
|
||||||
|
player->lastsafecheatcheck = player->cheatchecknum;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
INT32 K_GetKartRingPower(const player_t *player, boolean boosted)
|
INT32 K_GetKartRingPower(const player_t *player, boolean boosted)
|
||||||
{
|
{
|
||||||
fixed_t ringPower = ((9 - player->kartspeed) + (9 - player->kartweight)) * (FRACUNIT/2);
|
fixed_t ringPower = ((9 - player->kartspeed) + (9 - player->kartweight)) * (FRACUNIT/2);
|
||||||
|
|
@ -10798,10 +10792,27 @@ void K_UpdateAllPlayerPositions(void)
|
||||||
// First loop: Ensure all players' distance to the finish line are all accurate
|
// First loop: Ensure all players' distance to the finish line are all accurate
|
||||||
for (i = 0; i < MAXPLAYERS; i++)
|
for (i = 0; i < MAXPLAYERS; i++)
|
||||||
{
|
{
|
||||||
if (playeringame[i] && players[i].mo && !P_MobjWasRemoved(players[i].mo))
|
player_t *player = &players[i];
|
||||||
|
if (!playeringame[i] || player->spectator || !player->mo || P_MobjWasRemoved(player->mo))
|
||||||
{
|
{
|
||||||
K_UpdateDistanceFromFinishLine(&players[i]);
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (K_PodiumSequence() == true)
|
||||||
|
{
|
||||||
|
K_UpdatePodiumWaypoints(player);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (player->respawn.state == RESPAWNST_MOVE &&
|
||||||
|
player->respawn.init == true &&
|
||||||
|
player->lastsafelap < player->laps)
|
||||||
|
{
|
||||||
|
player->laps = player->lastsafelap;
|
||||||
|
player->cheatchecknum = player->lastsafecheatcheck;
|
||||||
|
}
|
||||||
|
|
||||||
|
K_UpdatePlayerWaypoints(player);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Second loop: Ensure all player positions reflect everyone's distances
|
// Second loop: Ensure all player positions reflect everyone's distances
|
||||||
|
|
|
||||||
|
|
@ -165,7 +165,6 @@ void K_RepairOrbitChain(mobj_t *orbit);
|
||||||
void K_CalculateBananaSlope(mobj_t *mobj, fixed_t x, fixed_t y, fixed_t z, fixed_t radius, fixed_t height, boolean flip, boolean player);
|
void K_CalculateBananaSlope(mobj_t *mobj, fixed_t x, fixed_t y, fixed_t z, fixed_t radius, fixed_t height, boolean flip, boolean player);
|
||||||
mobj_t *K_FindJawzTarget(mobj_t *actor, player_t *source, angle_t range);
|
mobj_t *K_FindJawzTarget(mobj_t *actor, player_t *source, angle_t range);
|
||||||
INT32 K_GetKartRingPower(const player_t *player, boolean boosted);
|
INT32 K_GetKartRingPower(const player_t *player, boolean boosted);
|
||||||
void K_UpdateDistanceFromFinishLine(player_t *const player);
|
|
||||||
boolean K_CheckPlayersRespawnColliding(INT32 playernum, fixed_t x, fixed_t y);
|
boolean K_CheckPlayersRespawnColliding(INT32 playernum, fixed_t x, fixed_t y);
|
||||||
INT16 K_UpdateSteeringValue(INT16 inputSteering, INT16 destSteering);
|
INT16 K_UpdateSteeringValue(INT16 inputSteering, INT16 destSteering);
|
||||||
INT16 K_GetKartTurnValue(const player_t *player, INT16 turnvalue);
|
INT16 K_GetKartTurnValue(const player_t *player, INT16 turnvalue);
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue