trigger_once/multiple/teleport: Support for Source Engine game specific trigger filters
This commit is contained in:
parent
3ea74c3c3d
commit
abea931460
3 changed files with 131 additions and 11 deletions
|
@ -56,10 +56,14 @@ public:
|
||||||
virtual void Touch(entity);
|
virtual void Touch(entity);
|
||||||
virtual void Respawn(void);
|
virtual void Respawn(void);
|
||||||
virtual void SpawnKey(string,string);
|
virtual void SpawnKey(string,string);
|
||||||
|
virtual void Input(entity,string,string);
|
||||||
virtual void EndTouch(entity);
|
virtual void EndTouch(entity);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
float m_flWait;
|
float m_flWait;
|
||||||
|
bool m_bStartDisabled;
|
||||||
|
bool m_bIsModern;
|
||||||
|
bool m_bEnabled;
|
||||||
|
|
||||||
/* Input/Output */
|
/* Input/Output */
|
||||||
string m_strOnStartTouch;
|
string m_strOnStartTouch;
|
||||||
|
@ -76,6 +80,8 @@ trigger_multiple::trigger_multiple(void)
|
||||||
m_strOnStartTouch =
|
m_strOnStartTouch =
|
||||||
m_strOnEndTouchAll =
|
m_strOnEndTouchAll =
|
||||||
m_strOnTrigger = __NULL__;
|
m_strOnTrigger = __NULL__;
|
||||||
|
m_bIsModern = false;
|
||||||
|
m_bEnabled = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
|
@ -116,6 +122,10 @@ trigger_multiple::SpawnKey(string strKey, string strValue)
|
||||||
case "wait":
|
case "wait":
|
||||||
m_flWait = stof(strValue);
|
m_flWait = stof(strValue);
|
||||||
break;
|
break;
|
||||||
|
case "StartDisabled":
|
||||||
|
m_bStartDisabled = ReadBool(strValue);
|
||||||
|
m_bIsModern = true;
|
||||||
|
break;
|
||||||
case "OnStartTouch":
|
case "OnStartTouch":
|
||||||
case "OnStartTouchAll":
|
case "OnStartTouchAll":
|
||||||
m_strOnStartTouch = PrepareOutput(m_strOnStartTouch, strValue);
|
m_strOnStartTouch = PrepareOutput(m_strOnStartTouch, strValue);
|
||||||
|
@ -148,6 +158,35 @@ void
|
||||||
trigger_multiple::Respawn(void)
|
trigger_multiple::Respawn(void)
|
||||||
{
|
{
|
||||||
InitBrushTrigger();
|
InitBrushTrigger();
|
||||||
|
m_bEnabled = (m_bStartDisabled) ? false : true;
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
trigger_multiple::Input(entity entityActivator, string inputName, string dataField)
|
||||||
|
{
|
||||||
|
switch (inputName) {
|
||||||
|
case "Enable":
|
||||||
|
m_bEnabled = true;
|
||||||
|
break;
|
||||||
|
case "Disable":
|
||||||
|
m_bEnabled = false;
|
||||||
|
break;
|
||||||
|
case "Toggle":
|
||||||
|
m_bEnabled = (m_bEnabled) ? false : true;
|
||||||
|
break;
|
||||||
|
case "TouchTest":
|
||||||
|
Touch(entityActivator);
|
||||||
|
break;
|
||||||
|
case "StartTouch":
|
||||||
|
StartTouch(entityActivator);
|
||||||
|
break;
|
||||||
|
case "EndTouch":
|
||||||
|
EndTouch(entityActivator);
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
super::Input(entityActivator, inputName, dataField);
|
||||||
|
break;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
|
@ -155,12 +194,21 @@ trigger_multiple::Touch(entity eToucher)
|
||||||
{
|
{
|
||||||
if (GetMaster() == FALSE)
|
if (GetMaster() == FALSE)
|
||||||
return;
|
return;
|
||||||
if (HasSpawnFlags(TM_NOCLIENTS) && eToucher.flags & FL_CLIENT)
|
|
||||||
|
if (m_bEnabled == false)
|
||||||
return;
|
return;
|
||||||
if (!HasSpawnFlags(TM_MONSTERS) && eToucher.flags & FL_MONSTER)
|
|
||||||
return;
|
/* legacy entity check */
|
||||||
if (!HasSpawnFlags(TM_PUSHABLES) && eToucher.classname == "func_pushable")
|
if (m_bIsModern == false) {
|
||||||
|
if (HasSpawnFlags(TM_NOCLIENTS) && eToucher.flags & FL_CLIENT)
|
||||||
|
return;
|
||||||
|
if (!HasSpawnFlags(TM_MONSTERS) && eToucher.flags & FL_MONSTER)
|
||||||
|
return;
|
||||||
|
if (!HasSpawnFlags(TM_PUSHABLES) && eToucher.classname == "func_pushable")
|
||||||
|
return;
|
||||||
|
} else if (CanBeTriggeredBy(eToucher) == false) {
|
||||||
return;
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
/* if the target key isn't used, assume we're using the new I/O system */
|
/* if the target key isn't used, assume we're using the new I/O system */
|
||||||
if (HasTriggerTarget() == false)
|
if (HasTriggerTarget() == false)
|
||||||
|
|
|
@ -52,9 +52,14 @@ public:
|
||||||
virtual void Respawn(void);
|
virtual void Respawn(void);
|
||||||
virtual void SpawnKey(string,string);
|
virtual void SpawnKey(string,string);
|
||||||
|
|
||||||
|
virtual void Input(entity, string, string);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
bool m_bStartDisabled;
|
||||||
|
bool m_bEnabled;
|
||||||
string m_strOnStartTouch;
|
string m_strOnStartTouch;
|
||||||
string m_strOnTrigger;
|
string m_strOnTrigger;
|
||||||
|
bool m_bIsModern;
|
||||||
};
|
};
|
||||||
|
|
||||||
void
|
void
|
||||||
|
@ -62,6 +67,9 @@ trigger_once::trigger_once(void)
|
||||||
{
|
{
|
||||||
m_strOnStartTouch =
|
m_strOnStartTouch =
|
||||||
m_strOnTrigger = __NULL__;
|
m_strOnTrigger = __NULL__;
|
||||||
|
m_bIsModern = false;
|
||||||
|
m_bStartDisabled = false;
|
||||||
|
m_bEnabled = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
|
@ -71,7 +79,6 @@ trigger_once::Spawned(void)
|
||||||
|
|
||||||
if (m_strOnTrigger)
|
if (m_strOnTrigger)
|
||||||
m_strOnTrigger = CreateOutput(m_strOnTrigger);
|
m_strOnTrigger = CreateOutput(m_strOnTrigger);
|
||||||
|
|
||||||
if (m_strOnStartTouch)
|
if (m_strOnStartTouch)
|
||||||
m_strOnStartTouch = CreateOutput(m_strOnStartTouch);
|
m_strOnStartTouch = CreateOutput(m_strOnStartTouch);
|
||||||
}
|
}
|
||||||
|
@ -81,6 +88,7 @@ trigger_once::Respawn(void)
|
||||||
{
|
{
|
||||||
InitBrushTrigger();
|
InitBrushTrigger();
|
||||||
m_iValue = 0;
|
m_iValue = 0;
|
||||||
|
m_bEnabled = (m_bStartDisabled) ? false : true;
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
|
@ -110,6 +118,10 @@ void
|
||||||
trigger_once::SpawnKey(string strKey, string strValue)
|
trigger_once::SpawnKey(string strKey, string strValue)
|
||||||
{
|
{
|
||||||
switch (strKey) {
|
switch (strKey) {
|
||||||
|
case "StartDisabled":
|
||||||
|
m_bStartDisabled = ReadBool(strValue);
|
||||||
|
m_bIsModern = true;
|
||||||
|
break;
|
||||||
case "OnStartTouch":
|
case "OnStartTouch":
|
||||||
m_strOnStartTouch = PrepareOutput(m_strOnStartTouch, strValue);
|
m_strOnStartTouch = PrepareOutput(m_strOnStartTouch, strValue);
|
||||||
break;
|
break;
|
||||||
|
@ -121,6 +133,29 @@ trigger_once::SpawnKey(string strKey, string strValue)
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
trigger_once::Input(entity entityActivator, string inputName, string dataField)
|
||||||
|
{
|
||||||
|
switch (inputName) {
|
||||||
|
case "Enable":
|
||||||
|
m_bEnabled = true;
|
||||||
|
break;
|
||||||
|
case "Disable":
|
||||||
|
m_bEnabled = false;
|
||||||
|
break;
|
||||||
|
case "Toggle":
|
||||||
|
m_bEnabled = (m_bEnabled) ? false : true;
|
||||||
|
break;
|
||||||
|
case "StartTouch":
|
||||||
|
StartTouch(entityActivator);
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
super::Input(entityActivator, inputName, dataField);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
trigger_once::Touch(entity eToucher)
|
trigger_once::Touch(entity eToucher)
|
||||||
{
|
{
|
||||||
|
@ -129,17 +164,26 @@ trigger_once::Touch(entity eToucher)
|
||||||
if (GetMaster() == FALSE)
|
if (GetMaster() == FALSE)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
if (HasSpawnFlags(TO_NOCLIENTS) && eToucher.flags & FL_CLIENT)
|
if (m_bEnabled == false)
|
||||||
return;
|
return;
|
||||||
if (!HasSpawnFlags(TO_MONSTERS) && eToucher.flags & FL_MONSTER)
|
|
||||||
return;
|
/* legacy entity check */
|
||||||
if (!HasSpawnFlags(TO_PUSHABLES) && isPushable == true)
|
if (m_bIsModern == false) {
|
||||||
|
if (HasSpawnFlags(TO_NOCLIENTS) && eToucher.flags & FL_CLIENT)
|
||||||
|
return;
|
||||||
|
if (!HasSpawnFlags(TO_MONSTERS) && eToucher.flags & FL_MONSTER)
|
||||||
|
return;
|
||||||
|
if (!HasSpawnFlags(TO_PUSHABLES) && isPushable == true)
|
||||||
|
return;
|
||||||
|
} else if (CanBeTriggeredBy(eToucher) == false) {
|
||||||
return;
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
SetSolid(SOLID_NOT); /* make inactive */
|
SetSolid(SOLID_NOT); /* make inactive */
|
||||||
m_iValue = 1;
|
m_iValue = 1;
|
||||||
|
|
||||||
if (!target && !m_strKillTarget) {
|
if (!target && !m_strKillTarget) {
|
||||||
|
NSLog("^2trigger_once::^3Touch^7: %S is triggering OnStartTouch", eToucher.classname);
|
||||||
UseOutput(eToucher, m_strOnStartTouch);
|
UseOutput(eToucher, m_strOnStartTouch);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
|
@ -48,10 +48,14 @@ public:
|
||||||
virtual void Respawn(void);
|
virtual void Respawn(void);
|
||||||
virtual void SpawnKey(string, string);
|
virtual void SpawnKey(string, string);
|
||||||
|
|
||||||
|
nonvirtual bool CanPass(NSEntity);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
bool m_bEnabled;
|
||||||
string m_sndTeleport;
|
string m_sndTeleport;
|
||||||
string m_sndTeleportEnter;
|
string m_sndTeleportEnter;
|
||||||
string m_sndTeleportExit;
|
string m_sndTeleportExit;
|
||||||
|
bool m_bIsModern;
|
||||||
};
|
};
|
||||||
|
|
||||||
void
|
void
|
||||||
|
@ -60,6 +64,8 @@ trigger_teleport::trigger_teleport(void)
|
||||||
m_sndTeleport = __NULL__;
|
m_sndTeleport = __NULL__;
|
||||||
m_sndTeleportEnter = __NULL__;
|
m_sndTeleportEnter = __NULL__;
|
||||||
m_sndTeleportExit = __NULL__;
|
m_sndTeleportExit = __NULL__;
|
||||||
|
m_bEnabled = true;
|
||||||
|
m_bIsModern = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
|
@ -75,11 +81,33 @@ trigger_teleport::SpawnKey(string strKey, string strValue)
|
||||||
case "snd_teleport_exit":
|
case "snd_teleport_exit":
|
||||||
m_sndTeleportExit = strValue;
|
m_sndTeleportExit = strValue;
|
||||||
break;
|
break;
|
||||||
|
case "StartDisabled":
|
||||||
|
m_bEnabled = ReadBool(strValue);
|
||||||
|
m_bIsModern = true;
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
super::SpawnKey(strKey, strValue);
|
super::SpawnKey(strKey, strValue);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
bool
|
||||||
|
trigger_teleport::CanPass(NSEntity target)
|
||||||
|
{
|
||||||
|
/* legacy entity check */
|
||||||
|
if (m_bIsModern == false) {
|
||||||
|
if (HasSpawnFlags(TRIGTELE_NOCLIENTS) && target.flags & FL_CLIENT)
|
||||||
|
return false;
|
||||||
|
if (!HasSpawnFlags(TRIGTELE_MONSTERS) && target.flags & FL_MONSTER)
|
||||||
|
return false;
|
||||||
|
} else {
|
||||||
|
if (CanBeTriggeredBy(target) == false)
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
trigger_teleport::Spawned(void)
|
trigger_teleport::Spawned(void)
|
||||||
{
|
{
|
||||||
|
@ -106,9 +134,9 @@ trigger_teleport::Touch(entity eToucher)
|
||||||
{
|
{
|
||||||
if (GetMaster() == FALSE)
|
if (GetMaster() == FALSE)
|
||||||
return;
|
return;
|
||||||
if (HasSpawnFlags(TRIGTELE_NOCLIENTS) && eToucher.flags & FL_CLIENT)
|
if (m_bEnabled == false)
|
||||||
return;
|
return;
|
||||||
if (!HasSpawnFlags(TRIGTELE_MONSTERS) && eToucher.flags & FL_MONSTER)
|
if (CanPass((NSEntity)eToucher) == false)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
if (eToucher.movetype != MOVETYPE_NONE) {
|
if (eToucher.movetype != MOVETYPE_NONE) {
|
||||||
|
|
Loading…
Reference in a new issue