X-Git-Url: http://git.xonotic.org/?a=blobdiff_plain;f=qcsrc%2Fcommon%2Ftriggers%2Ftrigger%2Fjumppads.qc;h=1f2f84a7d8602c64a4386b0e41d54a95e0103569;hb=661c5365ee3261447a593813946fb8975a7097b0;hp=67659034afea854e158e3221021bc657129aeb1f;hpb=719ba01817465b96db552e18c7f277721d8dbb7e;p=xonotic%2Fxonotic-data.pk3dir.git diff --git a/qcsrc/common/triggers/trigger/jumppads.qc b/qcsrc/common/triggers/trigger/jumppads.qc index 67659034a..1f2f84a7d 100644 --- a/qcsrc/common/triggers/trigger/jumppads.qc +++ b/qcsrc/common/triggers/trigger/jumppads.qc @@ -13,6 +13,9 @@ void trigger_push_use() } #endif +REGISTER_NET_LINKED(ENT_CLIENT_TRIGGER_PUSH) +REGISTER_NET_LINKED(ENT_CLIENT_TARGET_PUSH) + /* trigger_push_calculatevelocity @@ -34,7 +37,7 @@ vector trigger_push_calculatevelocity(vector org, entity tgt, float ht) torg = tgt.origin + (tgt.mins + tgt.maxs) * 0.5; - grav = PHYS_GRAVITY; + grav = PHYS_GRAVITY(other); if(PHYS_ENTGRAVITY(other)) grav *= PHYS_ENTGRAVITY(other); @@ -128,78 +131,94 @@ vector trigger_push_calculatevelocity(vector org, entity tgt, float ht) void trigger_push_touch() {SELFPARAM(); - if (self.active == ACTIVE_NOT) + if (this.active == ACTIVE_NOT) return; -#ifdef SVQC if (!isPushable(other)) return; -#endif - if(self.team) - if(((self.spawnflags & 4) == 0) == (DIFF_TEAM(self, other))) + if(this.team) + if(((this.spawnflags & 4) == 0) == (DIFF_TEAM(this, other))) return; EXACTTRIGGER_TOUCH; - if(self.enemy) + if(this.enemy) { - other.velocity = trigger_push_calculatevelocity(other.origin, self.enemy, self.height); + other.velocity = trigger_push_calculatevelocity(other.origin, this.enemy, this.height); other.move_velocity = other.velocity; } - else if(self.target) + else if(this.target) { entity e; RandomSelection_Init(); - for(e = world; (e = find(e, targetname, self.target)); ) + for(e = world; (e = find(e, targetname, this.target)); ) { if(e.cnt) RandomSelection_Add(e, 0, string_null, e.cnt, 1); else RandomSelection_Add(e, 0, string_null, 1, 1); } - other.velocity = trigger_push_calculatevelocity(other.origin, RandomSelection_chosen_ent, self.height); + other.velocity = trigger_push_calculatevelocity(other.origin, RandomSelection_chosen_ent, this.height); other.move_velocity = other.velocity; } else { - other.velocity = self.movedir; + other.velocity = this.movedir; other.move_velocity = other.velocity; } +#ifdef SVQC 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 if (IS_PLAYER(other)) { // reset tracking of oldvelocity for impact damage (sudden velocity changes) other.oldvelocity = other.velocity; - if(self.pushltime < time) // prevent "snorring" sound when a player hits the jumppad more than once + if(this.pushltime < time) // prevent "snorring" sound when a player hits the jumppad more than once { // flash when activated Send_Effect(EFFECT_JUMPPAD, other.origin, other.velocity, 1); - _sound (other, CH_TRIGGER, self.noise, VOL_BASE, ATTEN_NORM); - self.pushltime = time + 0.2; + _sound (other, CH_TRIGGER, this.noise, VOL_BASE, ATTEN_NORM); + this.pushltime = time + 0.2; } if(IS_REAL_CLIENT(other) || IS_BOT_CLIENT(other)) { bool found = false; for(int i = 0; i < other.jumppadcount && i < NUM_JUMPPADSUSED; ++i) - if(other.(jumppadsused[i]) == self) + if(other.(jumppadsused[i]) == this) found = true; if(!found) { - other.(jumppadsused[other.jumppadcount % NUM_JUMPPADSUSED]) = self; + other.(jumppadsused[other.jumppadcount % NUM_JUMPPADSUSED]) = this; other.jumppadcount = other.jumppadcount + 1; } if(IS_REAL_CLIENT(other)) { - if(self.message) - centerprint(other, self.message); + if(this.message) + centerprint(other, this.message); } else other.lastteleporttime = time; @@ -215,10 +234,10 @@ void trigger_push_touch() other.istypefrag = 0; } - if(self.enemy.target) + if(this.enemy.target) { activator = other; - WITH(entity, self, self.enemy, SUB_UseTargets()); + WITH(entity, self, this.enemy, SUB_UseTargets()); } if (other.flags & FL_PROJECTILE) @@ -238,11 +257,17 @@ void trigger_push_touch() UpdateCSQCProjectile(other); } - if (self.spawnflags & PUSH_ONCE) + /*if (other.flags & FL_ITEM) { - self.touch = func_null; - self.think = SUB_Remove; - self.nextthink = time; + ItemUpdate(other); + other.SendFlags |= ISF_DROP; + }*/ + + if (this.spawnflags & PUSH_ONCE) + { + this.touch = func_null; + this.think = SUB_Remove_self; + this.nextthink = time; } #endif } @@ -310,31 +335,21 @@ void trigger_push_findtarget() } trigger_push_link(); - defer(0.1, trigger_push_updatelink); + defer(self, 0.1, trigger_push_updatelink); #endif } #ifdef SVQC -float trigger_push_send(entity to, float sf) -{SELFPARAM(); - WriteByte(MSG_ENTITY, ENT_CLIENT_TRIGGER_PUSH); - WriteByte(MSG_ENTITY, sf); - - if(sf & 1) - { - WriteByte(MSG_ENTITY, self.team); - WriteInt24_t(MSG_ENTITY, self.spawnflags); - WriteByte(MSG_ENTITY, self.active); - WriteByte(MSG_ENTITY, self.height); +float trigger_push_send(entity this, entity to, float sf) +{ + WriteHeader(MSG_ENTITY, ENT_CLIENT_TRIGGER_PUSH); - trigger_common_write(true); - } + WriteByte(MSG_ENTITY, self.team); + WriteInt24_t(MSG_ENTITY, self.spawnflags); + WriteByte(MSG_ENTITY, self.active); + WriteCoord(MSG_ENTITY, self.height); - if(sf & 2) - { - WriteByte(MSG_ENTITY, self.team); - WriteByte(MSG_ENTITY, self.active); - } + trigger_common_write(self, true); return true; } @@ -346,10 +361,9 @@ void trigger_push_updatelink() void trigger_push_link() { - //Net_LinkEntity(self, false, 0, trigger_push_send); + trigger_link(self, trigger_push_send); } -#endif -#ifdef SVQC + /* * ENTITY PARAMETERS: * @@ -366,7 +380,7 @@ spawnfunc(trigger_push) { SetMovedir(self); - EXACTTRIGGER_INIT; + trigger_init(self); self.active = ACTIVE_ACTIVE; self.use = trigger_push_use; @@ -388,7 +402,7 @@ spawnfunc(trigger_push) bool target_push_send(entity this, entity to, float sf) { - WriteByte(MSG_ENTITY, ENT_CLIENT_TARGET_PUSH); + WriteHeader(MSG_ENTITY, ENT_CLIENT_TARGET_PUSH); WriteByte(MSG_ENTITY, self.cnt); WriteString(MSG_ENTITY, self.targetname); @@ -396,12 +410,17 @@ bool target_push_send(entity this, entity to, float sf) WriteCoord(MSG_ENTITY, self.origin_y); WriteCoord(MSG_ENTITY, self.origin_z); + WriteAngle(MSG_ENTITY, self.angles_x); + WriteAngle(MSG_ENTITY, self.angles_y); + WriteAngle(MSG_ENTITY, self.angles_z); + return true; } void target_push_link() {SELFPARAM(); - //Net_LinkEntity(self, false, 0, target_push_send); + BITSET_ASSIGN(self.effects, EF_NODEPTHTEST); + Net_LinkEntity(self, false, 0, target_push_send); //self.SendFlags |= 1; // update } @@ -409,38 +428,29 @@ spawnfunc(target_push) { target_push_link(); } spawnfunc(info_notnull) { target_push_link(); } spawnfunc(target_position) { make_pure(this); target_push_link(); } -#endif +#elif defined(CSQC) -#ifdef CSQC +NET_HANDLE(ENT_CLIENT_TRIGGER_PUSH, bool isnew) +{ + make_pure(this); -void ent_trigger_push() -{SELFPARAM(); - float sf = ReadByte(); + self.classname = "jumppad"; + int mytm = ReadByte(); if(mytm) { self.team = mytm - 1; } + self.spawnflags = ReadInt24_t(); + self.active = ReadByte(); + self.height = ReadCoord(); - if(sf & 1) - { - self.classname = "jumppad"; - int mytm = ReadByte(); if(mytm) { self.team = mytm - 1; } - self.spawnflags = ReadInt24_t(); - self.active = ReadByte(); - self.height = ReadByte(); - - trigger_common_read(true); - - self.entremove = trigger_remove_generic; - self.solid = SOLID_TRIGGER; - self.draw = trigger_draw_generic; - self.trigger_touch = trigger_push_touch; - self.drawmask = MASK_NORMAL; - self.move_time = time; - trigger_push_findtarget(); - } + trigger_common_read(true); - if(sf & 2) - { - self.team = ReadByte(); - self.active = ReadByte(); - } + self.entremove = trigger_remove_generic; + self.solid = SOLID_TRIGGER; + //self.draw = trigger_draw_generic; + self.move_touch = trigger_push_touch; + self.drawmask = MASK_NORMAL; + self.move_time = time; + defer(self, 0.25, trigger_push_findtarget); + + return true; } void target_push_remove() @@ -454,14 +464,22 @@ void target_push_remove() self.targetname = string_null; } -void ent_target_push() -{SELFPARAM(); +NET_HANDLE(ENT_CLIENT_TARGET_PUSH, bool isnew) +{ + make_pure(this); self.classname = "push_target"; self.cnt = ReadByte(); self.targetname = strzone(ReadString()); self.origin_x = ReadCoord(); self.origin_y = ReadCoord(); self.origin_z = ReadCoord(); + + self.angles_x = ReadAngle(); + self.angles_y = ReadAngle(); + self.angles_z = ReadAngle(); + + return = true; + setorigin(self, self.origin); self.drawmask = MASK_NORMAL;