X-Git-Url: http://git.xonotic.org/?a=blobdiff_plain;f=qcsrc%2Fecs%2Fsystems%2Fsv_physics.qc;h=1454d0049fe76b0d6211f0e98e7379b47bb20857;hb=79012b90e96396059bcc310a8a95ae38918993a4;hp=c20ae8bda2065a58ffd01176ae3ebbe5aa4412f1;hpb=ecd018b0f2a99be972759503e3efea35b6717ee9;p=xonotic%2Fxonotic-data.pk3dir.git diff --git a/qcsrc/ecs/systems/sv_physics.qc b/qcsrc/ecs/systems/sv_physics.qc index c20ae8bda..1454d0049 100644 --- a/qcsrc/ecs/systems/sv_physics.qc +++ b/qcsrc/ecs/systems/sv_physics.qc @@ -1,9 +1,14 @@ #include "physics.qh" +float autocvar_sv_spectator_speed_multiplier; +float autocvar_sv_spectator_speed_multiplier_min = 1; +float autocvar_sv_spectator_speed_multiplier_max = 5; + void sys_phys_fix(entity this, float dt) { WarpZone_PlayerPhysics_FixVAngle(this); Physics_UpdateStats(this); + PM_ClientMovement_UpdateStatus(this); } bool sys_phys_override(entity this, float dt) @@ -21,7 +26,7 @@ void sys_phys_monitor(entity this, float dt) { int buttons = PHYS_INPUT_BUTTON_MASK(this); anticheat_physics(this); - if (sv_maxidle > 0) { + if (autocvar_sv_maxidle > 0 || autocvar_sv_maxidle_playertospectator > 0) { if (buttons != CS(this).buttons_old || CS(this).movement != CS(this).movement_old || this.v_angle != CS(this).v_angle_old) { CS(this).parm_idlesince = time; } @@ -33,7 +38,6 @@ void sys_phys_monitor(entity this, float dt) void sys_phys_ai(entity this) { if (!IS_BOT_CLIENT(this)) { return; } - if (playerdemo_read(this)) { return; } bot_think(this); } @@ -54,7 +58,7 @@ void sys_phys_pregame_hold(entity this) void sys_phys_spectator_control(entity this) { float maxspeed_mod = autocvar_sv_spectator_speed_multiplier; - if (!this.spectatorspeed) { this.spectatorspeed = maxspeed_mod; } + if (!STAT(SPECTATORSPEED, this)) { STAT(SPECTATORSPEED, this) = maxspeed_mod; } if ((CS(this).impulse >= 1 && CS(this).impulse <= 19) || (CS(this).impulse >= 200 && CS(this).impulse <= 209) || (CS(this).impulse >= 220 && CS(this).impulse <= 229) @@ -64,16 +68,18 @@ void sys_phys_spectator_control(entity this) || CS(this).impulse == 15 || CS(this).impulse == 18 || (CS(this).impulse >= 200 && CS(this).impulse <= 209) - ) { this.spectatorspeed = bound(1, this.spectatorspeed + 0.5, 5); } else if (CS(this).impulse == 11) { - this.spectatorspeed = maxspeed_mod; + ) { + STAT(SPECTATORSPEED, this) = bound(autocvar_sv_spectator_speed_multiplier_min, STAT(SPECTATORSPEED, this) + 0.5, autocvar_sv_spectator_speed_multiplier_max); + } else if (CS(this).impulse == 11) { + STAT(SPECTATORSPEED, this) = maxspeed_mod; } else if (CS(this).impulse == 12 || CS(this).impulse == 16 || CS(this).impulse == 19 || (CS(this).impulse >= 220 && CS(this).impulse <= 229) ) { - this.spectatorspeed = bound(1, this.spectatorspeed - 0.5, 5); + STAT(SPECTATORSPEED, this) = bound(autocvar_sv_spectator_speed_multiplier_min, STAT(SPECTATORSPEED, this) - 0.5, autocvar_sv_spectator_speed_multiplier_max); } else if (CS(this).impulse >= 1 && CS(this).impulse <= 9) { - this.spectatorspeed = 1 + 0.5 * (CS(this).impulse - 1); + STAT(SPECTATORSPEED, this) = 1 + 0.5 * (CS(this).impulse - 1); } } // otherwise just clear CS(this).impulse = 0; @@ -84,7 +90,7 @@ void sys_phys_fixspeed(entity this, float maxspeed_mod) { float spd = max(PHYS_MAXSPEED(this), PHYS_MAXAIRSPEED(this)) * maxspeed_mod; if (this.speed != spd) { - this.speed = spd; + this.speed = spd; // TODO: send this as a stat and set the below cvars on the client? string temps = ftos(spd); stuffcmd(this, strcat("cl_forwardspeed ", temps, "\n")); stuffcmd(this, strcat("cl_backspeed ", temps, "\n"));