return;
}
+#ifdef SVQC
str = min(self.radius, vlen(self.origin - other.origin));
+#elif defined(CSQC)
+ str = min(self.radius, vlen(self.origin - other.move_origin));
+#endif
if(self.falloff == 1)
str = (str / self.radius) * self.strength;
if(self.spawnflags & 64)
{
+#ifdef SVQC
float addspeed = str - other.velocity * normalize(targ.origin - self.origin);
if (addspeed > 0)
{
float accelspeed = min(8 * pushdeltatime * str, addspeed);
other.velocity += accelspeed * normalize(targ.origin - self.origin);
}
+#elif defined(CSQC)
+ float addspeed = str - other.move_velocity * normalize(targ.origin - self.origin);
+ if (addspeed > 0)
+ {
+ float accelspeed = min(8 * pushdeltatime * str, addspeed);
+ other.move_velocity += accelspeed * normalize(targ.origin - self.origin);
+ }
+#endif
}
else
+#ifdef SVQC
other.velocity = other.velocity + normalize(targ.origin - self.origin) * str * pushdeltatime;
- other.flags &= ~FL_ONGROUND;
+#elif defined(CSQC)
+ other.move_velocity = other.move_velocity + normalize(targ.origin - self.origin) * str * pushdeltatime;
+#endif
+
#ifdef SVQC
+ UNSET_ONGROUND(other);
+
UpdateCSQCProjectile(other);
+#elif defined(CSQC)
+ other.move_flags &= ~FL_ONGROUND;
#endif
}
if(!pushdeltatime) return;
// div0: ticrate independent, 1 = identity (not 20)
- other.velocity = other.velocity * pow(self.strength, pushdeltatime);
#ifdef SVQC
+ other.velocity = other.velocity * pow(self.strength, pushdeltatime);
+
UpdateCSQCProjectile(other);
+#elif defined(CSQC)
+ other.move_velocity = other.move_velocity * pow(self.strength, pushdeltatime);
#endif
}
setsize(self, '-1 -1 -1' * self.radius,'1 1 1' * self.radius);
+#ifdef SVQC
str = min(self.radius, vlen(self.origin - other.origin));
+#elif defined(CSQC)
+ str = min(self.radius, vlen(self.origin - other.move_origin));
+#endif
if(self.falloff == 1)
str = (1 - str / self.radius) * self.strength; // 1 in the inside
else
str = self.strength;
- other.velocity = other.velocity + normalize(other.origin - self.origin) * str * pushdeltatime;
#ifdef SVQC
+ other.velocity = other.velocity + normalize(other.origin - self.origin) * str * pushdeltatime;
+
UpdateCSQCProjectile(other);
+#elif defined(CSQC)
+ other.move_velocity = other.move_velocity + normalize(other.move_origin - self.origin) * str * pushdeltatime;
#endif
}
in directional and sperical mode. For damper/accelerator mode this is not nessesary (and has no effect).
*/
#ifdef SVQC
-bool trigger_impulse_send(entity to, int sf)
-{SELFPARAM();
+bool trigger_impulse_send(entity this, entity to, int sf)
+{
WriteHeader(MSG_ENTITY, ENT_CLIENT_TRIGGER_IMPULSE);
- WriteCoord(MSG_ENTITY, self.radius);
- WriteCoord(MSG_ENTITY, self.strength);
- WriteByte(MSG_ENTITY, self.falloff);
- WriteByte(MSG_ENTITY, self.active);
+ WriteInt24_t(MSG_ENTITY, this.spawnflags);
+ WriteCoord(MSG_ENTITY, this.radius);
+ WriteCoord(MSG_ENTITY, this.strength);
+ WriteByte(MSG_ENTITY, this.falloff);
+ WriteByte(MSG_ENTITY, this.active);
- trigger_common_write(true);
+ trigger_common_write(this, true);
return true;
}
void trigger_impulse_link()
{
- //Net_LinkEntity(self, 0, false, trigger_impulse_send);
+ trigger_link(self, trigger_impulse_send);
}
spawnfunc(trigger_impulse)
{
self.active = ACTIVE_ACTIVE;
- EXACTTRIGGER_INIT;
+ trigger_init(self);
+
if(self.radius)
{
if(!self.strength) self.strength = 2000 * autocvar_g_triggerimpulse_radial_multiplier;
#elif defined(CSQC)
NET_HANDLE(ENT_CLIENT_TRIGGER_IMPULSE, bool isnew)
{
+ self.spawnflags = ReadInt24_t();
self.radius = ReadCoord();
self.strength = ReadCoord();
self.falloff = ReadByte();
self.classname = "trigger_impulse";
self.solid = SOLID_TRIGGER;
self.entremove = trigger_remove_generic;
- self.draw = trigger_draw_generic;
+ //self.draw = trigger_draw_generic;
self.drawmask = MASK_NORMAL;
self.move_time = time;
- if(self.radius) { self.trigger_touch = trigger_impulse_touch3; }
- else if(self.target) { self.trigger_touch = trigger_impulse_touch1; }
- else { self.trigger_touch = trigger_impulse_touch2; }
+ if(self.radius) { self.move_touch = trigger_impulse_touch3; }
+ else if(self.target) { self.move_touch = trigger_impulse_touch1; }
+ else { self.move_touch = trigger_impulse_touch2; }
}
#endif