]> git.rm.cloudns.org Git - xonotic/xonotic-data.pk3dir.git/commitdiff
Fix spectator camera having a duplicate mode if 3rd person camera is enabled (chase_a...
authorterencehill <piuntn@gmail.com>
Fri, 15 Mar 2024 21:28:34 +0000 (22:28 +0100)
committerterencehill <piuntn@gmail.com>
Fri, 15 Mar 2024 21:28:34 +0000 (22:28 +0100)
qcsrc/client/view.qc
qcsrc/common/impulses/all.qh

index 689f4b4cecbdd80ad0c119f2c42fce5be85977bc..bf6e22c61c9cfd655b09a98ab879b0cddaca9f76 100644 (file)
@@ -16,6 +16,7 @@
 #include <common/debug.qh>
 #include <common/ent_cs.qh>
 #include <common/gamemodes/_mod.qh>
+#include <common/impulses/all.qh>
 #include <common/mapinfo.qh>
 #include <common/mapobjects/target/music.qh>
 #include <common/mapobjects/trigger/viewloc.qh>
@@ -613,8 +614,24 @@ int WantEventchase(entity this, bool want_vehiclechase)
        return 0;
 }
 
+bool waiting_CAMERA_SPECTATOR_update;
 void View_EventChase(entity this)
 {
+       if(spectatee_status > 0 && autocvar_chase_active > 0)
+       {
+               // if chase_active is enabled by the user, spectator camera never switches to 1st person
+               // that means CAMERA_SPECTATOR 1 behaves as 0 and is redundant, so we forcedly skip it
+               if (STAT(CAMERA_SPECTATOR) == 1)
+               {
+                       if (!waiting_CAMERA_SPECTATOR_update)
+                       {
+                               Impulse_Send(IMP_weapon_drop); // switch to CAMERA_SPECTATOR 2
+                               waiting_CAMERA_SPECTATOR_update = true;
+                       }
+               }
+               else waiting_CAMERA_SPECTATOR_update = false;
+       }
+
        // event chase camera
        if(autocvar_chase_active <= 0) // greater than 0 means it's enabled manually, and this code is skipped
        {
index d870e6d2c232cf7825a94f46711831e96afc4320..da13ee4aa490a811e205a10702e4e72f15aea382 100644 (file)
@@ -14,6 +14,11 @@ REGISTRY_CHECK(IMPULSES)
 .void(entity this) impulse_handle;
 
 #if defined(CSQC)
+void Impulse_Send(entity imp)
+{
+       localcmd(sprintf("\nimpulse %d\n", imp.impulse));
+}
+
 #define IMPULSE_ALIAS(alias, id) localcmd("\nalias " #alias " \"", id ,"\"\n")
 #else
 #define IMPULSE_ALIAS(alias, id)