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:
parent
f83b6b6725
commit
0c89cd31ec
2 changed files with 15 additions and 12 deletions
|
@ -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;
|
||||
|
|
|
@ -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();
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in a new issue