2 .entity trigger_gravity_check;
3 void trigger_gravity_remove(entity own)
5 if(own.trigger_gravity_check.owner == own)
7 UpdateCSQCProjectile(own);
8 own.gravity = own.trigger_gravity_check.gravity;
9 delete(own.trigger_gravity_check);
12 backtrace("Removing a trigger_gravity_check with no valid owner");
13 own.trigger_gravity_check = NULL;
15 void trigger_gravity_check_think(entity this)
17 // This spawns when a player enters the gravity zone and checks if he left.
18 // Each frame, this.count is set to 2 by trigger_gravity_touch() and decreased by 1 here.
19 // It the player has left the gravity trigger, this will be allowed to reach 0 and indicate that.
22 if(this.owner.trigger_gravity_check == this)
23 trigger_gravity_remove(this.owner);
31 this.nextthink = time;
35 void trigger_gravity_use(entity this, entity actor, entity trigger)
37 this.state = !this.state;
40 void trigger_gravity_touch(entity this, entity toucher)
44 if(this.state != true)
47 EXACTTRIGGER_TOUCH(this, toucher);
51 if (!(this.spawnflags & 1))
53 if(toucher.trigger_gravity_check)
55 if(this == toucher.trigger_gravity_check.enemy)
58 toucher.trigger_gravity_check.count = 2; // gravity one more frame...
63 if(this.cnt > toucher.trigger_gravity_check.enemy.cnt)
64 trigger_gravity_remove(toucher);
68 toucher.trigger_gravity_check = spawn();
69 toucher.trigger_gravity_check.enemy = this;
70 toucher.trigger_gravity_check.owner = toucher;
71 toucher.trigger_gravity_check.gravity = toucher.gravity;
72 setthink(toucher.trigger_gravity_check, trigger_gravity_check_think);
73 toucher.trigger_gravity_check.nextthink = time;
74 toucher.trigger_gravity_check.count = 2;
79 if (toucher.gravity != g)
83 _sound (toucher, CH_TRIGGER, this.noise, VOL_BASE, ATTEN_NORM);
84 UpdateCSQCProjectile(this.owner);
88 spawnfunc(trigger_gravity)
94 settouch(this, trigger_gravity_touch);
96 precache_sound(this.noise);
101 this.use = trigger_gravity_use;
102 if(this.spawnflags & 2)