Add a spawnflag to start func_rotating off, and add a basic reset function to func_ro...
authorMario <mario@smbclan.net>
Mon, 28 Aug 2017 00:13:47 +0000 (10:13 +1000)
committerMario <mario@smbclan.net>
Mon, 28 Aug 2017 00:13:47 +0000 (10:13 +1000)
qcsrc/common/triggers/func/rotating.qc

index 9715c25452dcaef75849c5700f6b37c5a09b6b05..6268dcfeb86ea6f5fc7d9b981b7e22dd34240bc9 100644 (file)
@@ -1,5 +1,7 @@
 #include "rotating.qh"
 #ifdef SVQC
+const int FUNC_ROTATING_STARTOFF = BIT(4);
+
 void func_rotating_setactive(entity this, int astate)
 {
        if (astate == ACTIVE_TOGGLE)
@@ -18,6 +20,22 @@ void func_rotating_setactive(entity this, int astate)
                this.avelocity = this.pos1;
 }
 
+void func_rotating_reset(entity this)
+{
+       // TODO: reset angles as well?
+
+       if(this.spawnflags & FUNC_ROTATING_STARTOFF)
+       {
+               this.avelocity = '0 0 0';
+               this.active = ACTIVE_NOT;
+       }
+       else
+       {
+               this.avelocity = this.pos1;
+               this.active = ACTIVE_ACTIVE;
+       }
+}
+
 /*QUAKED spawnfunc_func_rotating (0 .5 .8) ? - - X_AXIS Y_AXIS
 Brush model that spins in place on one axis (default Z).
 speed   : speed to rotate (in degrees per second)
@@ -34,16 +52,15 @@ spawnfunc(func_rotating)
                ambientsound(this.origin, this.noise, VOL_BASE, ATTEN_IDLE);
        }
 
-       this.active = ACTIVE_ACTIVE;
        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 & 4) // X (untested)
+       if (this.spawnflags & BIT(2)) // X (untested)
                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 & 8) // Y (untested)
+       else if (this.spawnflags & BIT(3)) // Y (untested)
                this.avelocity = '1 0 0' * this.speed;
        // FIXME: test if this turns the right way, then remove this comment (negate as needed)
        else // Z
@@ -51,6 +68,15 @@ spawnfunc(func_rotating)
 
        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 == ""))
@@ -72,6 +98,6 @@ spawnfunc(func_rotating)
        this.nextthink = this.ltime + 999999999;
        setthink(this, SUB_NullThink); // for PushMove
 
-       // TODO make a reset function for this one
+       this.reset = func_rotating_reset;
 }
 #endif