CBaseTrigger: Merge UseTargets and UseTargets_Delay... to be continued.
This commit is contained in:
parent
5dcb79e30c
commit
8bde44b01c
27 changed files with 68 additions and 129 deletions
|
@ -101,52 +101,44 @@ CBaseTrigger::Trigger(entity act, int state)
|
|||
}
|
||||
|
||||
void
|
||||
CBaseTrigger::UseTargets(entity act, int state)
|
||||
CBaseTrigger::UseTargets(entity act, int state, float fDelay)
|
||||
{
|
||||
for (entity f = world; (f = find(f, ::targetname, target));) {
|
||||
CBaseTrigger trigger = (CBaseTrigger)f;
|
||||
dprint(sprintf("^2%s::^3UseTargets^7: Triggering %s `%s` from %s\n",
|
||||
this.classname, f.classname, trigger.targetname, act.classname));
|
||||
if (trigger.Trigger != __NULL__) {
|
||||
trigger.Trigger(act, state);
|
||||
}
|
||||
}
|
||||
|
||||
/* hack: check to see if this is a sound file */
|
||||
/*if (whichpack(m_strMessage)) {
|
||||
print(m_strMessage);
|
||||
print("\n");
|
||||
} else {
|
||||
if (m_strMessage && act.flags & FL_CLIENT) {
|
||||
centerprint(act, m_strMessage);
|
||||
}
|
||||
}*/
|
||||
|
||||
if (m_strKillTarget) {
|
||||
entity eKill = find(world, ::targetname, m_strKillTarget);
|
||||
if (eKill) {
|
||||
remove(eKill);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
CBaseTrigger::UseTargets_Delay(entity act, int state, float fDelay)
|
||||
{
|
||||
static void Entities_UseTargets_Delay_Think(void) {
|
||||
CBaseTrigger::UseTargets(self.owner, self.health); /* ugly */
|
||||
static void Entities_UseTargets_Think(void) {
|
||||
CBaseTrigger::UseTargets(self.owner, self.health, 0.0f);
|
||||
remove(self);
|
||||
}
|
||||
|
||||
dprint(sprintf("^2%s::^3UseTargets_Delay^7: Triggering `%s`\n",
|
||||
this.classname, target));
|
||||
if (fDelay > 0.0f) {
|
||||
dprint(sprintf("^2%s::^3UseTargets^7: Triggering `%s`\n",
|
||||
this.classname, target));
|
||||
|
||||
CBaseTrigger eTimer = spawn(CBaseTrigger);
|
||||
eTimer.owner = act;
|
||||
eTimer.think = Entities_UseTargets_Delay_Think;
|
||||
eTimer.target = target;
|
||||
eTimer.nextthink = time + fDelay;
|
||||
eTimer.health = state; /* ugly */
|
||||
CBaseTrigger eTimer = spawn(CBaseTrigger);
|
||||
eTimer.owner = act;
|
||||
eTimer.think = Entities_UseTargets_Think;
|
||||
eTimer.target = target;
|
||||
eTimer.nextthink = time + fDelay;
|
||||
eTimer.health = state; /* ugly */
|
||||
} else {
|
||||
for (entity f = world; (f = find(f, ::targetname, target));) {
|
||||
CBaseTrigger trigger = (CBaseTrigger)f;
|
||||
|
||||
dprint(sprintf("^2%s::^3UseTargets^7:" \
|
||||
"Triggering %s `%s` from %s\n", \
|
||||
this.classname, f.classname, \
|
||||
trigger.targetname, act.classname));
|
||||
|
||||
if (trigger.Trigger != __NULL__) {
|
||||
trigger.Trigger(act, state);
|
||||
}
|
||||
}
|
||||
|
||||
if (m_strKillTarget) {
|
||||
entity eKill = find(world, ::targetname, m_strKillTarget);
|
||||
if (eKill) {
|
||||
remove(eKill);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
int
|
||||
|
|
|
@ -48,8 +48,7 @@ class CBaseTrigger:CBaseEntity
|
|||
/* legacy trigger architecture */
|
||||
float m_flDelay;
|
||||
virtual void(entity, int) Trigger;
|
||||
virtual void(entity, int) UseTargets;
|
||||
virtual void(entity, int, float) UseTargets_Delay;
|
||||
virtual void(entity, int, float) UseTargets;
|
||||
|
||||
/* master feature */
|
||||
virtual int(void) GetValue;
|
||||
|
|
|
@ -17,6 +17,7 @@
|
|||
/*QUAKED button_target (0 .5 .8) ? BUTTA_USE BUTTA_TEXON
|
||||
"targetname" Name
|
||||
"target" Target when triggered.
|
||||
"delay" Time until target is triggered."
|
||||
|
||||
Non-moving button that can either be used by hand, or shot.
|
||||
|
||||
|
@ -76,7 +77,7 @@ button_target::Trigger(entity act, int status)
|
|||
takedamage = DAMAGE_NO;
|
||||
|
||||
frame = 1 - frame;
|
||||
UseTargets(act, status);
|
||||
UseTargets(act, status, m_flDelay);
|
||||
}
|
||||
|
||||
void
|
||||
|
|
|
@ -168,8 +168,8 @@ func_breakable::Explode(void)
|
|||
FX_BreakModel(vlen(size) / 10, absmin, absmax, [0,0,0], m_iMaterial);
|
||||
FX_Explosion(rp);
|
||||
Damage_Radius(rp, this, m_flExplodeMag, m_flExplodeMag * 2.5f, TRUE, 0);
|
||||
CBaseTrigger::UseTargets(this, TRIG_TOGGLE);
|
||||
CBaseEntity::Hide();
|
||||
UseTargets(this, TRIG_TOGGLE, 0.0f); /* delay... ignored. */
|
||||
Hide();
|
||||
}
|
||||
|
||||
void
|
||||
|
@ -220,8 +220,8 @@ func_breakable::Death(void)
|
|||
} else {
|
||||
FX_BreakModel(vlen(size) / 10, absmin, absmax, [0,0,0], m_iMaterial);
|
||||
/* TODO: ability to have whoever destroyed the crate be the activator */
|
||||
CBaseTrigger::UseTargets(this, TRIG_TOGGLE);
|
||||
CBaseEntity::Hide();
|
||||
UseTargets(this, TRIG_TOGGLE, 0.0f);
|
||||
Hide();
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -211,12 +211,7 @@ func_button::Trigger(entity act, int state)
|
|||
Sound_Play(this, CHAN_VOICE, m_strSndPressed);
|
||||
|
||||
MoveAway();
|
||||
|
||||
if (m_flDelay) {
|
||||
UseTargets_Delay(act, TRIG_TOGGLE, m_flDelay);
|
||||
} else {
|
||||
UseTargets(act, TRIG_TOGGLE);
|
||||
}
|
||||
UseTargets(act, TRIG_TOGGLE, m_flDelay);
|
||||
}
|
||||
|
||||
void
|
||||
|
|
|
@ -225,11 +225,7 @@ func_door::Trigger(entity act, int state)
|
|||
|
||||
/* only trigger stuff once we are done moving */
|
||||
if ((m_iState == DOORSTATE_RAISED) || (m_iState == DOORSTATE_LOWERED)) {
|
||||
if (m_flDelay > 0) {
|
||||
CBaseTrigger::UseTargets_Delay(act, TRIG_TOGGLE, m_flDelay);
|
||||
} else {
|
||||
CBaseTrigger::UseTargets(act, TRIG_TOGGLE);
|
||||
}
|
||||
UseTargets(act, TRIG_TOGGLE, m_flDelay);
|
||||
}
|
||||
|
||||
if (state == TRIG_OFF) {
|
||||
|
|
|
@ -223,12 +223,7 @@ void func_door_rotating::Trigger(entity act, int state)
|
|||
Away();
|
||||
}
|
||||
|
||||
|
||||
if (m_flDelay) {
|
||||
CBaseTrigger::UseTargets_Delay(act, TRIG_TOGGLE, m_flDelay);
|
||||
} else {
|
||||
CBaseTrigger::UseTargets(act, TRIG_TOGGLE);
|
||||
}
|
||||
UseTargets(act, TRIG_TOGGLE, m_flDelay);
|
||||
}
|
||||
|
||||
void func_door_rotating::Use(void)
|
||||
|
|
|
@ -74,11 +74,7 @@ class func_rot_button:CBaseTrigger
|
|||
void
|
||||
func_rot_button::TriggerTargets(void)
|
||||
{
|
||||
if (m_flDelay > 0) {
|
||||
CBaseTrigger::UseTargets_Delay(this, TRIG_TOGGLE, m_flDelay);
|
||||
} else {
|
||||
CBaseTrigger::UseTargets(this, TRIG_TOGGLE);
|
||||
}
|
||||
UseTargets(this, TRIG_TOGGLE, m_flDelay);
|
||||
}
|
||||
|
||||
void
|
||||
|
|
|
@ -165,7 +165,7 @@ func_tank::PlayerInput(void)
|
|||
spos += v_right * m_vecTipPos[1];
|
||||
spos += v_up * m_vecTipPos[2];
|
||||
|
||||
CBaseTrigger::UseTargets(this, TRIG_ON);
|
||||
UseTargets(this, TRIG_ON, m_flDelay);
|
||||
func_tank_shootsingle(m_eDriver, spos, m_vecSpread, m_iDamage);
|
||||
m_flFireTime = time + m_flFireRate;
|
||||
|
||||
|
|
|
@ -184,7 +184,7 @@ func_tankmortar::PlayerInput(void)
|
|||
SpriteSmoke(spos);
|
||||
SpriteFlash(spos);
|
||||
|
||||
CBaseTrigger::UseTargets(this, TRIG_ON);
|
||||
UseTargets(this, TRIG_ON, m_flDelay);
|
||||
|
||||
m_flFireTime = time + m_flFireRate;
|
||||
}
|
||||
|
|
|
@ -135,7 +135,7 @@ monstermaker::Spawner(void)
|
|||
m_iMonsterSpawned++;
|
||||
|
||||
if (target) {
|
||||
UseTargets(this, TRIG_TOGGLE);
|
||||
UseTargets(this, TRIG_TOGGLE, 0.0f);
|
||||
}
|
||||
|
||||
/* inherit the monsterclip flag */
|
||||
|
|
|
@ -56,7 +56,7 @@ multi_manager::Trigger(entity act, int state)
|
|||
dprint(sprintf("^2%s::^3Trigger^7: %s (%s)\n",
|
||||
this.classname, wow.target, eFind.classname));
|
||||
|
||||
CBaseTrigger::UseTargets(wow.m_eActivator, TRIG_TOGGLE);
|
||||
CBaseTrigger::UseTargets(wow.m_eActivator, TRIG_TOGGLE, 0.0f);
|
||||
}
|
||||
|
||||
if (GetMaster() == FALSE)
|
||||
|
|
|
@ -18,6 +18,7 @@
|
|||
"targetname" Name
|
||||
"target" Target when triggered.
|
||||
"killtarget" Target to kill when triggered.
|
||||
"delay" Delay until we trigger our target
|
||||
|
||||
STUB!
|
||||
*/
|
||||
|
@ -73,7 +74,7 @@ multisource::Trigger(entity act, int unused)
|
|||
|
||||
dprint(sprintf("[^1MULTISOURCE^7] %s is now active.\n", targetname));
|
||||
m_iValue = TRUE;
|
||||
CBaseTrigger::UseTargets(act, TRIG_TOGGLE);
|
||||
UseTargets(act, TRIG_TOGGLE, m_flDelay);
|
||||
}
|
||||
|
||||
void
|
||||
|
|
|
@ -53,7 +53,7 @@ random_trigger::Trigger(entity act, int state)
|
|||
return;
|
||||
|
||||
r = time + m_flMinTime + random(m_flRandMin, m_flRandMax);
|
||||
CBaseTrigger::UseTargets_Delay(other, TRIG_TOGGLE, r);
|
||||
UseTargets(other, TRIG_TOGGLE, r);
|
||||
}
|
||||
|
||||
void
|
||||
|
|
|
@ -42,7 +42,7 @@ trigger_auto::Processing(void)
|
|||
// This is weird, because ents may not be spawned yet.
|
||||
// However, Half-Life doesn't care about this, either.
|
||||
// So why should we?
|
||||
CBaseTrigger::UseTargets_Delay(this, m_iTriggerState, m_flDelay);
|
||||
UseTargets(this, m_iTriggerState, m_flDelay);
|
||||
|
||||
if (spawnflags & 1) {
|
||||
dprint(sprintf("^2trigger_auto::^3think^7: %s triggerer removed self\n", target));
|
||||
|
|
|
@ -48,13 +48,9 @@ trigger_autosave::touch(void)
|
|||
|
||||
//readcmd("save autosave\n");
|
||||
Hide();
|
||||
SetSolid(SOLID_NOT);
|
||||
|
||||
if (m_flDelay > 0) {
|
||||
CBaseTrigger::UseTargets_Delay(other, TRIG_TOGGLE, m_flDelay);
|
||||
} else {
|
||||
CBaseTrigger::UseTargets(other, TRIG_TOGGLE);
|
||||
}
|
||||
solid = SOLID_NOT;
|
||||
CBaseTrigger::UseTargets(other, TRIG_TOGGLE, m_flDelay);
|
||||
}
|
||||
|
||||
void
|
||||
|
|
|
@ -37,11 +37,7 @@ class trigger_camera:CBaseTrigger
|
|||
void
|
||||
trigger_camera::Trigger(entity act, int state)
|
||||
{
|
||||
if (m_flDelay > 0) {
|
||||
CBaseTrigger::UseTargets_Delay(act, TRIG_TOGGLE, m_flDelay);
|
||||
} else {
|
||||
CBaseTrigger::UseTargets(act, TRIG_TOGGLE);
|
||||
}
|
||||
UseTargets(act, TRIG_TOGGLE, m_flDelay);
|
||||
|
||||
if (m_strMoveTo) {
|
||||
entity e = find(world, ::targetname, m_strMoveTo);
|
||||
|
|
|
@ -69,14 +69,10 @@ trigger_counter::Trigger(entity act, int state)
|
|||
if (m_iCounted < m_iMaxCount)
|
||||
return;
|
||||
|
||||
solid = SOLID_NOT; /* make inactive */
|
||||
SetSolid(SOLID_NOT); /* make inactive */
|
||||
m_iValue = 1;
|
||||
|
||||
if (m_flDelay > 0) {
|
||||
CBaseTrigger::UseTargets_Delay(act, TRIG_TOGGLE, m_flDelay);
|
||||
} else {
|
||||
CBaseTrigger::UseTargets(act, TRIG_TOGGLE);
|
||||
}
|
||||
UseTargets(act, TRIG_TOGGLE, m_flDelay);
|
||||
}
|
||||
|
||||
void
|
||||
|
|
|
@ -87,19 +87,11 @@ trigger_hurt::touch(void)
|
|||
if (spawnflags & SF_HURT_FIREONPLAYER) {
|
||||
if (other.flags & FL_CLIENT) {
|
||||
eActivator = other;
|
||||
if (m_flDelay > 0) {
|
||||
CBaseTrigger::UseTargets_Delay(other, TRIG_TOGGLE, m_flDelay);
|
||||
} else {
|
||||
CBaseTrigger::UseTargets(other, TRIG_TOGGLE);
|
||||
}
|
||||
UseTargets(other, TRIG_TOGGLE, m_flDelay);
|
||||
}
|
||||
} else {
|
||||
eActivator = other;
|
||||
if (m_flDelay > 0) {
|
||||
CBaseTrigger::UseTargets_Delay(other, TRIG_TOGGLE, m_flDelay);
|
||||
} else {
|
||||
CBaseTrigger::UseTargets(other, TRIG_TOGGLE);
|
||||
}
|
||||
UseTargets(other, TRIG_TOGGLE, m_flDelay);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -89,12 +89,8 @@ trigger_look::Touch(void)
|
|||
}
|
||||
|
||||
/* trigger and disable entity, for now */
|
||||
if (m_flDelay > 0) {
|
||||
UseTargets_Delay(other, TRIG_TOGGLE, m_flDelay);
|
||||
} else {
|
||||
UseTargets(other, TRIG_TOGGLE);
|
||||
}
|
||||
solid = SOLID_NOT;
|
||||
SetSolid(SOLID_NOT);
|
||||
UseTargets(other, TRIG_TOGGLE, m_flDelay);
|
||||
}
|
||||
|
||||
void
|
||||
|
|
|
@ -69,11 +69,7 @@ trigger_multiple::touch(void)
|
|||
}
|
||||
|
||||
/* legacy */
|
||||
if (m_flDelay > 0) {
|
||||
UseTargets_Delay(other, TRIG_TOGGLE, m_flDelay);
|
||||
} else {
|
||||
UseTargets(other, TRIG_TOGGLE);
|
||||
}
|
||||
UseTargets(other, TRIG_TOGGLE, m_flDelay);
|
||||
|
||||
/* This is effectively a trigger_once...*/
|
||||
if (m_flWait != -1) {
|
||||
|
|
|
@ -62,11 +62,7 @@ trigger_once::touch(void)
|
|||
return;
|
||||
}
|
||||
|
||||
if (m_flDelay > 0) {
|
||||
CBaseTrigger::UseTargets_Delay(other, TRIG_TOGGLE, m_flDelay);
|
||||
} else {
|
||||
CBaseTrigger::UseTargets(other, TRIG_TOGGLE);
|
||||
}
|
||||
UseTargets(other, TRIG_TOGGLE, m_flDelay);
|
||||
}
|
||||
|
||||
void
|
||||
|
|
|
@ -52,11 +52,7 @@ trigger_relay::Trigger(entity act, int state)
|
|||
if (spawnflags & TRLY_ONCE)
|
||||
m_iEnabled = FALSE;
|
||||
|
||||
if (m_flDelay > 0) {
|
||||
CBaseTrigger::UseTargets_Delay(act, m_iTriggerState, m_flDelay);
|
||||
} else {
|
||||
CBaseTrigger::UseTargets(act, m_iTriggerState);
|
||||
}
|
||||
UseTargets(act, m_iTriggerState, m_flDelay);
|
||||
}
|
||||
|
||||
void
|
||||
|
|
|
@ -37,7 +37,7 @@ void item_suit::touch(void)
|
|||
sound(other, CHAN_ITEM, "items/tr_kevlar.wav", 1, ATTN_NORM);
|
||||
pl.g_items |= ITEM_SUIT;
|
||||
|
||||
CBaseTrigger::UseTargets(other, TRIG_TOGGLE);
|
||||
UseTargets(other, TRIG_TOGGLE, m_flDelay);
|
||||
|
||||
if (cvar("sv_playerslots") == 1) {
|
||||
remove(self);
|
||||
|
|
|
@ -47,7 +47,7 @@ void item_longjump::touch(void)
|
|||
sound(other, CHAN_VOICE, "fvox/powermove_on.wav", 1, ATTN_NORM);
|
||||
pl.g_items |= ITEM_LONGJUMP;
|
||||
|
||||
CBaseTrigger::UseTargets(other, TRIG_TOGGLE);
|
||||
UseTargets(other, TRIG_TOGGLE, m_flDelay);
|
||||
|
||||
if (real_owner || cvar("sv_playerslots") == 1) {
|
||||
remove(self);
|
||||
|
|
|
@ -54,7 +54,7 @@ void item_suit::touch(void)
|
|||
UseOutput(other, m_strOnPlayerTouch);
|
||||
return;
|
||||
} else {
|
||||
CBaseTrigger::UseTargets(other, TRIG_TOGGLE);
|
||||
UseTargets(other, TRIG_TOGGLE, m_flDelay);
|
||||
}
|
||||
|
||||
if (real_owner || cvar("sv_playerslots") == 1) {
|
||||
|
|
|
@ -28,7 +28,7 @@ void item_pickup::touch(void)
|
|||
Logging_Pickup(other, this, __NULL__);
|
||||
Sound_Play(other, CHAN_ITEM, "weapon.pickup");
|
||||
|
||||
CBaseTrigger::UseTargets(other, TRIG_TOGGLE);
|
||||
UseTargets(other, TRIG_TOGGLE, m_flDelay);
|
||||
|
||||
if (real_owner || m_iWasDropped == 1 || cvar("sv_playerslots") == 1) {
|
||||
remove(self);
|
||||
|
|
Loading…
Reference in a new issue