func_door_rotating: Redid the way how one-way-doors swing. This should avoid them swinging into your face constantly

This commit is contained in:
Marco Cawthorne 2022-04-23 18:32:29 -07:00
parent f83b6b6725
commit 0c89cd31ec
Signed by: eukara
GPG Key ID: C196CD8BA993248A
2 changed files with 15 additions and 12 deletions

View File

@ -88,6 +88,7 @@ class func_door:NSRenderableEntity
int m_iLocked;
int m_iPortalState;
int m_iForceClosed;
bool m_iCanTouch;
float m_flSoundWait;
string m_strLockedSfx;
@ -214,10 +215,6 @@ func_door::MoveBack(void)
if (m_strSndMove)
Sound_Play(this, CHAN_WEAPON, m_strSndMove);
if (!HasSpawnFlags(SF_MOV_USE)) {
touch = __NULL__;
}
m_iValue = 0;
m_iState = DOORSTATE_DOWN;
MoveToDestination(m_vecPos1, Returned);
@ -286,6 +283,9 @@ func_door::Trigger(entity act, int state)
void
func_door::Touch(entity eToucher)
{
if (m_iCanTouch == false)
return;
if (HasSpawnFlags(SF_MOV_USE))
return;
@ -426,6 +426,11 @@ func_door::Respawn(void)
m_vecPos1 = GetSpawnOrigin();
m_vecPos2 = (m_vecPos1 + m_vecMoveDir * (fabs(m_vecMoveDir * size) - m_flLip));
if (spawnflags & SF_MOV_TOGGLE || spawnflags & SF_MOV_USE)
m_iCanTouch = false;
else
m_iCanTouch = true;
if (HasSpawnFlags(SF_MOV_OPEN)) {
SetOrigin(m_vecPos2);
m_vecPos2 = m_vecPos1;

View File

@ -237,20 +237,18 @@ func_door_rotating::Away(void)
if (!HasSpawnFlags(SF_ROT_ONEWAY)) {
/* One way doors only work on the Y axis */
if (!HasSpawnFlags(SF_ROT_ZAXIS) || HasSpawnFlags(SF_ROT_XAXIS)) {
vector vDifference = (eActivator.origin - eActivator.view_ofs) - origin;
vector vAngles = eActivator.angles;
vAngles[0] = vAngles[2] = 0;
/* get the door facing dir */
vector door_dir = vectoangles(WorldSpaceCenter() - origin);
makevectors(door_dir);
float flDir = dotproduct(origin - eActivator.origin, v_right);
makevectors(vAngles);
vAngles = (eActivator.origin + (v_forward * 10)) - origin;
if (((vDifference[0] * vAngles[1]) - (vDifference[1] * vAngles[0])) < 0) {
if (flDir > 0) {
fDirection = -1.0f;
}
}
}
RotToDest(m_vecPos2 * fDirection, Arrived);
RotToDest(m_vecPos2 * fDirection, Arrived);
PortalOpen();
}