]> git.xonotic.org Git - xonotic/xonotic-data.pk3dir.git/commitdiff
func_rotating: stop sound when deactivated, minor cleanup
authorFreddy <schro.sb@gmail.com>
Fri, 9 Mar 2018 16:35:59 +0000 (17:35 +0100)
committerFreddy <schro.sb@gmail.com>
Fri, 9 Mar 2018 16:35:59 +0000 (17:35 +0100)
qcsrc/common/sounds/sound.qh
qcsrc/common/triggers/func/rotating.qc
qcsrc/common/triggers/func/rotating.qh
qcsrc/common/triggers/spawnflags.qh

index 8c4aecbda029829c753e9b1641ceeb490cc04259..a22e0e70ee45f81fbb003b5edbcf73b99bacb63f 100644 (file)
@@ -22,7 +22,7 @@ const int CH_PLAYER_SINGLE = 7;
 // const int CH_BGM_SINGLE = -8;
 const int CH_BGM_SINGLE = 8;
 const int CH_AMBIENT = -9;
-// const int CH_AMBIENT_SINGLE = 9;
+const int CH_AMBIENT_SINGLE = 9;
 
 const float ATTEN_NONE = 0;
 const float ATTEN_MIN = 0.015625;
index 6268dcfeb86ea6f5fc7d9b981b7e22dd34240bc9..35351ee08e0a69a882a90ed7043ae18d8072c7e0 100644 (file)
@@ -1,6 +1,5 @@
 #include "rotating.qh"
 #ifdef SVQC
-const int FUNC_ROTATING_STARTOFF = BIT(4);
 
 void func_rotating_setactive(entity this, int astate)
 {
@@ -15,9 +14,18 @@ void func_rotating_setactive(entity this, int astate)
                this.active = astate;
 
        if(this.active  == ACTIVE_NOT)
+       {
                this.avelocity = '0 0 0';
+               stopsound(this, CH_AMBIENT_SINGLE);
+       }
        else
+       {
                this.avelocity = this.pos1;
+               if(this.noise && this.noise != "")
+               {
+                       _sound(this, CH_AMBIENT_SINGLE, this.noise, VOL_BASE, ATTEN_IDLE);
+               }
+       }
 }
 
 void func_rotating_reset(entity this)
@@ -26,13 +34,20 @@ void func_rotating_reset(entity this)
 
        if(this.spawnflags & FUNC_ROTATING_STARTOFF)
        {
-               this.avelocity = '0 0 0';
-               this.active = ACTIVE_NOT;
+               this.setactive(this, ACTIVE_NOT);
        }
        else
        {
-               this.avelocity = this.pos1;
-               this.active = ACTIVE_ACTIVE;
+               this.setactive(this, ACTIVE_ACTIVE);
+       }
+}
+
+void func_rotating_init_for_player(entity this, entity player)
+{
+       if (this.noise && this.noise != "" && this.active == ACTIVE_ACTIVE && IS_REAL_CLIENT(player))
+       {
+               msg_entity = player;
+               soundto (MSG_ONE, this, CH_AMBIENT_SINGLE, this.noise, VOL_BASE, ATTEN_IDLE);
        }
 }
 
@@ -46,37 +61,24 @@ dmgtime : See above.
 
 spawnfunc(func_rotating)
 {
-       if (this.noise != "")
+       if (this.noise && this.noise != "")
        {
                precache_sound(this.noise);
-               ambientsound(this.origin, this.noise, VOL_BASE, ATTEN_IDLE);
        }
 
        this.setactive = func_rotating_setactive;
 
        if (!this.speed)
                this.speed = 100;
-       // FIXME: test if this turns the right way, then remove this comment (negate as needed)
-       if (this.spawnflags & BIT(2)) // X (untested)
+       if (this.spawnflags & FUNC_ROTATING_XAXIS)
                this.avelocity = '0 0 1' * this.speed;
-       // FIXME: test if this turns the right way, then remove this comment (negate as needed)
-       else if (this.spawnflags & BIT(3)) // Y (untested)
+       else if (this.spawnflags & FUNC_ROTATING_YAXIS)
                this.avelocity = '1 0 0' * this.speed;
-       // FIXME: test if this turns the right way, then remove this comment (negate as needed)
        else // Z
                this.avelocity = '0 1 0' * this.speed;
 
        this.pos1 = this.avelocity;
 
-       // do this after setting pos1, so we can safely reactivate the func_rotating
-       if(this.spawnflags & FUNC_ROTATING_STARTOFF)
-       {
-               this.avelocity = '0 0 0';
-               this.active = ACTIVE_NOT;
-       }
-       else
-               this.active = ACTIVE_ACTIVE;
-
     if(this.dmg && (this.message == ""))
         this.message = " was squished";
     if(this.dmg && (this.message2 == ""))
@@ -99,5 +101,10 @@ spawnfunc(func_rotating)
        setthink(this, SUB_NullThink); // for PushMove
 
        this.reset = func_rotating_reset;
+       this.reset(this);
+
+       // maybe send sound to new players
+       IL_PUSH(g_initforplayer, this);
+       this.init_for_player = func_rotating_init_for_player;
 }
 #endif
index 6f70f09beec2219624baeca92e2cd7deaa104fb4..7c39519e10e9f29d62f38ee0bc76f0dd4b0ed584 100644 (file)
@@ -1 +1,2 @@
 #pragma once
+#include "../spawnflags.qh"
index 69962e54df302216a027a51f458896872d52ee66..5a3e4b1f46d21be8bcbf612cd7fecaca8ba152b7 100644 (file)
@@ -42,6 +42,11 @@ const int DOOR_SECRET_YES_SHOOT = BIT(4); // shootable even if targeted
 const int PARTICLES_IMPULSE = BIT(1);
 const int PARTICLES_VISCULLING = BIT(2);
 
+// rotating
+const int FUNC_ROTATING_XAXIS = BIT(2);
+const int FUNC_ROTATING_YAXIS = BIT(3);
+const int FUNC_ROTATING_STARTOFF = BIT(4);
+
 // jumppads
 const int PUSH_ONCE = BIT(0);
 const int PUSH_SILENT = BIT(1); // not used?