Add K_DirectorIsAvailable

Fixes director not working correctly if there are
duplicates in displayplayers.
This commit is contained in:
James R. 2023-10-01 14:33:58 -07:00 committed by James R
parent d020c9faaa
commit 8b79689d81
4 changed files with 10 additions and 2 deletions

View file

@ -245,7 +245,7 @@ class TiccmdBuilder
bool director_input()
{
if (demo.freecam || G_IsPartyLocal(displayplayers[forplayer()]) == true)
if (demo.freecam || !K_DirectorIsAvailable(viewnum))
{
return false;
}

View file

@ -11,6 +11,7 @@
#include "k_director.h"
#include "d_netcmd.h"
#include "p_local.h"
#include "g_party.h"
#define SWITCHTIME TICRATE * 5 // cooldown between unforced switches
#define BOREDOMTIME 3 * TICRATE / 2 // how long until players considered far apart?
@ -322,3 +323,9 @@ void K_ToggleDirector(boolean active)
directorinfo.active = active;
}
boolean K_DirectorIsAvailable(UINT8 viewnum)
{
return viewnum <= r_splitscreen && viewnum < G_PartySize(consoleplayer) &&
displayplayers[viewnum] != G_PartyMember(consoleplayer, viewnum);
}

View file

@ -28,6 +28,7 @@ void K_UpdateDirector(void);
void K_DrawDirectorDebugger(void);
void K_DirectorFollowAttack(player_t *player, mobj_t *inflictor, mobj_t *source);
void K_ToggleDirector(boolean active);
boolean K_DirectorIsAvailable(UINT8 viewnum);
#ifdef __cplusplus
} // extern "C"

View file

@ -5618,7 +5618,7 @@ void K_drawKartHUD(void)
K_drawKartPowerUps();
if (G_IsPartyLocal(displayplayers[viewnum]) == false)
if (K_DirectorIsAvailable(viewnum) == true)
{
K_drawDirectorHUD();
}