r4228 - in trunk/data: qcsrc/server scripts
DONOTREPLY at icculus.org
DONOTREPLY at icculus.org
Fri Aug 29 03:43:11 EDT 2008
Author: div0
Date: 2008-08-29 03:42:51 -0400 (Fri, 29 Aug 2008)
New Revision: 4228
Modified:
trunk/data/qcsrc/server/defs.qh
trunk/data/qcsrc/server/g_triggers.qc
trunk/data/qcsrc/server/t_plats.qc
trunk/data/scripts/entities.def
Log:
trigger_multivibrator
Modified: trunk/data/qcsrc/server/defs.qh
===================================================================
--- trunk/data/qcsrc/server/defs.qh 2008-08-29 06:13:22 UTC (rev 4227)
+++ trunk/data/qcsrc/server/defs.qh 2008-08-29 07:42:51 UTC (rev 4228)
@@ -489,3 +489,4 @@
string clientstuff;
.float stat_sys_ticrate;
+.float phase;
Modified: trunk/data/qcsrc/server/g_triggers.qc
===================================================================
--- trunk/data/qcsrc/server/g_triggers.qc 2008-08-29 06:13:22 UTC (rev 4227)
+++ trunk/data/qcsrc/server/g_triggers.qc 2008-08-29 07:42:51 UTC (rev 4228)
@@ -1099,6 +1099,75 @@
self.state = 0;
}
+void multivibrator_send()
+{
+ float newstate;
+ float cyclestart;
+
+ cyclestart = floor((time + self.phase) / (self.wait + self.respawntime)) * (self.wait + self.respawntime) - self.phase;
+
+ newstate = (time < cyclestart + self.wait);
+
+ if(self.state != newstate)
+ SUB_UseTargets();
+ self.state = newstate;
+
+ if(self.state)
+ self.nextthink = cyclestart + self.wait + 0.01;
+ else
+ self.nextthink = cyclestart + self.wait + self.respawntime + 0.01;
+}
+
+void multivibrator_toggle()
+{
+ if(self.nextthink == 0)
+ {
+ multivibrator_send();
+ }
+ else
+ {
+ if(self.state)
+ {
+ SUB_UseTargets();
+ self.state = 0;
+ }
+ self.nextthink = 0;
+ }
+}
+
+/*QUAKED trigger_multivibrator (.5 .5 .5) (-8 -8 -8) (8 8 8) START_ON
+"Multivibrator" trigger gate... repeatedly sends trigger events. When triggered, turns on or off.
+-------- KEYS --------
+target: trigger all entities with this targetname when it goes off
+targetname: name that identifies this entity so it can be triggered; when off, it always uses the OFF state
+phase: offset of the timing
+wait: "on" cycle time (default: 1)
+respawntime: "off" cycle time (default: same as wait)
+-------- SPAWNFLAGS --------
+START_ON: assume it is already turned on (when targeted)
+*/
+void spawnfunc_trigger_multivibrator()
+{
+ if(!self.wait)
+ self.wait = 1;
+ if(!self.respawntime)
+ self.respawntime = self.wait;
+
+ self.state = 0;
+ self.use = multivibrator_toggle;
+ self.think = multivibrator_send;
+ self.nextthink = time;
+
+ IFTARGETED
+ {
+ if(!(self.spawnflags & 1))
+ self.nextthink = 0; // wait for a trigger event
+ }
+ else
+ self.nextthink = time;
+}
+
+
void follow_init()
{
entity src, dst;
Modified: trunk/data/qcsrc/server/t_plats.qc
===================================================================
--- trunk/data/qcsrc/server/t_plats.qc 2008-08-29 06:13:22 UTC (rev 4227)
+++ trunk/data/qcsrc/server/t_plats.qc 2008-08-29 07:42:51 UTC (rev 4228)
@@ -343,7 +343,6 @@
};
.float height;
-.float phase;
void func_bobbing_controller_think()
{
local vector v;
Modified: trunk/data/scripts/entities.def
===================================================================
--- trunk/data/scripts/entities.def 2008-08-29 06:13:22 UTC (rev 4227)
+++ trunk/data/scripts/entities.def 2008-08-29 07:42:51 UTC (rev 4228)
@@ -641,7 +641,6 @@
target: The targetname of the target_objective you want to manipulate.
targetname: Name for other entities to target this entity.
dmg: The amount of "health"-points you want to subtract from the objective health. Defaults to 101.
--------- SPAWNFLAGS --------
*/
/*QUAKED target_position (0 .5 0) (-8 -8 -8) (8 8 8)
@@ -951,6 +950,18 @@
FIXED: do pulses of fixed length (so the "off" delay is NOT extended as usual and new events are just ignored)
*/
+/*QUAKED trigger_multivibrator (.5 .5 .5) (-8 -8 -8) (8 8 8) START_ON
+"Multivibrator" trigger gate... repeatedly sends trigger events. When triggered, turns on or off.
+-------- KEYS --------
+target: trigger all entities with this targetname when it goes off
+targetname: name that identifies this entity so it can be triggered
+phase: phase of the multivibrator (it is added to the time)
+wait: "on" cycle time (default: 1)
+respawntime: "off" cycle time (default: same as wait)
+-------- SPAWNFLAGS --------
+START_ON: assume it is already turned on (when targeted)
+*/
+
/*QUAKED misc_follow (.5 .5 .5) (-8 -8 -8) (8 8 8)
Makes one entity follow another. Will not work with all entities.
-------- KEYS --------
More information about the nexuiz-commits
mailing list