mirror of
https://github.com/DrBeef/ioq3quest.git
synced 2024-11-23 04:12:39 +00:00
Improvements for dedicated camera followers (team follow1/2)
Switching to dedicated camera follower with no possible players to follow would spawn at the intermission point and display "connection interrupted" HUD message. Pmove() was not run for the client so ps.commandTime was too far behind. I made it so that dedicated camera followers and scoreboard run Pmove() but cannot move (PM_FREEZE). When all players possible to follow leave, the dedicated camera follower would continue to display the old player state of the player they were following (along with "connection interrupted" HUD message). Unlike the regular case of a spectator following a specific player, dedicated camera followers did not reset their player state to the intermission point after the followed player was no longer valid. Now a client can be set as 'team follow1' to automatically switch between displaying the intermission point and following a player when possible.
This commit is contained in:
parent
f3f29e9670
commit
51743bbb01
1 changed files with 17 additions and 10 deletions
|
@ -320,11 +320,15 @@ void SpectatorThink( gentity_t *ent, usercmd_t *ucmd ) {
|
|||
|
||||
client = ent->client;
|
||||
|
||||
if ( client->sess.spectatorState != SPECTATOR_FOLLOW ) {
|
||||
if ( client->noclip ) {
|
||||
client->ps.pm_type = PM_NOCLIP;
|
||||
if ( client->sess.spectatorState != SPECTATOR_FOLLOW || !( client->ps.pm_flags & PMF_FOLLOW ) ) {
|
||||
if ( client->sess.spectatorState == SPECTATOR_FREE ) {
|
||||
if ( client->noclip ) {
|
||||
client->ps.pm_type = PM_NOCLIP;
|
||||
} else {
|
||||
client->ps.pm_type = PM_SPECTATOR;
|
||||
}
|
||||
} else {
|
||||
client->ps.pm_type = PM_SPECTATOR;
|
||||
client->ps.pm_type = PM_FREEZE;
|
||||
}
|
||||
|
||||
client->ps.speed = 400; // faster than normal
|
||||
|
@ -1074,14 +1078,17 @@ void SpectatorClientEndFrame( gentity_t *ent ) {
|
|||
ent->client->ps.pm_flags |= PMF_FOLLOW;
|
||||
ent->client->ps.eFlags = flags;
|
||||
return;
|
||||
} else {
|
||||
// drop them to free spectators unless they are dedicated camera followers
|
||||
if ( ent->client->sess.spectatorClient >= 0 ) {
|
||||
ent->client->sess.spectatorState = SPECTATOR_FREE;
|
||||
ClientBegin( ent->client - level.clients );
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if ( ent->client->ps.pm_flags & PMF_FOLLOW ) {
|
||||
// drop them to free spectators unless they are dedicated camera followers
|
||||
if ( ent->client->sess.spectatorClient >= 0 ) {
|
||||
ent->client->sess.spectatorState = SPECTATOR_FREE;
|
||||
}
|
||||
|
||||
ClientBegin( ent->client - level.clients );
|
||||
}
|
||||
}
|
||||
|
||||
if ( ent->client->sess.spectatorState == SPECTATOR_SCOREBOARD ) {
|
||||
|
|
Loading…
Reference in a new issue