From 9b5b9af2a52468b36a257fc056a1b9805a7b673f Mon Sep 17 00:00:00 2001 From: terencehill Date: Wed, 3 Jun 2020 15:37:21 +0200 Subject: [PATCH] Merge ObserverThink and SpectatorThink to avoid code duplication --- qcsrc/server/client.qc | 109 ++++++++++++++--------------------------- 1 file changed, 37 insertions(+), 72 deletions(-) diff --git a/qcsrc/server/client.qc b/qcsrc/server/client.qc index df2f9c23de..3c56b1363b 100644 --- a/qcsrc/server/client.qc +++ b/qcsrc/server/client.qc @@ -2269,51 +2269,16 @@ bool PlayerThink(entity this) } .bool would_spectate; -void ObserverThink(entity this) +void ObserverOrSpectatorThink(entity this) { + bool is_spec = IS_SPEC(this); if ( CS(this).impulse ) { - MinigameImpulse(this, CS(this).impulse); - CS(this).impulse = 0; - } - - if (this.flags & FL_JUMPRELEASED) { - if (PHYS_INPUT_BUTTON_JUMP(this) && (joinAllowed(this) || time < CS(this).jointime + MIN_SPEC_TIME)) { - this.flags &= ~FL_JUMPRELEASED; - this.flags |= FL_SPAWNING; - } else if(PHYS_INPUT_BUTTON_ATCK(this) && !CS(this).version_mismatch || this.would_spectate) { - this.flags &= ~FL_JUMPRELEASED; - if(SpectateNext(this)) { - TRANSMUTE(Spectator, this); - } - } else { - int preferred_movetype = ((!PHYS_INPUT_BUTTON_USE(this) ? CS(this).cvar_cl_clippedspectating : !CS(this).cvar_cl_clippedspectating) ? MOVETYPE_FLY_WORLDONLY : MOVETYPE_NOCLIP); - set_movetype(this, preferred_movetype); - } - } else { - if (!(PHYS_INPUT_BUTTON_ATCK(this) || PHYS_INPUT_BUTTON_JUMP(this))) { - this.flags |= FL_JUMPRELEASED; - if(this.flags & FL_SPAWNING) - { - this.flags &= ~FL_SPAWNING; - if(joinAllowed(this)) - Join(this); - else if(time < CS(this).jointime + MIN_SPEC_TIME) - CS(this).autojoin_checked = -1; - return; - } - } - } -} - -void SpectatorThink(entity this) -{ - if ( CS(this).impulse ) - { - if(MinigameImpulse(this, CS(this).impulse)) + int r = MinigameImpulse(this, CS(this).impulse); + if (!is_spec || r) CS(this).impulse = 0; - if (CS(this).impulse == IMP_weapon_drop.impulse) + if (is_spec && CS(this).impulse == IMP_weapon_drop.impulse) { STAT(CAMERA_SPECTATOR, this) = (STAT(CAMERA_SPECTATOR, this) + 1) % 3; CS(this).impulse = 0; @@ -2325,41 +2290,44 @@ void SpectatorThink(entity this) if (PHYS_INPUT_BUTTON_JUMP(this) && (joinAllowed(this) || time < CS(this).jointime + MIN_SPEC_TIME)) { this.flags &= ~FL_JUMPRELEASED; this.flags |= FL_SPAWNING; - } else if(PHYS_INPUT_BUTTON_ATCK(this) || CS(this).impulse == 10 || CS(this).impulse == 15 || CS(this).impulse == 18 || (CS(this).impulse >= 200 && CS(this).impulse <= 209)) { + } else if((is_spec && (PHYS_INPUT_BUTTON_ATCK(this) || CS(this).impulse == 10 || CS(this).impulse == 15 || CS(this).impulse == 18 || (CS(this).impulse >= 200 && CS(this).impulse <= 209))) + || (!is_spec && (PHYS_INPUT_BUTTON_ATCK(this) && !CS(this).version_mismatch || this.would_spectate))) { this.flags &= ~FL_JUMPRELEASED; if(SpectateNext(this)) { TRANSMUTE(Spectator, this); - } else { + } else if (is_spec) { TRANSMUTE(Observer, this); PutClientInServer(this); } - CS(this).impulse = 0; - } else if(CS(this).impulse == 12 || CS(this).impulse == 16 || CS(this).impulse == 19 || (CS(this).impulse >= 220 && CS(this).impulse <= 229)) { - this.flags &= ~FL_JUMPRELEASED; - if(SpectatePrev(this)) { - TRANSMUTE(Spectator, this); - } else { + if (is_spec) + CS(this).impulse = 0; + } else if (is_spec) { + if(CS(this).impulse == 12 || CS(this).impulse == 16 || CS(this).impulse == 19 || (CS(this).impulse >= 220 && CS(this).impulse <= 229)) { + this.flags &= ~FL_JUMPRELEASED; + if(SpectatePrev(this)) { + TRANSMUTE(Spectator, this); + } else { + TRANSMUTE(Observer, this); + PutClientInServer(this); + } + CS(this).impulse = 0; + } else if(PHYS_INPUT_BUTTON_ATCK2(this)) { + this.would_spectate = false; + this.flags &= ~FL_JUMPRELEASED; TRANSMUTE(Observer, this); PutClientInServer(this); + } else if(!SpectateUpdate(this) && !SpectateNext(this)) { + PutObserverInServer(this); + this.would_spectate = true; } - CS(this).impulse = 0; - } else if (PHYS_INPUT_BUTTON_ATCK2(this)) { - this.would_spectate = false; - this.flags &= ~FL_JUMPRELEASED; - TRANSMUTE(Observer, this); - PutClientInServer(this); - } else { - if(!SpectateUpdate(this)) - { - if(!SpectateNext(this)) - { - PutObserverInServer(this); - this.would_spectate = true; - } - } + } + else { + int preferred_movetype = ((!PHYS_INPUT_BUTTON_USE(this) ? CS(this).cvar_cl_clippedspectating : !CS(this).cvar_cl_clippedspectating) ? MOVETYPE_FLY_WORLDONLY : MOVETYPE_NOCLIP); + set_movetype(this, preferred_movetype); } } else { - if (!(PHYS_INPUT_BUTTON_ATCK(this) || PHYS_INPUT_BUTTON_ATCK2(this))) { + if ((is_spec && !(PHYS_INPUT_BUTTON_ATCK(this) || PHYS_INPUT_BUTTON_ATCK2(this))) + || (!is_spec && !(PHYS_INPUT_BUTTON_ATCK(this) || PHYS_INPUT_BUTTON_JUMP(this)))) { this.flags |= FL_JUMPRELEASED; if(this.flags & FL_SPAWNING) { @@ -2371,11 +2339,11 @@ void SpectatorThink(entity this) return; } } - if(!SpectateUpdate(this)) + if(is_spec && !SpectateUpdate(this)) PutObserverInServer(this); } - - this.flags |= FL_CLIENT | FL_NOTARGET; + if (is_spec) + this.flags |= FL_CLIENT | FL_NOTARGET; } void PlayerUseKey(entity this) @@ -2588,11 +2556,8 @@ void PlayerPreThink (entity this) return; } } - else if (IS_OBSERVER(this)) { - ObserverThink(this); - } - else if (IS_SPEC(this)) { - SpectatorThink(this); + else if (IS_OBSERVER(this) || IS_SPEC(this)) { + ObserverOrSpectatorThink(this); } // WEAPONTODO: Add weapon request for this -- 2.39.2