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