From: Juhu <5894800-Juhu_@users.noreply.gitlab.com> Date: Fri, 2 Jun 2023 13:43:25 +0000 (+0200) Subject: Merge branch 'master' into Juhu/velocity_pads X-Git-Url: https://git.rm.cloudns.org/?a=commitdiff_plain;h=db4b7060ae4873483005f94903029188eb60d649;p=xonotic%2Fxonotic-data.pk3dir.git Merge branch 'master' into Juhu/velocity_pads make trigger_push_velocity code compatible with the latest ExactTrigger changes --- db4b7060ae4873483005f94903029188eb60d649 diff --cc qcsrc/common/mapobjects/trigger/jumppads.qc index 8c7ca3e9c4,0ff3ba0a99..1f91619ed6 --- a/qcsrc/common/mapobjects/trigger/jumppads.qc +++ b/qcsrc/common/mapobjects/trigger/jumppads.qc @@@ -241,35 -143,12 +249,32 @@@ bool jumppad_push(entity this, entity t vector org = targ.origin; - if(STAT(Q3COMPAT)) - { - org.z += targ.mins_z; - org.z += 1; // off by 1! - } + if(Q3COMPAT_COMMON || this.spawnflags & PUSH_STATIC) + org = (this.absmin + this.absmax) * 0.5; + bool already_pushed = false; + if(is_velocity_pad) // remember velocity jump pads + { + if(this == targ.last_pushed || (targ.last_pushed && !STAT(Q3COMPAT, targ))) // if q3compat is active overwrite last stored jump pad, otherwise ignore + { + already_pushed = true; + } + else + { + targ.last_pushed = this; // may be briefly out of sync between client and server if client prediction is toggled + } + } + if(this.enemy) { - targ.velocity = trigger_push_calculatevelocity(org, this.enemy, this.height, targ); + if(!is_velocity_pad) + { + targ.velocity = trigger_push_calculatevelocity(org, this.enemy, this.height, targ); + } + else + { + targ.velocity = trigger_push_velocity_calculatevelocity(this, org, this.enemy, this.speed, this.count, targ, already_pushed); + } } else if(this.target && this.target != "") { @@@ -800,29 -629,6 +805,30 @@@ spawnfunc(trigger_push InitializeEntity(this, trigger_push_findtarget, INITPRIO_FINDTARGET); } +/* + * ENTITY PARAMETERS: + * + * target: this points to the target_position to which the player will jump. + * speed: XY speed for player-directional velocity pads - either sets or adds to the player's horizontal velocity. + * count: Z speed for player-directional velocity pads - either sets or adds to the player's vertical velocity. + */ +spawnfunc(trigger_push_velocity) +{ - trigger_init(this); ++ EXACTTRIGGER_INIT; ++ BITSET_ASSIGN(this.effects, EF_NODEPTHTEST); + + this.active = ACTIVE_ACTIVE; + this.use = trigger_push_use; + settouch(this, trigger_push_velocity_touch); + + // normal push setup + if (!this.noise) + this.noise = "misc/jumppad.wav"; + precache_sound (this.noise); + + trigger_push_velocity_link(this); // link it now +} + bool target_push_send(entity this, entity to, float sf) { diff --cc qcsrc/common/mapobjects/trigger/jumppads.qh index 7b3a9caede,c994bc6108..7146cc52cb --- a/qcsrc/common/mapobjects/trigger/jumppads.qh +++ b/qcsrc/common/mapobjects/trigger/jumppads.qh @@@ -3,15 -3,8 +3,16 @@@ const int PUSH_ONCE = BIT(0); // legacy, deactivate with relay instead const int PUSH_SILENT = BIT(1); // not used? + const int PUSH_STATIC = BIT(12); // xonotic-only, Q3 already behaves like this by default +#define PUSH_VELOCITY_PLAYERDIR_XY BIT(0) +#define PUSH_VELOCITY_ADD_XY BIT(1) +#define PUSH_VELOCITY_PLAYERDIR_Z BIT(2) +#define PUSH_VELOCITY_ADD_Z BIT(3) +#define PUSH_VELOCITY_BIDIRECTIONAL_XY BIT(4) +#define PUSH_VELOCITY_BIDIRECTIONAL_Z BIT(5) +#define PUSH_VELOCITY_CLAMP_NEGATIVE_ADDS BIT(6) + IntrusiveList g_jumppads; STATIC_INIT(g_jumppads) { g_jumppads = IL_NEW(); } diff --cc qcsrc/common/util.qc index 368ffd73fe,df54e3536b..08bd71298b --- a/qcsrc/common/util.qc +++ b/qcsrc/common/util.qc @@@ -1675,21 -1677,6 +1677,21 @@@ void Skeleton_SetBones(entity e string to_execute_next_frame; void execute_next_frame() { +#ifdef SVQC + IL_EACH(g_moveables, it.last_pushed, + { - if(WarpZoneLib_ExactTrigger_Touch(it.last_pushed, it)) ++ if(!WarpZoneLib_ExactTrigger_Touch(it.last_pushed, it, false)) + { + it.last_pushed = NULL; + } + }); +#elif defined(CSQC) - if(csqcplayer.last_pushed && WarpZoneLib_ExactTrigger_Touch(csqcplayer.last_pushed, csqcplayer)) ++ if(csqcplayer.last_pushed && !WarpZoneLib_ExactTrigger_Touch(csqcplayer.last_pushed, csqcplayer, false)) + { + csqcplayer.last_pushed = NULL; + } +#endif + if(to_execute_next_frame) { localcmd("\n", to_execute_next_frame, "\n");