diff --git a/src/d_netcmd.c b/src/d_netcmd.c index e0491a74c..3085d4ee4 100644 --- a/src/d_netcmd.c +++ b/src/d_netcmd.c @@ -545,8 +545,6 @@ static CV_PossibleValue_t perfstats_cons_t[] = { }; consvar_t cv_perfstats = CVAR_INIT ("perfstats", "Off", 0, perfstats_cons_t, NULL); -consvar_t cv_director = CVAR_INIT ("director", "Off", 0, CV_OnOff, NULL); - consvar_t cv_schedule = CVAR_INIT ("schedule", "On", CV_NETVAR|CV_CALL, CV_OnOff, Schedule_OnChange); consvar_t cv_automate = CVAR_INIT ("automate", "On", CV_NETVAR, CV_OnOff, NULL); @@ -1053,8 +1051,6 @@ void D_RegisterClientCommands(void) CV_RegisterVar(&cv_scr_width); CV_RegisterVar(&cv_scr_height); - CV_RegisterVar(&cv_director); - CV_RegisterVar(&cv_soundtest); CV_RegisterVar(&cv_invincmusicfade); diff --git a/src/d_netcmd.h b/src/d_netcmd.h index 61171d393..a126de023 100644 --- a/src/d_netcmd.h +++ b/src/d_netcmd.h @@ -128,8 +128,6 @@ extern consvar_t cv_sleep; extern consvar_t cv_perfstats; -extern consvar_t cv_director; - extern consvar_t cv_schedule; extern consvar_t cv_livestudioaudience; diff --git a/src/k_director.c b/src/k_director.c index 4f5737b4b..51158f8eb 100644 --- a/src/k_director.c +++ b/src/k_director.c @@ -25,6 +25,7 @@ void K_InitDirector(void) { INT32 playernum; + directorinfo.active = false; directorinfo.cooldown = SWITCHTIME; directorinfo.freeze = 0; directorinfo.attacker = 0; @@ -109,6 +110,11 @@ static boolean K_CanSwitchDirector(void) return false; } + if (!directorinfo.active) + { + return false; + } + return true; } @@ -218,11 +224,6 @@ void K_UpdateDirector(void) INT32 *displayplayerp = &displayplayers[0]; INT32 targetposition; - if (!cv_director.value) - { - return; - } - K_UpdateDirectorPositions(); if (directorinfo.cooldown > 0) { @@ -299,3 +300,13 @@ void K_UpdateDirector(void) break; } } + +void K_ToggleDirector(boolean active) +{ + if (directorinfo.active != active) + { + directorinfo.cooldown = 0; // switch immediately + } + + directorinfo.active = active; +} diff --git a/src/k_director.h b/src/k_director.h index 29bb01721..47b4b2265 100644 --- a/src/k_director.h +++ b/src/k_director.h @@ -12,6 +12,7 @@ extern "C" { extern struct directorinfo { + boolean active; // is view point switching enabled? tic_t cooldown; // how long has it been since we last switched? tic_t freeze; // when nonzero, fixed switch pending, freeze logic! INT32 attacker; // who to switch to when freeze delay elapses @@ -26,6 +27,7 @@ void K_InitDirector(void); 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); #ifdef __cplusplus } // extern "C" diff --git a/src/p_mobj.c b/src/p_mobj.c index 52e48da51..d9920a928 100644 --- a/src/p_mobj.c +++ b/src/p_mobj.c @@ -46,6 +46,7 @@ #include "k_collide.h" #include "k_objects.h" #include "k_grandprix.h" +#include "k_director.h" static CV_PossibleValue_t CV_BobSpeed[] = {{0, "MIN"}, {4*FRACUNIT, "MAX"}, {0, NULL}}; consvar_t cv_movebob = CVAR_INIT ("movebob", "1.0", CV_FLOAT|CV_SAVE, CV_BobSpeed, NULL); @@ -11827,6 +11828,22 @@ void P_SpawnPlayer(INT32 playernum) K_SpawnPlayerBattleBumpers(p); } } + + // I'm not refactoring the loop at the top of this file. + pcount = 0; + + for (i = 0; i < MAXPLAYERS; ++i) + { + if (G_CouldView(i)) + { + pcount++; + } + } + + // Spectating when there is literally any other player in + // the level enables director cam. + // TODO: how do we support splitscreen? + K_ToggleDirector(players[consoleplayer].spectator && pcount > 0); } void P_AfterPlayerSpawn(INT32 playernum)