@@ -1712,6 +1712,10 @@ void CTriggerPush::Touch(CBaseEntity *pOther)
1712
1712
}
1713
1713
}
1714
1714
1715
+ #define SF_TELEPORT_KEEP_ANGLES 256
1716
+ #define SF_TELEPORT_KEEP_VELOCITY 512
1717
+ #define SF_TELEPORT_REDIRECT_VELOCITY_WITH_YAW_DESTINATION 1024
1718
+
1715
1719
void CBaseTrigger::TeleportTouch (CBaseEntity *pOther)
1716
1720
{
1717
1721
entvars_t *pevToucher = pOther->pev ;
@@ -1766,15 +1770,40 @@ void CBaseTrigger::TeleportTouch(CBaseEntity *pOther)
1766
1770
1767
1771
UTIL_SetOrigin (pevToucher, tmp);
1768
1772
1769
- pevToucher->angles = pentTarget->v .angles ;
1773
+ #ifdef REGAMEDLL_ADD
1774
+ if (!(pev->spawnflags & SF_TELEPORT_KEEP_ANGLES))
1775
+ #endif
1776
+ {
1777
+ pevToucher->angles = pentTarget->v .angles ;
1770
1778
1771
- if (pOther->IsPlayer ())
1779
+ if (pOther->IsPlayer ())
1780
+ {
1781
+ pevToucher->v_angle = pentTarget->v .angles ;
1782
+ }
1783
+
1784
+ pevToucher->fixangle = 1 ;
1785
+ }
1786
+
1787
+ #ifdef REGAMEDLL_ADD
1788
+ if (!(pev->spawnflags & SF_TELEPORT_KEEP_VELOCITY))
1789
+ #endif
1772
1790
{
1773
- pevToucher->v_angle = pentTarget-> v . angles ;
1791
+ pevToucher->velocity = pevToucher-> basevelocity = g_vecZero ;
1774
1792
}
1775
1793
1776
- pevToucher->fixangle = 1 ;
1777
- pevToucher->velocity = pevToucher->basevelocity = g_vecZero;
1794
+ #ifdef REGAMEDLL_ADD
1795
+ if ((pev->spawnflags & SF_TELEPORT_REDIRECT_VELOCITY_WITH_YAW_DESTINATION) && (pev->spawnflags & SF_TELEPORT_KEEP_VELOCITY))
1796
+ {
1797
+ float xy_vel = pevToucher->velocity .Length2D ();
1798
+
1799
+ Vector vecAngles = Vector (0 , pentTarget->v .angles .y , 0 );
1800
+ Vector vecForward;
1801
+ AngleVectors (vecAngles, vecForward, nullptr , nullptr );
1802
+
1803
+ pevToucher->velocity .x = vecForward.x * xy_vel;
1804
+ pevToucher->velocity .y = vecForward.y * xy_vel;
1805
+ }
1806
+ #endif
1778
1807
}
1779
1808
1780
1809
LINK_ENTITY_TO_CLASS (trigger_teleport, CTriggerTeleport, CCSTriggerTeleport)
0 commit comments