trigger_push: Support for the 'target' spawn key.
This commit is contained in:
parent
ff78e34c16
commit
dad5071379
1 changed files with 30 additions and 0 deletions
|
@ -85,6 +85,7 @@ public:
|
||||||
private:
|
private:
|
||||||
PREDICTED_FLOAT(m_flSpeed)
|
PREDICTED_FLOAT(m_flSpeed)
|
||||||
PREDICTED_VECTOR(m_vecMoveDir)
|
PREDICTED_VECTOR(m_vecMoveDir)
|
||||||
|
PREDICTED_BOOL(m_bHasTarget)
|
||||||
};
|
};
|
||||||
|
|
||||||
void
|
void
|
||||||
|
@ -92,6 +93,7 @@ trigger_push::trigger_push(void)
|
||||||
{
|
{
|
||||||
m_vecMoveDir = [0,0,0];
|
m_vecMoveDir = [0,0,0];
|
||||||
m_flSpeed = 100;
|
m_flSpeed = 100;
|
||||||
|
m_bHasTarget = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef SERVER
|
#ifdef SERVER
|
||||||
|
@ -101,6 +103,7 @@ trigger_push::Save(float handle)
|
||||||
super::Save(handle);
|
super::Save(handle);
|
||||||
SaveVector(handle, "m_vecMoveDir", m_vecMoveDir);
|
SaveVector(handle, "m_vecMoveDir", m_vecMoveDir);
|
||||||
SaveFloat(handle, "m_flSpeed", m_flSpeed);
|
SaveFloat(handle, "m_flSpeed", m_flSpeed);
|
||||||
|
SaveBool(handle, "m_bHasTarget", m_bHasTarget);
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
|
@ -113,6 +116,9 @@ trigger_push::Restore(string strKey, string strValue)
|
||||||
case "m_flSpeed":
|
case "m_flSpeed":
|
||||||
m_flSpeed = ReadFloat(strValue);
|
m_flSpeed = ReadFloat(strValue);
|
||||||
break;
|
break;
|
||||||
|
case "m_bHasTarget":
|
||||||
|
m_bHasTarget = ReadFloat(strValue);
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
super::Restore(strKey, strValue);
|
super::Restore(strKey, strValue);
|
||||||
}
|
}
|
||||||
|
@ -133,6 +139,18 @@ trigger_push::SpawnKey(string strKey, string strValue)
|
||||||
void
|
void
|
||||||
trigger_push::Respawn(void)
|
trigger_push::Respawn(void)
|
||||||
{
|
{
|
||||||
|
static void JumpDestCheck(void) {
|
||||||
|
/* this ent has a destination target */
|
||||||
|
m_bHasTarget = false;
|
||||||
|
if (target) {
|
||||||
|
entity targetPos = find(world, ::targetname, target);
|
||||||
|
|
||||||
|
if (targetPos) {
|
||||||
|
m_bHasTarget = true;
|
||||||
|
m_vecMoveDir = targetPos.origin;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
InitBrushTrigger();
|
InitBrushTrigger();
|
||||||
|
|
||||||
RestoreAngles();
|
RestoreAngles();
|
||||||
|
@ -142,6 +160,9 @@ trigger_push::Respawn(void)
|
||||||
if (HasSpawnFlags(TP_STARTOFF)) {
|
if (HasSpawnFlags(TP_STARTOFF)) {
|
||||||
SetSolid(SOLID_NOT);
|
SetSolid(SOLID_NOT);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (target)
|
||||||
|
ScheduleThink(JumpDestCheck, 0.5f);
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
|
@ -201,6 +222,7 @@ trigger_push::EvaluateEntity(void)
|
||||||
EVALUATE_VECTOR(m_vecMoveDir, 0, PUSH_CHANGED_MOVEDIR)
|
EVALUATE_VECTOR(m_vecMoveDir, 0, PUSH_CHANGED_MOVEDIR)
|
||||||
EVALUATE_VECTOR(m_vecMoveDir, 1, PUSH_CHANGED_MOVEDIR)
|
EVALUATE_VECTOR(m_vecMoveDir, 1, PUSH_CHANGED_MOVEDIR)
|
||||||
EVALUATE_VECTOR(m_vecMoveDir, 2, PUSH_CHANGED_MOVEDIR)
|
EVALUATE_VECTOR(m_vecMoveDir, 2, PUSH_CHANGED_MOVEDIR)
|
||||||
|
EVALUATE_FIELD(m_bHasTarget, PUSH_CHANGED_MOVEDIR)
|
||||||
}
|
}
|
||||||
|
|
||||||
float
|
float
|
||||||
|
@ -252,6 +274,7 @@ trigger_push::SendEntity(entity ePEnt, float flChanged)
|
||||||
SENDENTITY_FLOAT(m_vecMoveDir[0], PUSH_CHANGED_MOVEDIR)
|
SENDENTITY_FLOAT(m_vecMoveDir[0], PUSH_CHANGED_MOVEDIR)
|
||||||
SENDENTITY_FLOAT(m_vecMoveDir[1], PUSH_CHANGED_MOVEDIR)
|
SENDENTITY_FLOAT(m_vecMoveDir[1], PUSH_CHANGED_MOVEDIR)
|
||||||
SENDENTITY_FLOAT(m_vecMoveDir[2], PUSH_CHANGED_MOVEDIR)
|
SENDENTITY_FLOAT(m_vecMoveDir[2], PUSH_CHANGED_MOVEDIR)
|
||||||
|
SENDENTITY_BYTE(m_bHasTarget, PUSH_CHANGED_MOVEDIR)
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
@ -287,6 +310,7 @@ trigger_push::ReceiveEntity(float flNew, float flChanged)
|
||||||
READENTITY_FLOAT(m_vecMoveDir[0], PUSH_CHANGED_MOVEDIR)
|
READENTITY_FLOAT(m_vecMoveDir[0], PUSH_CHANGED_MOVEDIR)
|
||||||
READENTITY_FLOAT(m_vecMoveDir[1], PUSH_CHANGED_MOVEDIR)
|
READENTITY_FLOAT(m_vecMoveDir[1], PUSH_CHANGED_MOVEDIR)
|
||||||
READENTITY_FLOAT(m_vecMoveDir[2], PUSH_CHANGED_MOVEDIR)
|
READENTITY_FLOAT(m_vecMoveDir[2], PUSH_CHANGED_MOVEDIR)
|
||||||
|
READENTITY_BYTE(m_bHasTarget, PUSH_CHANGED_MOVEDIR)
|
||||||
|
|
||||||
if (flChanged & PUSH_CHANGED_SIZE)
|
if (flChanged & PUSH_CHANGED_SIZE)
|
||||||
setsize(this, mins, maxs);
|
setsize(this, mins, maxs);
|
||||||
|
@ -324,6 +348,12 @@ trigger_push::Touch(entity eToucher)
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (m_bHasTarget) {
|
||||||
|
if (eToucher.flags & FL_ONGROUND)
|
||||||
|
eToucher.velocity = Route_GetJumpVelocity(WorldSpaceCenter(), m_vecMoveDir, 1.0);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
/* trigger_push is not supposed to work underwater */
|
/* trigger_push is not supposed to work underwater */
|
||||||
if (eToucher.waterlevel > 1)
|
if (eToucher.waterlevel > 1)
|
||||||
return;
|
return;
|
||||||
|
|
Loading…
Reference in a new issue