]> de.git.xonotic.org Git - xonotic/xonotic-data.pk3dir.git/blobdiff - qcsrc/common/triggers/func/button.qc
Merge branch 'master' into Lyberta/RandomItems
[xonotic/xonotic-data.pk3dir.git] / qcsrc / common / triggers / func / button.qc
index 5584f9ffa167bbb476fbd16ce6804e08ba3c836f..8ded50d16b2da0d88a35c68eb333006786a15636 100644 (file)
@@ -1,3 +1,4 @@
+#include "button.qh"
 #ifdef SVQC
 // button and multiple button
 
@@ -6,47 +7,50 @@ void button_return(entity this);
 
 void button_wait(entity this)
 {
-       self.state = STATE_TOP;
-       self.SUB_NEXTTHINK = self.SUB_LTIME + self.wait;
-       SUB_THINK(self, button_return);
-       SUB_UseTargets(self, self.enemy, NULL);
-       self.frame = 1;                 // use alternate textures
+       this.state = STATE_TOP;
+       if(this.wait >= 0)
+       {
+               this.nextthink = this.ltime + this.wait;
+               setthink(this, button_return);
+       }
+       SUB_UseTargets(this, this.enemy, NULL);
+       this.frame = 1;                 // use alternate textures
 }
 
 void button_done(entity this)
 {
-       self.state = STATE_BOTTOM;
+       this.state = STATE_BOTTOM;
 }
 
 void button_return(entity this)
 {
-       self.state = STATE_DOWN;
-       SUB_CalcMove (self.pos1, TSPEED_LINEAR, self.speed, button_done);
-       self.frame = 0;                 // use normal textures
-       if (self.health)
-               self.takedamage = DAMAGE_YES;   // can be shot again
+       this.state = STATE_DOWN;
+       SUB_CalcMove (this, this.pos1, TSPEED_LINEAR, this.speed, button_done);
+       this.frame = 0;                 // use normal textures
+       if (this.health)
+               this.takedamage = DAMAGE_YES;   // can be shot again
 }
 
 
-void button_blocked()
+void button_blocked(entity this, entity blocker)
 {
        // do nothing, just don't come all the way back out
 }
 
 
-void button_fire()
-{SELFPARAM();
-       self.health = self.max_health;
-       self.takedamage = DAMAGE_NO;    // will be reset upon return
+void button_fire(entity this)
+{
+       this.health = this.max_health;
+       this.takedamage = DAMAGE_NO;    // will be reset upon return
 
-       if (self.state == STATE_UP || self.state == STATE_TOP)
+       if (this.state == STATE_UP || this.state == STATE_TOP)
                return;
 
-       if (self.noise != "")
-               _sound (self, CH_TRIGGER, self.noise, VOL_BASE, ATTEN_NORM);
+       if (this.noise != "")
+               _sound (this, CH_TRIGGER, this.noise, VOL_BASE, ATTEN_NORM);
 
-       self.state = STATE_UP;
-       SUB_CalcMove (self.pos2, TSPEED_LINEAR, self.speed, button_wait);
+       this.state = STATE_UP;
+       SUB_CalcMove (this, this.pos2, TSPEED_LINEAR, this.speed, button_wait);
 }
 
 void button_reset(entity this)
@@ -55,6 +59,9 @@ void button_reset(entity this)
        setorigin(this, this.pos1);
        this.frame = 0;                 // use normal textures
        this.state = STATE_BOTTOM;
+       this.velocity = '0 0 0';
+       setthink(this, func_null);
+       this.nextthink = 0;
        if (this.health)
                this.takedamage = DAMAGE_YES;   // can be shot again
 }
@@ -65,21 +72,21 @@ void button_use(entity this, entity actor, entity trigger)
                return;
 
        this.enemy = actor;
-       WITHSELF(this, button_fire());
+       button_fire(this);
 }
 
-void button_touch(entity this)
+void button_touch(entity this, entity toucher)
 {
-       if (!other)
+       if (!toucher)
                return;
-       if (!other.iscreature)
+       if (!toucher.iscreature)
                return;
-       if(other.velocity * self.movedir < 0)
+       if(toucher.velocity * this.movedir < 0)
                return;
-       self.enemy = other;
-       if (other.owner)
-               self.enemy = other.owner;
-       button_fire ();
+       this.enemy = toucher;
+       if (toucher.owner)
+               this.enemy = toucher.owner;
+       button_fire (this);
 }
 
 void button_damage(entity this, entity inflictor, entity attacker, float damage, int deathtype, vector hitloc, vector force)
@@ -90,8 +97,8 @@ void button_damage(entity this, entity inflictor, entity attacker, float damage,
        this.health = this.health - damage;
        if (this.health <= 0)
        {
-               this.enemy = damage_attacker;
-               WITHSELF(this, button_fire());
+               this.enemy = attacker;
+               button_fire(this);
        }
 }
 
@@ -119,7 +126,7 @@ spawnfunc(func_button)
                return;
        this.effects |= EF_LOWPRECISION;
 
-       this.blocked = button_blocked;
+       setblocked(this, button_blocked);
        this.use = button_use;
 
 //     if (this.health == 0) // all buttons are now shootable
@@ -149,6 +156,8 @@ spawnfunc(func_button)
        this.pos2 = this.pos1 + this.movedir*(fabs(this.movedir*this.size) - this.lip);
     this.flags |= FL_NOTARGET;
 
+    this.reset = button_reset;
+
        button_reset(this);
 }
 #endif