X-Git-Url: http://de.git.xonotic.org/?p=xonotic%2Fxonotic-data.pk3dir.git;a=blobdiff_plain;f=qcsrc%2Fcommon%2Ftriggers%2Ftrigger%2Fjumppads.qc;h=de8458e9f8bc15abe5c63f034c35164c02f3ff6f;hp=8aa80a031259cce4b13f127db3c5a52d739e6747;hb=66189615a05cc66dd0ee544a2bbc841c4f426193;hpb=b058f0eb96621b1cbdd58caf1eef9236d92c4913 diff --git a/qcsrc/common/triggers/trigger/jumppads.qc b/qcsrc/common/triggers/trigger/jumppads.qc index 8aa80a031..de8458e9f 100644 --- a/qcsrc/common/triggers/trigger/jumppads.qc +++ b/qcsrc/common/triggers/trigger/jumppads.qc @@ -1,7 +1,7 @@ // TODO: split target_push and put it in the target folder #ifdef SVQC #include "jumppads.qh" -#include "../../movetypes/movetypes.qh" +#include void trigger_push_use() {SELFPARAM(); @@ -134,10 +134,8 @@ void trigger_push_touch() if (this.active == ACTIVE_NOT) return; -#ifdef SVQC if (!isPushable(other)) return; -#endif if(this.team) if(((this.spawnflags & 4) == 0) == (DIFF_TEAM(this, other))) @@ -174,6 +172,22 @@ void trigger_push_touch() UNSET_ONGROUND(other); #elif defined(CSQC) other.move_flags &= ~FL_ONGROUND; + + if (other.flags & FL_PROJECTILE) + { + other.move_angles = vectoangles (other.move_velocity); + switch(other.move_movetype) + { + case MOVETYPE_FLY: + other.move_movetype = MOVETYPE_TOSS; + other.gravity = 1; + break; + case MOVETYPE_BOUNCEMISSILE: + other.move_movetype = MOVETYPE_BOUNCE; + other.gravity = 1; + break; + } + } #endif #ifdef SVQC @@ -209,7 +223,7 @@ void trigger_push_touch() else other.lastteleporttime = time; - if (other.deadflag == DEAD_NO) + if (!IS_DEAD(other)) animdecide_setaction(other, ANIMACTION_JUMP, true); } else @@ -243,11 +257,11 @@ void trigger_push_touch() UpdateCSQCProjectile(other); } - if (other.flags & FL_ITEM) + /*if (other.flags & FL_ITEM) { ItemUpdate(other); other.SendFlags |= ISF_DROP; - } + }*/ if (this.spawnflags & PUSH_ONCE) { @@ -269,7 +283,7 @@ void trigger_push_findtarget() // first calculate a typical start point for the jump org = (self.absmin + self.absmax) * 0.5; - org_z = self.absmax.z - PL_MIN.z; + org_z = self.absmax.z - STAT(PL_MIN, NULL).z; if (self.target) { @@ -280,7 +294,7 @@ void trigger_push_findtarget() #ifdef SVQC entity e = spawn(); setorigin(e, org); - setsize(e, PL_MIN, PL_MAX); + setsize(e, STAT(PL_MIN, NULL), STAT(PL_MAX, NULL)); e.velocity = trigger_push_calculatevelocity(org, t, self.height); tracetoss(e, e); if(e.movetype == MOVETYPE_NONE) @@ -313,7 +327,7 @@ void trigger_push_findtarget() { entity e = spawn(); setorigin(e, org); - setsize(e, PL_MIN, PL_MAX); + setsize(e, STAT(PL_MIN, NULL), STAT(PL_MAX, NULL)); e.velocity = self.movedir; tracetoss(e, e); waypoint_spawnforteleporter(self, trace_endpos, vlen(trace_endpos - org) / vlen(e.velocity)); @@ -347,6 +361,7 @@ void trigger_push_updatelink() void trigger_push_link() { + SELFPARAM(); trigger_link(self, trigger_push_send); } @@ -403,16 +418,23 @@ bool target_push_send(entity this, entity to, float sf) return true; } -void target_push_link() -{SELFPARAM(); - BITSET_ASSIGN(self.effects, EF_NODEPTHTEST); - Net_LinkEntity(self, false, 0, target_push_send); - //self.SendFlags |= 1; // update +void target_push_link(entity this) +{ + BITSET_ASSIGN(this.effects, EF_NODEPTHTEST); + Net_LinkEntity(this, false, 0, target_push_send); + //this.SendFlags |= 1; // update } -spawnfunc(target_push) { target_push_link(); } -spawnfunc(info_notnull) { target_push_link(); } -spawnfunc(target_position) { make_pure(this); target_push_link(); } +void target_push_init(entity this) +{ + this.mangle = this.angles; + setorigin(this, this.origin); + target_push_link(this); +} + +spawnfunc(target_push) { target_push_init(this); } +spawnfunc(info_notnull) { target_push_init(this); } +spawnfunc(target_position) { target_push_init(this); } #elif defined(CSQC) @@ -439,20 +461,19 @@ NET_HANDLE(ENT_CLIENT_TRIGGER_PUSH, bool isnew) return true; } -void target_push_remove() -{SELFPARAM(); - if(self.classname) - strunzone(self.classname); - self.classname = string_null; +void target_push_remove(entity this) +{ + if(this.classname) + strunzone(this.classname); + this.classname = string_null; - if(self.targetname) - strunzone(self.targetname); - self.targetname = string_null; + if(this.targetname) + strunzone(this.targetname); + this.targetname = string_null; } NET_HANDLE(ENT_CLIENT_TARGET_PUSH, bool isnew) { - make_pure(this); self.classname = "push_target"; self.cnt = ReadByte(); self.targetname = strzone(ReadString());