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");