]> git.rm.cloudns.org Git - xonotic/xonotic-data.pk3dir.git/commitdiff
Merge ObserverThink and SpectatorThink to avoid code duplication
authorterencehill <piuntn@gmail.com>
Wed, 3 Jun 2020 13:37:21 +0000 (15:37 +0200)
committerterencehill <piuntn@gmail.com>
Wed, 3 Jun 2020 13:37:21 +0000 (15:37 +0200)
qcsrc/server/client.qc

index df2f9c23de2eacb02c1bfd917fefe45f5cfdb23f..3c56b1363b56cf489d8af80b7562b6a8b9a01c98 100644 (file)
@@ -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