NSEntity: Added new methods based on GMod's API. More to follow.
This commit is contained in:
parent
bd63874118
commit
e45987d65c
64 changed files with 407 additions and 208 deletions
|
@ -71,7 +71,7 @@ env_glow::RendererRestarted(void)
|
|||
m_vecSize = drawgetimagesize(m_strSprite) / 2;
|
||||
}
|
||||
|
||||
if (spawnflags & 1) {
|
||||
if (HasSpawnFlags(1)) {
|
||||
hitcontentsmaski = CONTENTBIT_SOLID;
|
||||
decal_pickwall(this, origin);
|
||||
m_vecOrientation = vectoangles(g_tracedDecal.normal * -1);
|
||||
|
@ -119,7 +119,7 @@ env_glow::predraw(void)
|
|||
makevectors(vectoangles(origin - vecPlayer));
|
||||
forg = origin + (v_forward * -16);
|
||||
|
||||
if (spawnflags & 1) {
|
||||
if (HasSpawnFlags(1)) {
|
||||
vector above;
|
||||
makevectors(m_vecOrientation);
|
||||
above = origin + (v_forward * 16);
|
||||
|
|
|
@ -34,7 +34,6 @@ var int autocvar_dev_loddistance = 0;
|
|||
class func_lod:NSRenderableEntity
|
||||
{
|
||||
int m_iDisappearDist;
|
||||
vector m_vecTestPos;
|
||||
|
||||
void(void) func_lod;
|
||||
virtual void(void) Init;
|
||||
|
@ -57,16 +56,16 @@ func_lod::predraw(void)
|
|||
|
||||
#ifdef DEVELOPER
|
||||
if (autocvar_dev_loddistance != 0) {
|
||||
if (vlen(vecPlayer - m_vecTestPos) > autocvar_dev_loddistance) {
|
||||
if (vlen(vecPlayer - WorldSpaceCenter()) > autocvar_dev_loddistance) {
|
||||
return (PREDRAW_NEXT);
|
||||
}
|
||||
} else {
|
||||
if (vlen(vecPlayer - m_vecTestPos) > m_iDisappearDist) {
|
||||
if (vlen(vecPlayer - WorldSpaceCenter()) > m_iDisappearDist) {
|
||||
return (PREDRAW_NEXT);
|
||||
}
|
||||
}
|
||||
#else
|
||||
if (vlen(vecPlayer - m_vecTestPos) > m_iDisappearDist) {
|
||||
if (vlen(vecPlayer - WorldSpaceCenter()) > m_iDisappearDist) {
|
||||
return (PREDRAW_NEXT);
|
||||
}
|
||||
#endif
|
||||
|
@ -101,10 +100,6 @@ func_lod::Init(void)
|
|||
setorigin(this, origin);
|
||||
movetype = MOVETYPE_NONE;
|
||||
drawmask = MASK_ENGINE;
|
||||
|
||||
m_vecTestPos[0] = absmin[0] + (0.5 * (absmax[0] - absmin[0]));
|
||||
m_vecTestPos[1] = absmin[1] + (0.5 * (absmax[1] - absmin[1]));
|
||||
m_vecTestPos[2] = absmin[2] + (0.5 * (absmax[2] - absmin[2]));
|
||||
}
|
||||
|
||||
void
|
||||
|
|
|
@ -61,8 +61,8 @@ server/stubs.qc
|
|||
server/infodecal.qc
|
||||
server/player_weaponstrip.qc
|
||||
server/player_loadsaved.qc
|
||||
server/prop_physics.qc
|
||||
server/prop_dynamic.qc
|
||||
server/prop_physics.qc
|
||||
server/point_camera.qc
|
||||
server/targ_speaker.qc
|
||||
server/target_cdaudio.qc
|
||||
|
|
|
@ -184,14 +184,14 @@ ambient_generic::Respawn(void)
|
|||
{
|
||||
m_strActivePath = m_strSoundPath;
|
||||
|
||||
if (spawnflags & AS_NOTTOGGLED) {
|
||||
if (HasSpawnFlags(AS_NOTTOGGLED)) {
|
||||
Trigger = UseNormal;
|
||||
m_iLoop = FALSE;
|
||||
} else {
|
||||
m_iLoop = TRUE;
|
||||
|
||||
/* set our sample up */
|
||||
if (spawnflags & AS_SILENT) {
|
||||
if (HasSpawnFlags(AS_SILENT)) {
|
||||
m_iToggleSwitch = FALSE;
|
||||
m_strActivePath = "common/null.wav";
|
||||
} else {
|
||||
|
@ -258,13 +258,13 @@ ambient_generic::ambient_generic(void)
|
|||
}
|
||||
|
||||
// There can be only one
|
||||
if (spawnflags & AS_ARADIUS) {
|
||||
if (HasSpawnFlags(AS_ARADIUS)) {
|
||||
m_flRadius = ATTN_NONE;
|
||||
} else if (spawnflags & AS_SRADIUS) {
|
||||
} else if (HasSpawnFlags(AS_SRADIUS)) {
|
||||
m_flRadius = ATTN_IDLE;
|
||||
} else if (spawnflags & AS_MRADIUS) {
|
||||
} else if (HasSpawnFlags(AS_MRADIUS)) {
|
||||
m_flRadius = ATTN_STATIC;
|
||||
} else if (spawnflags & AS_LRADIUS) {
|
||||
} else if (HasSpawnFlags(AS_LRADIUS)) {
|
||||
m_flRadius = ATTN_NORM;
|
||||
} else {
|
||||
m_flRadius = ATTN_STATIC;
|
||||
|
|
|
@ -59,7 +59,7 @@ button_target::Respawn(void)
|
|||
SetOrigin(GetSpawnOrigin());
|
||||
|
||||
/* it's either one or the other */
|
||||
if (spawnflags & BUTTA_USE) {
|
||||
if (HasSpawnFlags(BUTTA_USE)) {
|
||||
PlayerUse = PUseWrapper;
|
||||
} else {
|
||||
health = 1;
|
||||
|
@ -68,7 +68,7 @@ button_target::Respawn(void)
|
|||
}
|
||||
|
||||
/* purely cosmetic */
|
||||
frame = (spawnflags & BUTTA_TEXON) ? 1 : 0;
|
||||
frame = HasSpawnFlags(BUTTA_TEXON) ? 1 : 0;
|
||||
}
|
||||
|
||||
void
|
||||
|
|
|
@ -87,12 +87,12 @@ env_explosion::Trigger(entity act, int state)
|
|||
{
|
||||
FX_Explosion(origin);
|
||||
|
||||
if (!(spawnflags & ENVEXPLO_NODAMAGE)) {
|
||||
if (!HasSpawnFlags(ENVEXPLO_NODAMAGE)) {
|
||||
Damage_Radius(origin, this, m_iMagnitude, m_iMagnitude * 2.5f, TRUE, 0);
|
||||
}
|
||||
|
||||
// TODO: Respawn after round instead?
|
||||
if (!(spawnflags & ENVEXPLO_REPEATABLE)) {
|
||||
if (!HasSpawnFlags(ENVEXPLO_REPEATABLE)) {
|
||||
remove(this);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -102,7 +102,7 @@ env_fade::Trigger(entity act, int state)
|
|||
WriteByte(MSG_MULTICAST, spawnflags);
|
||||
msg_entity = act;
|
||||
|
||||
if (spawnflags & EVF_ONLYUSER)
|
||||
if (HasSpawnFlags(EVF_ONLYUSER))
|
||||
multicast([0,0,0], MULTICAST_ONE_R);
|
||||
else
|
||||
multicast([0,0,0], MULTICAST_ALL);
|
||||
|
|
|
@ -177,7 +177,7 @@ env_global::env_global(void)
|
|||
objerror("env_global: No globalstate name given! Aborting\n");
|
||||
}
|
||||
|
||||
if (spawnflags & GLOBAL_SETSPAWN) {
|
||||
if (HasSpawnFlags(GLOBAL_SETSPAWN)) {
|
||||
if (!GlobalPresent(m_strGlobalState)) {
|
||||
AddNewGlobal(m_strGlobalState, m_iInitialState);
|
||||
}
|
||||
|
|
|
@ -122,7 +122,7 @@ env_laser::Trigger(entity act, int state)
|
|||
void
|
||||
env_laser::Respawn(void)
|
||||
{
|
||||
if (spawnflags & ENVLAZ_STARTON) {
|
||||
if (HasSpawnFlags(ENVLAZ_STARTON)) {
|
||||
m_iState = 1;
|
||||
nextthink = time + 0.1;
|
||||
}
|
||||
|
|
|
@ -63,7 +63,7 @@ env_message::Play(entity act, int state)
|
|||
WriteFloat(MSG_MULTICAST, m_flVolume);
|
||||
WriteByte(MSG_MULTICAST, m_iAttenuation);
|
||||
|
||||
if (spawnflags & EMF_ALLPLAYERS) {
|
||||
if (HasSpawnFlags(EMF_ALLPLAYERS)) {
|
||||
msg_entity = this;
|
||||
multicast(origin, MULTICAST_ALL);
|
||||
} else {
|
||||
|
@ -71,7 +71,7 @@ env_message::Play(entity act, int state)
|
|||
multicast(origin, MULTICAST_ONE_R);
|
||||
}
|
||||
|
||||
if (spawnflags & EMF_ONCE) {
|
||||
if (HasSpawnFlags(EMF_ONCE)) {
|
||||
Trigger = __NULL__;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -93,19 +93,19 @@ env_render::Trigger(entity act, int state)
|
|||
|
||||
dprint(sprintf("^2env_render::^3Trigger^7: with spawnflags %d\n", spawnflags));
|
||||
dprint(sprintf("\tTarget: %s\n", target));
|
||||
if (!(spawnflags & SF_NORENDERMODE)) {
|
||||
if (!HasSpawnFlags(SF_NORENDERMODE)) {
|
||||
dprint(sprintf("\tMode change from %d to %d\n", trigger.m_iRenderMode, m_iRenderMode));
|
||||
trigger.SetRenderMode(m_iRenderMode);
|
||||
}
|
||||
if (!(spawnflags & SF_NORENDERCOLOR)) {
|
||||
if (!HasSpawnFlags(SF_NORENDERCOLOR)) {
|
||||
dprint(sprintf("\tColor change from %v to %v\n", trigger.m_vecRenderColor, m_vecRenderColor));
|
||||
trigger.SetRenderColor(m_vecRenderColor);
|
||||
}
|
||||
if (!(spawnflags & SF_NORENDERAMT)) {
|
||||
if (!HasSpawnFlags(SF_NORENDERAMT)) {
|
||||
dprint(sprintf("\tAmt change from %d to %d\n", trigger.m_flRenderAmt, m_flRenderAmt));
|
||||
trigger.SetRenderAmt(m_flRenderAmt);
|
||||
}
|
||||
if (!(spawnflags & SF_NORENDERFX)) {
|
||||
if (!HasSpawnFlags(SF_NORENDERFX)) {
|
||||
dprint(sprintf("\tFX change from %d to %d\n", trigger.m_iRenderFX, m_iRenderFX));
|
||||
trigger.SetRenderFX(m_iRenderFX);
|
||||
}
|
||||
|
|
|
@ -77,7 +77,7 @@ env_spark::TimedSpark(void)
|
|||
void
|
||||
env_spark::Trigger(entity act, int state)
|
||||
{
|
||||
if (spawnflags & EVSPARK_TOGGLE) {
|
||||
if (HasSpawnFlags(EVSPARK_TOGGLE)) {
|
||||
switch (state) {
|
||||
case TRIG_OFF:
|
||||
think = __NULL__;
|
||||
|
@ -106,7 +106,7 @@ env_spark::Respawn(void)
|
|||
m_flMaxDelay = 1.0f;
|
||||
}
|
||||
|
||||
if (spawnflags & EVSPARK_STARTON) {
|
||||
if (HasSpawnFlags(EVSPARK_STARTON)) {
|
||||
Trigger(this, TRIG_ON);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -65,7 +65,7 @@ env_sprite::SendEntity(entity ePEnt, float flags)
|
|||
if (clienttype(ePEnt) != CLIENTTYPE_REAL)
|
||||
return (0);
|
||||
|
||||
if (spawnflags & ENVS_PLAYONCE)
|
||||
if (HasSpawnFlags(ENVS_PLAYONCE))
|
||||
return (0);
|
||||
|
||||
/* Delete it on the client. */
|
||||
|
@ -132,7 +132,7 @@ env_sprite::NetworkOnce(void)
|
|||
void
|
||||
env_sprite::Trigger(entity act, int state)
|
||||
{
|
||||
if (spawnflags & ENVS_PLAYONCE) {
|
||||
if (HasSpawnFlags(ENVS_PLAYONCE)) {
|
||||
NetworkOnce();
|
||||
} else {
|
||||
m_iToggled = 1 - m_iToggled;
|
||||
|
@ -163,7 +163,7 @@ env_sprite::env_sprite(void)
|
|||
|
||||
super::NSRenderableEntity();
|
||||
|
||||
m_iToggled = ((spawnflags & ENVS_STARTON) > 0);
|
||||
m_iToggled = (HasSpawnFlags(ENVS_STARTON) > 0) ? TRUE : FALSE;
|
||||
|
||||
/* how pointless this would be otherwise. */
|
||||
if (!targetname)
|
||||
|
|
|
@ -176,7 +176,7 @@ func_breakable::Restore(string strKey, string strValue)
|
|||
void
|
||||
func_breakable::Pain(void)
|
||||
{
|
||||
if (spawnflags & SF_TRIGGER) {
|
||||
if (HasSpawnFlags(SF_TRIGGER)) {
|
||||
return;
|
||||
}
|
||||
|
||||
|
@ -187,7 +187,7 @@ func_breakable::Pain(void)
|
|||
void
|
||||
func_breakable::Explode(void)
|
||||
{
|
||||
vector rp = absmin + (0.5 * (absmax - absmin));
|
||||
vector rp = WorldSpaceCenter();
|
||||
FX_BreakModel(vlen(size) / 10, absmin, absmax, [0,0,0], GetSurfaceData(SURFDATA_MATERIAL));
|
||||
FX_Explosion(rp);
|
||||
Damage_Radius(rp, this, m_flExplodeMag, m_flExplodeRad, TRUE, 0);
|
||||
|
@ -227,7 +227,7 @@ func_breakable::Death(void)
|
|||
unit.think = break_spawnobject;
|
||||
unit.nextthink = time;
|
||||
unit.real_owner = this;
|
||||
setorigin(unit, absmin + (0.5 * (absmax - absmin)));
|
||||
setorigin(unit, WorldSpaceCenter());
|
||||
}
|
||||
|
||||
/* This may seem totally absurd. That's because it is. It's very
|
||||
|
@ -272,7 +272,7 @@ func_breakable::PlayerTouch(void)
|
|||
}
|
||||
}
|
||||
|
||||
if (spawnflags & SF_TOUCH) {
|
||||
if (HasSpawnFlags(SF_TOUCH)) {
|
||||
int fDamage = (float)(vlen(other.velocity) * 0.01f);
|
||||
|
||||
if (fDamage >= health) {
|
||||
|
@ -285,7 +285,7 @@ func_breakable::PlayerTouch(void)
|
|||
}
|
||||
}
|
||||
|
||||
if ((spawnflags & SF_PRESSURE) && (other.absmin[2] >= maxs[2] - 2)) {
|
||||
if (HasSpawnFlags(SF_PRESSURE) && (other.absmin[2] >= maxs[2] - 2)) {
|
||||
touch = __NULL__;
|
||||
think = TriggerWrap;
|
||||
|
||||
|
@ -309,7 +309,7 @@ func_breakable::Respawn(void)
|
|||
touch = PlayerTouch;
|
||||
think = __NULL__;
|
||||
|
||||
if (spawnflags & SF_TRIGGER) {
|
||||
if (HasSpawnFlags(SF_TRIGGER)) {
|
||||
takedamage = DAMAGE_NO;
|
||||
} else {
|
||||
takedamage = DAMAGE_YES;
|
||||
|
|
|
@ -106,7 +106,7 @@ class func_button:NSSurfacePropEntity
|
|||
virtual void(void) MoveBack;
|
||||
virtual void(void) MoveAway;
|
||||
virtual void(void) Touch;
|
||||
virtual void(void) Blocked;
|
||||
virtual void(entity) Blocked;
|
||||
virtual void(entity, int) Trigger;
|
||||
virtual void(void) DeathTrigger;
|
||||
virtual void(void) Use;
|
||||
|
@ -210,13 +210,13 @@ func_button::Arrived(void)
|
|||
UseOutput(this, m_strOnIn);
|
||||
m_iState = STATE_RAISED;
|
||||
|
||||
if (spawnflags & SF_BTT_TOUCH_ONLY) {
|
||||
if (HasSpawnFlags(SF_BTT_TOUCH_ONLY)) {
|
||||
touch = Touch;
|
||||
} else {
|
||||
touch = __NULL__;
|
||||
}
|
||||
|
||||
if (spawnflags & SF_BTT_TOGGLE) {
|
||||
if (HasSpawnFlags(SF_BTT_TOGGLE)) {
|
||||
return;
|
||||
}
|
||||
|
||||
|
@ -234,7 +234,7 @@ func_button::Returned(void)
|
|||
velocity = [0,0,0];
|
||||
nextthink = 0;
|
||||
|
||||
if (spawnflags & SF_BTT_TOUCH_ONLY) {
|
||||
if (HasSpawnFlags(SF_BTT_TOUCH_ONLY)) {
|
||||
touch = Touch;
|
||||
}
|
||||
|
||||
|
@ -329,7 +329,7 @@ func_button::Touch(void)
|
|||
if (other.movetype == MOVETYPE_WALK) {
|
||||
Trigger(other, TRIG_TOGGLE);
|
||||
|
||||
if (!(spawnflags & SF_BTT_TOUCH_ONLY)) {
|
||||
if (!HasSpawnFlags(SF_BTT_TOUCH_ONLY)) {
|
||||
touch = __NULL__;
|
||||
}
|
||||
}
|
||||
|
@ -342,7 +342,7 @@ func_button::Use(void)
|
|||
}
|
||||
|
||||
void
|
||||
func_button::Blocked(void)
|
||||
func_button::Blocked(entity eBlocker)
|
||||
{
|
||||
if (m_flWait >= 0) {
|
||||
if (m_iState == STATE_DOWN) {
|
||||
|
@ -411,7 +411,6 @@ func_button::Respawn(void)
|
|||
SetOrigin(GetSpawnOrigin());
|
||||
SetModel(GetSpawnModel());
|
||||
|
||||
blocked = Blocked;
|
||||
velocity = [0,0,0];
|
||||
nextthink = -1;
|
||||
health = GetSpawnHealth();
|
||||
|
@ -425,7 +424,7 @@ func_button::Respawn(void)
|
|||
m_flSpeed = 100;
|
||||
}
|
||||
|
||||
if (spawnflags & SF_BTT_TOUCH_ONLY) {
|
||||
if (HasSpawnFlags(SF_BTT_TOUCH_ONLY)) {
|
||||
touch = Touch;
|
||||
PlayerUse = __NULL__;
|
||||
} else {
|
||||
|
@ -435,7 +434,7 @@ func_button::Respawn(void)
|
|||
|
||||
m_vecPos1 = GetSpawnOrigin();
|
||||
|
||||
if (spawnflags & SF_BTT_NOMOVE) {
|
||||
if (HasSpawnFlags(SF_BTT_NOMOVE)) {
|
||||
m_vecPos2 = m_vecPos1;
|
||||
} else {
|
||||
m_vecPos2 = (m_vecPos1 + m_vecMoveDir * (fabs(m_vecMoveDir * size) - m_flLip));
|
||||
|
|
|
@ -85,7 +85,7 @@ func_conveyor::SetMovementDirection(void)
|
|||
void
|
||||
func_conveyor::touch(void)
|
||||
{
|
||||
if (spawnflags & SF_CONVEYOR_VISUAL)
|
||||
if (HasSpawnFlags(SF_CONVEYOR_VISUAL))
|
||||
return;
|
||||
|
||||
other.basevelocity = m_vecMoveDir * (m_flSpeed * -0.2);
|
||||
|
@ -127,7 +127,7 @@ func_conveyor::Respawn(void)
|
|||
|
||||
Trigger(this, TRIG_ON);
|
||||
|
||||
if (spawnflags & SF_CONVEYOR_NOTSOLID) {
|
||||
if (HasSpawnFlags(SF_CONVEYOR_NOTSOLID)) {
|
||||
SetSolid(SOLID_NOT);
|
||||
SetSkin(0);
|
||||
}
|
||||
|
|
|
@ -110,7 +110,7 @@ class func_door:NSRenderableEntity
|
|||
virtual void(void) Returned;
|
||||
virtual void(void) Respawn;
|
||||
virtual void(entity, int) Trigger;
|
||||
virtual void(void) Blocked;
|
||||
virtual void(entity) Blocked;
|
||||
virtual void(void) Touch;
|
||||
virtual void(void) Use;
|
||||
virtual void(float) Save;
|
||||
|
@ -164,14 +164,14 @@ func_door::Arrived(void)
|
|||
if (m_strSndMove)
|
||||
sound(this, CHAN_WEAPON, "common/null.wav", 1.0f, ATTN_NORM);
|
||||
|
||||
if (!(spawnflags & SF_MOV_USE)) {
|
||||
if (!HasSpawnFlags(SF_MOV_USE)) {
|
||||
touch = Touch;
|
||||
}
|
||||
if (m_flWait < 0) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (!(spawnflags & SF_MOV_TOGGLE)) {
|
||||
if (!HasSpawnFlags(SF_MOV_TOGGLE)) {
|
||||
think = MoveBack;
|
||||
nextthink = (ltime + m_flWait);
|
||||
}
|
||||
|
@ -201,7 +201,7 @@ func_door::Returned(void)
|
|||
if (m_strSndMove)
|
||||
sound(this, CHAN_WEAPON, "common/null.wav", 1.0f, ATTN_NORM);
|
||||
|
||||
if (!(spawnflags & SF_MOV_USE)) {
|
||||
if (!HasSpawnFlags(SF_MOV_USE)) {
|
||||
touch = Touch;
|
||||
}
|
||||
|
||||
|
@ -221,7 +221,7 @@ func_door::MoveBack(void)
|
|||
if (m_strSndMove)
|
||||
Sound_Play(this, CHAN_WEAPON, m_strSndMove);
|
||||
|
||||
if (!(spawnflags & SF_MOV_USE)) {
|
||||
if (!HasSpawnFlags(SF_MOV_USE)) {
|
||||
touch = __NULL__;
|
||||
}
|
||||
|
||||
|
@ -246,7 +246,7 @@ func_door::MoveAway(void)
|
|||
if (m_strSndMove)
|
||||
Sound_Play(this, CHAN_WEAPON, m_strSndMove);
|
||||
|
||||
if (!(spawnflags & SF_MOV_TOGGLE)) {
|
||||
if (!HasSpawnFlags(SF_MOV_TOGGLE)) {
|
||||
if (m_iState == DOORSTATE_RAISED) {
|
||||
nextthink = (ltime + m_flWait);
|
||||
return;
|
||||
|
@ -266,7 +266,7 @@ func_door::Trigger(entity act, int state)
|
|||
return;
|
||||
|
||||
if (m_flNextTrigger > time) {
|
||||
if (!(spawnflags & SF_MOV_TOGGLE)) {
|
||||
if (!HasSpawnFlags(SF_MOV_TOGGLE)) {
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
@ -301,7 +301,7 @@ func_door::Touch(void)
|
|||
return;
|
||||
}
|
||||
|
||||
if (spawnflags & SF_MOV_TOGGLE) {
|
||||
if (HasSpawnFlags(SF_MOV_TOGGLE)) {
|
||||
return;
|
||||
}
|
||||
|
||||
|
@ -313,10 +313,10 @@ func_door::Touch(void)
|
|||
}
|
||||
|
||||
void
|
||||
func_door::Blocked(void)
|
||||
func_door::Blocked(entity eBlocker)
|
||||
{
|
||||
if (m_iDamage) {
|
||||
Damage_Apply(other, this, m_iDamage, 0, DMG_CRUSH);
|
||||
Damage_Apply(eBlocker, this, m_iDamage, 0, DMG_CRUSH);
|
||||
}
|
||||
|
||||
if (!m_iForceClosed)
|
||||
|
@ -394,7 +394,7 @@ func_door::Respawn(void)
|
|||
SetMovementDirection();
|
||||
ClearAngles();
|
||||
|
||||
if (spawnflags & SF_MOV_PASSABLE)
|
||||
if (HasSpawnFlags(SF_MOV_PASSABLE))
|
||||
SetSolid(SOLID_NOT);
|
||||
else
|
||||
SetSolid(SOLID_BSP);
|
||||
|
@ -402,7 +402,7 @@ func_door::Respawn(void)
|
|||
SetMovetype(MOVETYPE_PUSH);
|
||||
SetModel(GetSpawnModel());
|
||||
SetOrigin(GetSpawnOrigin());
|
||||
blocked = Blocked;
|
||||
|
||||
think = __NULL__;
|
||||
nextthink = 0.0f;
|
||||
|
||||
|
@ -419,7 +419,7 @@ func_door::Respawn(void)
|
|||
m_iDamage = 2;
|
||||
}
|
||||
|
||||
if (spawnflags & SF_MOV_USE) {
|
||||
if (HasSpawnFlags(SF_MOV_USE)) {
|
||||
touch = __NULL__;
|
||||
PlayerUse = Use;
|
||||
} else {
|
||||
|
@ -434,7 +434,7 @@ func_door::Respawn(void)
|
|||
m_vecPos1 = GetSpawnOrigin();
|
||||
m_vecPos2 = (m_vecPos1 + m_vecMoveDir * (fabs(m_vecMoveDir * size) - m_flLip));
|
||||
|
||||
if (spawnflags & SF_MOV_OPEN) {
|
||||
if (HasSpawnFlags(SF_MOV_OPEN)) {
|
||||
SetOrigin(m_vecPos2);
|
||||
m_vecPos2 = m_vecPos1;
|
||||
m_vecPos1 = origin;
|
||||
|
|
|
@ -101,7 +101,7 @@ class func_door_rotating:NSRenderableEntity
|
|||
virtual void(entity, int) Trigger;
|
||||
virtual void(void) Use;
|
||||
virtual void(void) Touch;
|
||||
virtual void(void) Blocked;
|
||||
virtual void(entity) Blocked;
|
||||
virtual void(void) SetMovementDirection;
|
||||
virtual void(vector angle, void(void) func) RotToDest;
|
||||
virtual void(string, string) SpawnKey;
|
||||
|
@ -159,11 +159,11 @@ func_door_rotating::Arrived(void)
|
|||
sound(this, CHAN_VOICE, "common/null.wav", 1.0f, ATTN_NORM);
|
||||
}
|
||||
|
||||
if (!(spawnflags & SF_ROT_USE)) {
|
||||
if (!HasSpawnFlags(SF_ROT_USE)) {
|
||||
touch = Touch;
|
||||
}
|
||||
|
||||
if ((spawnflags & SF_ROT_TOGGLE) || m_flWait < 0)
|
||||
if (HasSpawnFlags(SF_ROT_TOGGLE) || m_flWait < 0)
|
||||
return;
|
||||
|
||||
think = Back;
|
||||
|
@ -177,7 +177,7 @@ func_door_rotating::Returned(void)
|
|||
avelocity = [0,0,0];
|
||||
nextthink = 0.0f;
|
||||
|
||||
if (!(spawnflags & SF_ROT_USE)) {
|
||||
if (!HasSpawnFlags(SF_ROT_USE)) {
|
||||
touch = Touch;
|
||||
}
|
||||
|
||||
|
@ -203,7 +203,7 @@ func_door_rotating::Returned(void)
|
|||
void
|
||||
func_door_rotating::Back(void)
|
||||
{
|
||||
if (!(spawnflags & SF_DOOR_SILENT)) {
|
||||
if (!HasSpawnFlags(SF_DOOR_SILENT)) {
|
||||
|
||||
if (m_strSndClose) {
|
||||
Sound_Play(this, CHAN_VOICE, m_strSndClose);
|
||||
|
@ -212,7 +212,7 @@ func_door_rotating::Back(void)
|
|||
}
|
||||
}
|
||||
|
||||
if (!(spawnflags & SF_ROT_USE)) {
|
||||
if (!HasSpawnFlags(SF_ROT_USE)) {
|
||||
touch = __NULL__;
|
||||
}
|
||||
|
||||
|
@ -229,7 +229,7 @@ func_door_rotating::Away(void)
|
|||
return;
|
||||
}
|
||||
|
||||
if (!(spawnflags & SF_DOOR_SILENT)) {
|
||||
if (!HasSpawnFlags(SF_DOOR_SILENT)) {
|
||||
if (m_strSndOpen) {
|
||||
Sound_Play(this, CHAN_VOICE, m_strSndOpen);
|
||||
} else {
|
||||
|
@ -244,9 +244,9 @@ func_door_rotating::Away(void)
|
|||
|
||||
m_iState = STATE_UP;
|
||||
|
||||
if (!(spawnflags & SF_ROT_ONEWAY)) {
|
||||
if (!HasSpawnFlags(SF_ROT_ONEWAY)) {
|
||||
/* One way doors only work on the Y axis */
|
||||
if (!(spawnflags & SF_ROT_ZAXIS || spawnflags & SF_ROT_XAXIS)) {
|
||||
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;
|
||||
|
@ -311,7 +311,7 @@ func_door_rotating::Touch(void)
|
|||
return;
|
||||
}
|
||||
|
||||
if (spawnflags & SF_ROT_USE) {
|
||||
if (HasSpawnFlags(SF_ROT_USE)) {
|
||||
return;
|
||||
}
|
||||
|
||||
|
@ -324,10 +324,10 @@ func_door_rotating::Touch(void)
|
|||
}
|
||||
|
||||
void
|
||||
func_door_rotating::Blocked(void)
|
||||
func_door_rotating::Blocked(entity eBlocker)
|
||||
{
|
||||
if (m_iDamage) {
|
||||
Damage_Apply(other, this, m_iDamage, 0, DMG_CRUSH);
|
||||
Damage_Apply(eBlocker, this, m_iDamage, 0, DMG_CRUSH);
|
||||
}
|
||||
|
||||
if (m_flWait >= 0) {
|
||||
|
@ -342,9 +342,9 @@ func_door_rotating::Blocked(void)
|
|||
void
|
||||
func_door_rotating::SetMovementDirection(void)
|
||||
{
|
||||
if (spawnflags & SF_ROT_ZAXIS) {
|
||||
if (HasSpawnFlags(SF_ROT_ZAXIS)) {
|
||||
m_vecMoveDir = [0,0,1];
|
||||
} else if (spawnflags & SF_ROT_XAXIS) {
|
||||
} else if (HasSpawnFlags(SF_ROT_XAXIS)) {
|
||||
m_vecMoveDir = [1,0,0];
|
||||
} else {
|
||||
m_vecMoveDir = [0,1,0];
|
||||
|
@ -404,9 +404,7 @@ func_door_rotating::Respawn(void)
|
|||
if (m_flWait == 0)
|
||||
m_flWait = 0.01f;
|
||||
|
||||
blocked = Blocked;
|
||||
|
||||
if (spawnflags & SF_ROT_USE) {
|
||||
if (HasSpawnFlags(SF_ROT_USE)) {
|
||||
touch = __NULL__;
|
||||
PlayerUse = Use;
|
||||
} else {
|
||||
|
@ -416,13 +414,13 @@ func_door_rotating::Respawn(void)
|
|||
|
||||
m_vecPos1 = GetSpawnAngles();
|
||||
|
||||
if (spawnflags & SF_ROT_BACKWARDS) {
|
||||
if (HasSpawnFlags(SF_ROT_BACKWARDS)) {
|
||||
m_vecPos2 = GetSpawnAngles() + m_vecMoveDir * -m_flDistance;
|
||||
} else {
|
||||
m_vecPos2 = GetSpawnAngles() + m_vecMoveDir * m_flDistance;
|
||||
}
|
||||
|
||||
if (spawnflags & SF_ROT_OPEN) {
|
||||
if (HasSpawnFlags(SF_ROT_OPEN)) {
|
||||
vector vTemp = m_vecPos2;
|
||||
m_vecPos2 = m_vecPos1;
|
||||
m_vecPos1 = vTemp;
|
||||
|
@ -434,7 +432,7 @@ func_door_rotating::Respawn(void)
|
|||
|
||||
m_iState = STATE_LOWERED;
|
||||
|
||||
if (spawnflags & SF_ROT_PASSABLE) {
|
||||
if (HasSpawnFlags(SF_ROT_PASSABLE)) {
|
||||
SetSolid(SOLID_NOT);
|
||||
}
|
||||
|
||||
|
|
|
@ -95,9 +95,7 @@ func_guntarget::Move(void)
|
|||
}
|
||||
|
||||
vector vecWorldPos;
|
||||
vecWorldPos[0] = absmin[0] + (0.5 * (absmax[0] - absmin[0]));
|
||||
vecWorldPos[1] = absmin[1] + (0.5 * (absmax[1] - absmin[1]));
|
||||
vecWorldPos[2] = absmin[2] + (0.5 * (absmax[2] - absmin[2]));
|
||||
vecWorldPos = WorldSpaceCenter();
|
||||
|
||||
vel_to_pos = (node.origin - vecWorldPos);
|
||||
flTravelTime = (vlen(vel_to_pos) / m_flSpeed);
|
||||
|
@ -206,7 +204,7 @@ func_guntarget::Respawn(void)
|
|||
SetOrigin(GetSpawnOrigin());
|
||||
health = GetSpawnHealth();
|
||||
|
||||
if (spawnflags & SF_GUNTARGET_ON) {
|
||||
if (HasSpawnFlags(SF_GUNTARGET_ON)) {
|
||||
think = ThinkWrap;
|
||||
nextthink = ltime + 0.25f;
|
||||
}
|
||||
|
|
|
@ -122,9 +122,7 @@ func_mortar_field::FireRandom(void)
|
|||
vector vecPos;
|
||||
|
||||
/* get our center */
|
||||
vecPos[0] = absmin[0] + (0.5f * (absmax[0] - absmin[0]));
|
||||
vecPos[1] = absmin[1] + (0.5f * (absmax[1] - absmin[1]));
|
||||
vecPos[2] = absmin[2] + (0.5f * (absmax[2] - absmin[2]));
|
||||
vecPos = WorldSpaceCenter();
|
||||
|
||||
/* now randomize the position in the volume */
|
||||
vecPos[0] += mins[0] + (random() * size[0]);
|
||||
|
@ -140,9 +138,7 @@ func_mortar_field::FireTarget(entity act)
|
|||
vector vecPos;
|
||||
|
||||
/* get our center */
|
||||
vecPos[0] = absmin[0] + (0.5f * (absmax[0] - absmin[0]));
|
||||
vecPos[1] = absmin[1] + (0.5f * (absmax[1] - absmin[1]));
|
||||
vecPos[2] = absmin[2] + (0.5f * (absmax[2] - absmin[2]));
|
||||
vecPos = WorldSpaceCenter();
|
||||
|
||||
/* orient towards the nearest player pos, clamping by our bounds */
|
||||
vecPos[0] = bound(vecPos[0] + mins[0], act.origin[0], vecPos[0] + maxs[0]);
|
||||
|
@ -178,9 +174,7 @@ func_mortar_field::FireControlled(void)
|
|||
return;
|
||||
|
||||
/* find our center */
|
||||
vecPos[0] = absmin[0] + (0.5f * (absmax[0] - absmin[0]));
|
||||
vecPos[1] = absmin[1] + (0.5f * (absmax[1] - absmin[1]));
|
||||
vecPos[2] = absmin[2] + (0.5f * (absmax[2] - absmin[2]));
|
||||
vecPos = WorldSpaceCenter();
|
||||
|
||||
/* now offset the position to the rot_buttons */
|
||||
vecPos[0] += mins[0] + (mX.GetProgress() * size[0]);
|
||||
|
|
|
@ -105,9 +105,9 @@ func_pendulum::customphysics(void)
|
|||
|
||||
m_flProgress += frametime;
|
||||
|
||||
if (spawnflags & FUNCPEND_XAXIS)
|
||||
if (HasSpawnFlags(FUNCPEND_XAXIS))
|
||||
angles[2] = sin(m_flProgress);
|
||||
else if (spawnflags & FUNCPEND_YAXIS)
|
||||
else if (HasSpawnFlags(FUNCPEND_YAXIS))
|
||||
angles[0] = sin(m_flProgress);
|
||||
else
|
||||
angles[1] = sin(m_flProgress);
|
||||
|
@ -129,17 +129,17 @@ func_pendulum::Trigger(entity act, int state)
|
|||
m_iActive = 1 - m_iActive;
|
||||
}
|
||||
|
||||
if (m_iActive == 0 && spawnflags & FUNCPEND_RETURNONTRIGGER)
|
||||
if (m_iActive == 0 && HasSpawnFlags(FUNCPEND_RETURNONTRIGGER))
|
||||
angles = [0,0,0];
|
||||
}
|
||||
|
||||
void
|
||||
func_pendulum::Respawn(void)
|
||||
{
|
||||
if (spawnflags & FUNCPEND_STARTON)
|
||||
if (HasSpawnFlags(FUNCPEND_STARTON))
|
||||
m_iActive = TRUE;
|
||||
|
||||
if (spawnflags & FUNCPEND_NONSOLID)
|
||||
if (HasSpawnFlags(FUNCPEND_NONSOLID))
|
||||
SetSolid(SOLID_NOT);
|
||||
else
|
||||
SetSolid(SOLID_BSP);
|
||||
|
|
|
@ -37,7 +37,7 @@ func_physbox::Respawn(void)
|
|||
{
|
||||
NSPhysicsEntity::Respawn();
|
||||
|
||||
if (spawnflags & FNCPHYBX_ASLEEP)
|
||||
if (HasSpawnFlags(FNCPHYBX_ASLEEP))
|
||||
PhysicsDisable();
|
||||
else
|
||||
PhysicsEnable();
|
||||
|
|
|
@ -135,7 +135,7 @@ func_plat::MoveToggle(void)
|
|||
void
|
||||
func_plat::Trigger(entity act, int state)
|
||||
{
|
||||
if (spawnflags & FNCPLAT_TRIGGER)
|
||||
if (HasSpawnFlags(FNCPLAT_TRIGGER))
|
||||
return;
|
||||
|
||||
switch (state) {
|
||||
|
|
|
@ -96,7 +96,7 @@ func_pushable::customphysics(void)
|
|||
}
|
||||
|
||||
/* see if we're clipping against entities or other func_pushable_bbox helper entities */
|
||||
vector position = absmin + (0.5 * (absmax - absmin));
|
||||
vector position = WorldSpaceCenter();
|
||||
|
||||
/* if we're too far away from our box, split */
|
||||
if ((vlen(m_pPuller.origin - position) - vlen(size)) > 64)
|
||||
|
@ -114,7 +114,7 @@ func_pushable::customphysics(void)
|
|||
if (vlen(velocity))
|
||||
runstandardplayerphysics(this);
|
||||
|
||||
setorigin(m_eCollBox, absmin + (0.5 * (absmax - absmin)));
|
||||
setorigin(m_eCollBox, WorldSpaceCenter());
|
||||
}
|
||||
|
||||
void
|
||||
|
@ -126,7 +126,7 @@ func_pushable::PlayerTouch(void)
|
|||
}
|
||||
|
||||
/* get the real position of the pushable */
|
||||
vector position = absmin + (0.5 * (absmax - absmin));
|
||||
vector position = WorldSpaceCenter();
|
||||
|
||||
/* check if we're inside the pushable */
|
||||
if (other.origin[0] >= absmin[0] && other.origin[0] <= absmax[0])
|
||||
|
@ -165,7 +165,7 @@ func_pushable::Respawn(void)
|
|||
m_eCollBox.solid = SOLID_BBOX;
|
||||
m_eCollBox.owner = this;
|
||||
setsize(m_eCollBox, -(size/2) * 0.9f, (size/2) * 0.9f);
|
||||
setorigin(m_eCollBox, absmin + (0.5 * (absmax - absmin)));
|
||||
setorigin(m_eCollBox, WorldSpaceCenter());
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -177,7 +177,7 @@ func_rot_button::OnPlayerUse(void)
|
|||
void
|
||||
func_rot_button::touch(void)
|
||||
{
|
||||
if (spawnflags & FNCROTBUT_TOUCHABLE)
|
||||
if (HasSpawnFlags(FNCROTBUT_TOUCHABLE))
|
||||
TurnToggle();
|
||||
}
|
||||
|
||||
|
@ -190,7 +190,7 @@ func_rot_button::TurnToggle(void)
|
|||
Rotate(GetSpawnAngles(), ArrivedOpened);
|
||||
|
||||
/* in toggle mode, we trigger our targets every turn */
|
||||
if (spawnflags & FNCROTBUT_TOGGLE)
|
||||
if (HasSpawnFlags(FNCROTBUT_TOGGLE))
|
||||
TriggerTargets();
|
||||
}
|
||||
}
|
||||
|
@ -207,7 +207,7 @@ func_rot_button::Respawn(void)
|
|||
{
|
||||
SetMovetype(MOVETYPE_PUSH);
|
||||
|
||||
if (spawnflags & FNCROTBUT_NONSOLID)
|
||||
if (HasSpawnFlags(FNCROTBUT_NONSOLID))
|
||||
SetSolid(SOLID_NOT);
|
||||
else
|
||||
SetSolid(SOLID_BSP);
|
||||
|
@ -227,15 +227,15 @@ func_rot_button::Respawn(void)
|
|||
}
|
||||
|
||||
vector vecMoveDir;
|
||||
if (spawnflags & FNCROTBUT_XAXIS) {
|
||||
if (HasSpawnFlags(FNCROTBUT_XAXIS)) {
|
||||
vecMoveDir = [0,0,1];
|
||||
} else if (spawnflags & FNCROTBUT_YAXIS) {
|
||||
} else if (HasSpawnFlags(FNCROTBUT_YAXIS)) {
|
||||
vecMoveDir = [0,1,0];
|
||||
} else {
|
||||
vecMoveDir = [1,0,0];
|
||||
}
|
||||
|
||||
if (spawnflags & FNCROTBUT_REVERSE) {
|
||||
if (HasSpawnFlags(FNCROTBUT_REVERSE)) {
|
||||
vecMoveDir *= -1;
|
||||
}
|
||||
|
||||
|
|
|
@ -80,7 +80,8 @@ class func_rotating:NSRenderableEntity
|
|||
virtual void(string, string) SpawnKey;
|
||||
|
||||
virtual void(void) Rotate;
|
||||
virtual void(void) Blocked;
|
||||
virtual void(entity) Blocked;
|
||||
virtual void(void) BlockedTouch;
|
||||
virtual void(void) SetMovementDirection;
|
||||
};
|
||||
|
||||
|
@ -132,7 +133,7 @@ func_rotating::Trigger(entity act, int state)
|
|||
} else {
|
||||
float flSpeed;
|
||||
|
||||
if (spawnflags & FR_TOGGLEDIR && m_flDir) {
|
||||
if (HasSpawnFlags(FR_TOGGLEDIR) && m_flDir) {
|
||||
flSpeed = m_flSpeed * -1;
|
||||
} else {
|
||||
flSpeed = m_flSpeed;
|
||||
|
@ -148,7 +149,7 @@ func_rotating::Trigger(entity act, int state)
|
|||
}
|
||||
|
||||
void
|
||||
func_rotating::Blocked(void)
|
||||
func_rotating::Blocked(entity eBlocker)
|
||||
{
|
||||
if (vlen(avelocity) <= 0) {
|
||||
return;
|
||||
|
@ -167,6 +168,12 @@ func_rotating::Blocked(void)
|
|||
}
|
||||
}
|
||||
|
||||
void
|
||||
func_rotating::BlockedTouch(void)
|
||||
{
|
||||
Blocked(other);
|
||||
}
|
||||
|
||||
void
|
||||
func_rotating::Respawn(void)
|
||||
{
|
||||
|
@ -180,38 +187,36 @@ func_rotating::Respawn(void)
|
|||
|
||||
SetModel(GetSpawnModel());
|
||||
SetMovetype(MOVETYPE_PUSH);
|
||||
SetSolid((spawnflags & FR_NOTSOLID) ? SOLID_NOT : SOLID_BSP);
|
||||
SetSolid(HasSpawnFlags(FR_NOTSOLID) ? SOLID_NOT : SOLID_BSP);
|
||||
SetOrigin(GetSpawnOrigin());
|
||||
|
||||
RestoreAngles();
|
||||
SetMovementDirection();
|
||||
ClearAngles();
|
||||
|
||||
if (spawnflags & FR_STARTON) {
|
||||
if (HasSpawnFlags(FR_STARTON)) {
|
||||
avelocity = m_vecMoveDir * m_flSpeed;
|
||||
think = Rotate;
|
||||
nextthink = ltime + 1.5f;
|
||||
}
|
||||
|
||||
blocked = Blocked;
|
||||
|
||||
if (spawnflags & FR_FANPAIN) {
|
||||
touch = Blocked;
|
||||
if (HasSpawnFlags(FR_FANPAIN)) {
|
||||
touch = BlockedTouch;
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
func_rotating::SetMovementDirection(void)
|
||||
{
|
||||
if (spawnflags & FR_ZAXIS) {
|
||||
if (HasSpawnFlags(FR_ZAXIS)) {
|
||||
m_vecMoveDir = [0,0,1];
|
||||
} else if (spawnflags & FR_XAXIS) {
|
||||
} else if (HasSpawnFlags(FR_XAXIS)) {
|
||||
m_vecMoveDir = [1,0,0];
|
||||
} else {
|
||||
m_vecMoveDir = [0,1,0];
|
||||
}
|
||||
|
||||
if (spawnflags & FR_REVERSE) {
|
||||
if (HasSpawnFlags(FR_REVERSE)) {
|
||||
m_vecMoveDir *= -1;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -73,7 +73,7 @@ class func_tracktrain:NSRenderableEntity
|
|||
virtual void(void) AfterSpawn;
|
||||
virtual void(void) PathNext;
|
||||
virtual void(void) PathMove;
|
||||
virtual void(void) Blocked;
|
||||
virtual void(entity) Blocked;
|
||||
};
|
||||
|
||||
void
|
||||
|
@ -120,18 +120,18 @@ func_tracktrain::Restore(string strKey, string strValue)
|
|||
}
|
||||
|
||||
void
|
||||
func_tracktrain::Blocked(void)
|
||||
func_tracktrain::Blocked(entity eBlocker)
|
||||
{
|
||||
/* HACK: Make corpses gib instantly */
|
||||
if (other.solid == SOLID_CORPSE) {
|
||||
Damage_Apply(other, this, 500, 0, DMG_EXPLODE);
|
||||
if (eBlocker.solid == SOLID_CORPSE) {
|
||||
Damage_Apply(eBlocker, this, 500, 0, DMG_EXPLODE);
|
||||
return;
|
||||
}
|
||||
|
||||
if (other.takedamage != DAMAGE_NO) {
|
||||
Damage_Apply(other, this, m_flDamage, 0, DMG_CRUSH);
|
||||
if (eBlocker.takedamage != DAMAGE_NO) {
|
||||
Damage_Apply(eBlocker, this, m_flDamage, 0, DMG_CRUSH);
|
||||
} else {
|
||||
remove(other);
|
||||
remove(eBlocker);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -242,12 +242,12 @@ func_tracktrain::PathNext(void)
|
|||
velocity = [0,0,0];
|
||||
|
||||
/* warp */
|
||||
if (eNode.spawnflags & PC_TELEPORT) {
|
||||
if (eNode.HasSpawnFlags(PC_TELEPORT)) {
|
||||
SetOrigin((eNode.origin) + [0,0,m_flHeight]);
|
||||
}
|
||||
|
||||
/* stop until triggered again */
|
||||
if (eNode.spawnflags & PC_WAIT) {
|
||||
if (eNode.HasSpawnFlags(PC_WAIT)) {
|
||||
SoundStop();
|
||||
return;
|
||||
}
|
||||
|
@ -281,9 +281,8 @@ func_tracktrain::AfterSpawn(void)
|
|||
void
|
||||
func_tracktrain::Respawn(void)
|
||||
{
|
||||
SetSolid(spawnflags & TRAIN_NOTSOLID ? SOLID_NOT : SOLID_BSP);
|
||||
SetSolid(HasSpawnFlags(TRAIN_NOTSOLID) ? SOLID_NOT : SOLID_BSP);
|
||||
SetMovetype(MOVETYPE_PUSH);
|
||||
blocked = Blocked;
|
||||
SetModel(GetSpawnModel());
|
||||
SetOrigin(GetSpawnOrigin());
|
||||
m_flSpeed = m_flStartSpeed;
|
||||
|
|
|
@ -76,7 +76,7 @@ class func_train:NSRenderableEntity
|
|||
virtual void(void) AfterSpawn;
|
||||
virtual void(void) PathNext;
|
||||
virtual void(void) PathMove;
|
||||
virtual void(void) Blocked;
|
||||
virtual void(entity) Blocked;
|
||||
};
|
||||
|
||||
void
|
||||
|
@ -115,18 +115,18 @@ func_train::Restore(string strKey, string strValue)
|
|||
}
|
||||
|
||||
void
|
||||
func_train::Blocked(void)
|
||||
func_train::Blocked(entity eBlocker)
|
||||
{
|
||||
/* HACK: Make corpses gib instantly */
|
||||
if (other.solid == SOLID_CORPSE) {
|
||||
Damage_Apply(other, this, 500, 0, DMG_EXPLODE);
|
||||
Damage_Apply(eBlocker, this, 500, 0, DMG_EXPLODE);
|
||||
return;
|
||||
}
|
||||
|
||||
if (other.takedamage != DAMAGE_NO) {
|
||||
Damage_Apply(other, this, m_flDamage, 0, DMG_CRUSH);
|
||||
Damage_Apply(eBlocker, this, m_flDamage, 0, DMG_CRUSH);
|
||||
} else {
|
||||
remove(other);
|
||||
remove(eBlocker);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -164,9 +164,7 @@ func_train::PathMove(void)
|
|||
return;
|
||||
}
|
||||
|
||||
vecWorldPos[0] = absmin[0] + (0.5 * (absmax[0] - absmin[0]));
|
||||
vecWorldPos[1] = absmin[1] + (0.5 * (absmax[1] - absmin[1]));
|
||||
vecWorldPos[2] = absmin[2] + (0.5 * (absmax[2] - absmin[2]));
|
||||
vecWorldPos = WorldSpaceCenter();
|
||||
|
||||
vecVelocity = (eNode.origin - vecWorldPos);
|
||||
flTravelTime = (vlen(vecVelocity) / m_flSpeed);
|
||||
|
@ -224,12 +222,12 @@ func_train::PathNext(void)
|
|||
velocity = [0,0,0];
|
||||
|
||||
/* warp */
|
||||
if (eNode.spawnflags & PC_TELEPORT) {
|
||||
if (eNode.HasSpawnFlags(PC_TELEPORT)) {
|
||||
SetOrigin(eNode.origin - (mins + maxs) * 0.5);
|
||||
}
|
||||
|
||||
/* stop until triggered again */
|
||||
if (eNode.spawnflags & PC_WAIT || spawnflags & TRAIN_WAIT) {
|
||||
if (eNode.HasSpawnFlags(PC_WAIT) || HasSpawnFlags(TRAIN_WAIT)) {
|
||||
SoundStop();
|
||||
return;
|
||||
}
|
||||
|
@ -263,9 +261,8 @@ func_train::AfterSpawn(void)
|
|||
void
|
||||
func_train::Respawn(void)
|
||||
{
|
||||
SetSolid(spawnflags & TRAIN_NOTSOLID ? SOLID_NOT : SOLID_BSP);
|
||||
SetSolid(HasSpawnFlags(TRAIN_NOTSOLID) ? SOLID_NOT : SOLID_BSP);
|
||||
SetMovetype(MOVETYPE_PUSH);
|
||||
blocked = Blocked;
|
||||
SetModel(GetSpawnModel());
|
||||
SetOrigin(GetSpawnOrigin());
|
||||
|
||||
|
|
|
@ -360,12 +360,12 @@ func_vehicle::customphysics(void)
|
|||
setorigin(m_wlBR, origin + v_right * m_flWidth - v_forward * m_flLength);
|
||||
setorigin(m_wlBL, origin - v_right * m_flWidth - v_forward * m_flLength);
|
||||
|
||||
if (spawnflags & FUNCVEH_FWDRIVE) {
|
||||
if (HasSpawnFlags(FUNCVEH_FWDRIVE)) {
|
||||
m_wlFL.Physics(0);
|
||||
m_wlFR.Physics(0);
|
||||
m_wlBL.Physics(m_flTurn);
|
||||
m_wlBR.Physics(m_flTurn);
|
||||
} else if (spawnflags & FUNCVEH_RWDRIVE) {
|
||||
} else if (HasSpawnFlags(FUNCVEH_RWDRIVE)) {
|
||||
m_wlFL.Physics(-m_flTurn);
|
||||
m_wlFR.Physics(-m_flTurn);
|
||||
m_wlBL.Physics(0);
|
||||
|
|
|
@ -104,7 +104,7 @@ func_wall_toggle::Respawn(void)
|
|||
m_iVisible = 1;
|
||||
m_oldmodelindex = modelindex;
|
||||
|
||||
if (spawnflags & FTW_STARTHIDDEN) {
|
||||
if (HasSpawnFlags(FTW_STARTHIDDEN)) {
|
||||
Trigger(this, TRIG_OFF);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -109,9 +109,9 @@ game_counter::Trigger(entity act, int state)
|
|||
if (m_iCounted < m_iMaxCount)
|
||||
return;
|
||||
|
||||
if (spawnflags & GMCNT_REMOVE)
|
||||
if (HasSpawnFlags(GMCNT_REMOVE))
|
||||
Destroy();
|
||||
else if (spawnflags & GMCNT_RESET)
|
||||
else if (HasSpawnFlags(GMCNT_RESET))
|
||||
Respawn();
|
||||
else
|
||||
m_iValue = 1;
|
||||
|
|
|
@ -86,7 +86,7 @@ game_counter_set::Trigger(entity act, int state)
|
|||
targ.SetCount(m_iCount);
|
||||
}
|
||||
|
||||
if (spawnflags & GMCNTS_REMOVE)
|
||||
if (HasSpawnFlags(GMCNTS_REMOVE))
|
||||
Destroy();
|
||||
}
|
||||
|
||||
|
|
|
@ -143,7 +143,7 @@ game_text::Trigger(entity act, int state)
|
|||
WriteFloat(MSG_MULTICAST, m_flHoldTime);
|
||||
WriteFloat(MSG_MULTICAST, m_flFXTime);
|
||||
|
||||
if (spawnflags & GTF_ALLPLAYERS) {
|
||||
if (HasSpawnFlags(GTF_ALLPLAYERS)) {
|
||||
msg_entity = this;
|
||||
multicast(origin, MULTICAST_ALL);
|
||||
} else {
|
||||
|
|
|
@ -187,7 +187,7 @@ light::Respawn(void)
|
|||
case BSPVER_HL:
|
||||
case BSPVER_Q2:
|
||||
case BSPVER_Q2W:
|
||||
if (spawnflags & 1 && targetname) {
|
||||
if (HasSpawnFlags(1) && targetname) {
|
||||
m_iEnabled = 0;
|
||||
} else {
|
||||
m_iEnabled = 1;
|
||||
|
@ -202,6 +202,8 @@ light::Respawn(void)
|
|||
m_iEnabled = 1;
|
||||
}
|
||||
break;
|
||||
default:
|
||||
m_iEnabled = 1;
|
||||
}
|
||||
|
||||
RestoreComplete();
|
||||
|
|
|
@ -157,7 +157,7 @@ logic_auto::Processing(void)
|
|||
if (serverkeyfloat("background") == 1)
|
||||
UseOutput(this, m_strOnBackgroundMap);
|
||||
|
||||
if (spawnflags & 1) {
|
||||
if (HasSpawnFlags(1)) {
|
||||
dprint(sprintf("^2logic_auto::^3think^7: %s triggerer removed self\n", target));
|
||||
remove(this);
|
||||
}
|
||||
|
|
|
@ -144,7 +144,7 @@ momentary_rot_button::OnPlayerUse(void)
|
|||
m_eUser = eActivator;
|
||||
|
||||
/* if we're not already rotating (or can only turn 1 way) */
|
||||
if (m_iTurnDir == 0 || (spawnflags & MRBFL_AUTORETURN))
|
||||
if (m_iTurnDir == 0 || HasSpawnFlags(MRBFL_AUTORETURN))
|
||||
iEndState = (MOMENTARY_ROTATING); /* always turning one way on auto-return */
|
||||
else
|
||||
iEndState = (MOMENTARY_RETURNING);
|
||||
|
@ -163,7 +163,7 @@ momentary_rot_button::OnPlayerUse(void)
|
|||
CBaseMomentary b = (CBaseMomentary)e;
|
||||
|
||||
/* door hack: any entity with the same name as ours will follow our states */
|
||||
if (b.spawnflags & MRBFL_DOORHACK)
|
||||
if (HasSpawnFlags(MRBFL_DOORHACK))
|
||||
b.SetMoveState(iEndState);
|
||||
}
|
||||
}
|
||||
|
@ -176,7 +176,7 @@ momentary_rot_button::OnPlayerUnUse(void)
|
|||
m_eUser = world;
|
||||
|
||||
/* instead of stopping, auto-return. */
|
||||
if (spawnflags & MRBFL_AUTORETURN)
|
||||
if (HasSpawnFlags(MRBFL_AUTORETURN))
|
||||
iEndState = (MOMENTARY_RETURNING);
|
||||
else
|
||||
iEndState = (MOMENTARY_IDLE);
|
||||
|
@ -193,7 +193,7 @@ momentary_rot_button::OnPlayerUnUse(void)
|
|||
CBaseMomentary b = (CBaseMomentary)e;
|
||||
|
||||
/* door hack: any entity with the same name as ours will follow our states */
|
||||
if (b.spawnflags & MRBFL_DOORHACK)
|
||||
if (b.HasSpawnFlags(MRBFL_DOORHACK))
|
||||
b.SetMoveState(iEndState);
|
||||
}
|
||||
}
|
||||
|
@ -201,9 +201,9 @@ momentary_rot_button::OnPlayerUnUse(void)
|
|||
void
|
||||
momentary_rot_button::SetMovementDirection(void)
|
||||
{
|
||||
if (spawnflags & MRBFL_XAXIS) {
|
||||
if (HasSpawnFlags(MRBFL_XAXIS)) {
|
||||
m_vecMoveDir = [0,0,1];
|
||||
} else if (spawnflags & MRBFL_YAXIS) {
|
||||
} else if (HasSpawnFlags(MRBFL_YAXIS)) {
|
||||
m_vecMoveDir = [1,0,0];
|
||||
} else {
|
||||
m_vecMoveDir = [0,1,0];
|
||||
|
@ -228,7 +228,7 @@ momentary_rot_button::Respawn(void)
|
|||
SetOrigin(GetSpawnOrigin());
|
||||
|
||||
/* purely visual, can't use this */
|
||||
if (!(spawnflags & MRBFL_NOTUSE)) {
|
||||
if (!HasSpawnFlags(MRBFL_NOTUSE)) {
|
||||
PlayerUse = OnPlayerUse;
|
||||
PlayerUseUnpressed = OnPlayerUnUse;
|
||||
}
|
||||
|
|
|
@ -43,7 +43,7 @@ monster_generic::Respawn(void)
|
|||
{
|
||||
NSTalkMonster::Respawn();
|
||||
|
||||
if (spawnflags & MGF_NONSOLID) {
|
||||
if (HasSpawnFlags(MGF_NONSOLID)) {
|
||||
takedamage = DAMAGE_NO;
|
||||
SetSolid(SOLID_NOT);
|
||||
iBleeds = FALSE;
|
||||
|
|
|
@ -190,7 +190,7 @@ monstermaker::Spawner(void)
|
|||
}
|
||||
|
||||
/* inherit the monsterclip flag */
|
||||
if (spawnflags & MMF_MONSTERCLIP) {
|
||||
if (HasSpawnFlags(MMF_MONSTERCLIP)) {
|
||||
unit.spawnflags |= MSF_MONSTERCLIP;
|
||||
}
|
||||
} else {
|
||||
|
@ -206,7 +206,7 @@ monstermaker::Spawner(void)
|
|||
}
|
||||
|
||||
/* sometimes all we do is just spawn a single monster at a time */
|
||||
if (spawnflags & MMF_NONTOGGLE) {
|
||||
if (HasSpawnFlags(MMF_NONTOGGLE)) {
|
||||
TurnOff();
|
||||
} else {
|
||||
nextthink = time + m_flDelay;
|
||||
|
@ -234,7 +234,7 @@ monstermaker::Trigger(entity act, int state)
|
|||
void
|
||||
monstermaker::Respawn(void)
|
||||
{
|
||||
if (spawnflags & MMF_STARTON) {
|
||||
if (HasSpawnFlags(MMF_STARTON)) {
|
||||
TurnOn();
|
||||
} else {
|
||||
TurnOff();
|
||||
|
|
|
@ -207,7 +207,7 @@ multi_manager::Trigger(entity act, int state)
|
|||
m_iValue = TRUE;
|
||||
|
||||
/* If not multi-threaded, we have to watch out 'til all triggers are done. */
|
||||
if (!(spawnflags & MM_MULTITHREADED)) {
|
||||
if (!HasSpawnFlags(MM_MULTITHREADED)) {
|
||||
for (int i = 0; i < 16; i++) {
|
||||
if (m_eTriggers[i].nextthink > time) {
|
||||
return;
|
||||
|
|
|
@ -97,7 +97,7 @@ path_corner::Trigger(entity act, int state)
|
|||
{
|
||||
entity a;
|
||||
|
||||
if ((spawnflags & PC_FIREONCE) && m_iFired) {
|
||||
if (HasSpawnFlags(PC_FIREONCE) && m_iFired) {
|
||||
return;
|
||||
}
|
||||
|
||||
|
|
|
@ -44,7 +44,7 @@ prop_dynamic::Respawn(void)
|
|||
super::Respawn();
|
||||
SetModel(GetSpawnModel());
|
||||
|
||||
if (spawnflags & PRPDYN_NONSOLID)
|
||||
if (HasSpawnFlags(PRPDYN_NONSOLID))
|
||||
SetSolid(SOLID_NOT);
|
||||
}
|
||||
|
||||
|
|
|
@ -37,7 +37,7 @@ prop_physics::Respawn(void)
|
|||
{
|
||||
NSPhysicsEntity::Respawn();
|
||||
|
||||
if (spawnflags & PRPPHYS_ASLEEP)
|
||||
if (HasSpawnFlags(PRPPHYS_ASLEEP))
|
||||
PhysicsDisable();
|
||||
else
|
||||
PhysicsEnable();
|
||||
|
@ -56,4 +56,4 @@ void
|
|||
prop_physics::prop_physics(void)
|
||||
{
|
||||
super::NSPhysicsEntity();
|
||||
}
|
||||
}
|
|
@ -167,7 +167,7 @@ scripted_sequence::RunOnEntity(entity targ)
|
|||
return;
|
||||
|
||||
/* aaaaand it's gone */
|
||||
if (!(spawnflags & SSFL_REPEATABLE))
|
||||
if (!HasSpawnFlags(SSFL_REPEATABLE))
|
||||
m_iEnabled = FALSE;
|
||||
|
||||
dprint(sprintf("\tName: %s\n", targetname));
|
||||
|
@ -243,7 +243,7 @@ scripted_sequence::RunOnEntity(entity targ)
|
|||
|
||||
f.m_iSequenceState = SEQUENCESTATE_ENDING;
|
||||
|
||||
if (spawnflags & SSFL_NOSCRIPTMOVE)
|
||||
if (HasSpawnFlags(SSFL_NOSCRIPTMOVE))
|
||||
f.think = NSMonster::FreeState;
|
||||
else
|
||||
f.think = NSMonster::FreeStateMoved;
|
||||
|
|
|
@ -137,7 +137,7 @@ speaker::Respawn(void)
|
|||
|
||||
think = Annouce;
|
||||
|
||||
if (!(spawnflags & SPEAKFL_SILENT))
|
||||
if (!HasSpawnFlags(SPEAKFL_SILENT))
|
||||
nextthink = time + 10.0f;
|
||||
}
|
||||
|
||||
|
|
|
@ -88,7 +88,7 @@ trigger_auto::Processing(void)
|
|||
|
||||
UseTargets(this, m_iTriggerState, m_flDelay);
|
||||
|
||||
if (spawnflags & 1) {
|
||||
if (HasSpawnFlags(1)) {
|
||||
dprint(sprintf("^2trigger_auto::^3think^7: %s triggerer removed self\n", target));
|
||||
remove(this);
|
||||
}
|
||||
|
|
|
@ -226,7 +226,7 @@ trigger_changelevel::Respawn(void)
|
|||
{
|
||||
InitBrushTrigger();
|
||||
|
||||
if (!(spawnflags & LC_USEONLY)) {
|
||||
if (!HasSpawnFlags(LC_USEONLY)) {
|
||||
touch = TouchTrigger;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -83,9 +83,9 @@ trigger_counter::touch(void)
|
|||
void
|
||||
trigger_counter::Trigger(entity act, int state)
|
||||
{
|
||||
if (act.classname == "func_pushable" && !(spawnflags & TRCNT_PUSHABLES))
|
||||
if (act.classname == "func_pushable" && !HasSpawnFlags(TRCNT_PUSHABLES))
|
||||
return;
|
||||
if (spawnflags & TRCNT_NOCLIENTS && act.spawnflags & FL_CLIENT)
|
||||
if (HasSpawnFlags(TRCNT_NOCLIENTS) && act.flags & FL_CLIENT)
|
||||
return;
|
||||
if (GetMaster() == FALSE)
|
||||
return;
|
||||
|
|
|
@ -153,9 +153,9 @@ trigger_hurt::touch(void)
|
|||
{
|
||||
if (other.takedamage == DAMAGE_NO) {
|
||||
return;
|
||||
} else if ((spawnflags & SF_HURT_TOUCHPLAYER) && !(other.flags & FL_CLIENT)) {
|
||||
} else if (HasSpawnFlags(SF_HURT_TOUCHPLAYER) && !(other.flags & FL_CLIENT)) {
|
||||
return;
|
||||
} else if ((spawnflags & SF_HURT_NOPLAYERS) && (other.flags & FL_CLIENT)) {
|
||||
} else if (HasSpawnFlags(SF_HURT_NOPLAYERS) && (other.flags & FL_CLIENT)) {
|
||||
return;
|
||||
} else if (other.hurt_next > time) {
|
||||
return;
|
||||
|
@ -167,7 +167,7 @@ trigger_hurt::touch(void)
|
|||
else
|
||||
UseOutput(other, m_strOnHurt);
|
||||
} else {
|
||||
if (spawnflags & SF_HURT_FIREONPLAYER) {
|
||||
if (HasSpawnFlags(SF_HURT_FIREONPLAYER)) {
|
||||
if (other.flags & FL_CLIENT) {
|
||||
eActivator = other;
|
||||
UseTargets(other, TRIG_TOGGLE, m_flDelay);
|
||||
|
@ -208,7 +208,7 @@ trigger_hurt::touch(void)
|
|||
other.netname, m_iDamage));
|
||||
|
||||
/* shut it down if used once */
|
||||
if (spawnflags & SF_HURT_ONCE) {
|
||||
if (HasSpawnFlags(SF_HURT_ONCE)) {
|
||||
Trigger(other, TRIG_OFF);
|
||||
}
|
||||
|
||||
|
@ -218,7 +218,7 @@ trigger_hurt::touch(void)
|
|||
void
|
||||
trigger_hurt::Respawn(void)
|
||||
{
|
||||
if (spawnflags & SF_HURT_OFF) {
|
||||
if (HasSpawnFlags(SF_HURT_OFF)) {
|
||||
Trigger(this, TRIG_OFF);
|
||||
} else {
|
||||
Trigger(this, TRIG_ON);
|
||||
|
|
|
@ -121,11 +121,11 @@ trigger_multiple::touch(void)
|
|||
{
|
||||
if (GetMaster() == FALSE)
|
||||
return;
|
||||
if (spawnflags & TM_NOCLIENTS && other.flags & FL_CLIENT)
|
||||
if (HasSpawnFlags(TM_NOCLIENTS) && other.flags & FL_CLIENT)
|
||||
return;
|
||||
if (!(spawnflags & TM_MONSTERS) && other.flags & FL_MONSTER)
|
||||
if (!HasSpawnFlags(TM_MONSTERS) && other.flags & FL_MONSTER)
|
||||
return;
|
||||
if (!(spawnflags & TM_PUSHABLES) && other.classname == "func_pushable")
|
||||
if (!HasSpawnFlags(TM_PUSHABLES) && other.classname == "func_pushable")
|
||||
return;
|
||||
|
||||
if (Rules_IsTeamPlay() == TRUE) {
|
||||
|
|
|
@ -82,11 +82,11 @@ trigger_once::touch(void)
|
|||
{
|
||||
if (GetMaster() == FALSE)
|
||||
return;
|
||||
if (spawnflags & TO_NOCLIENTS && other.flags & FL_CLIENT)
|
||||
if (HasSpawnFlags(TO_NOCLIENTS) && other.flags & FL_CLIENT)
|
||||
return;
|
||||
if (!(spawnflags & TO_MONSTERS) && other.flags & FL_MONSTER)
|
||||
if (!HasSpawnFlags(TO_MONSTERS) && other.flags & FL_MONSTER)
|
||||
return;
|
||||
if (!(spawnflags & TO_PUSHABLES) && other.classname == "func_pushable")
|
||||
if (!HasSpawnFlags(TO_PUSHABLES) && other.classname == "func_pushable")
|
||||
return;
|
||||
|
||||
SetSolid(SOLID_NOT); /* make inactive */
|
||||
|
|
|
@ -124,7 +124,7 @@ trigger_push::touch(void)
|
|||
vector vecPush;
|
||||
vecPush = (m_flSpeed * m_vecMoveDir);
|
||||
|
||||
if (spawnflags & TP_ONCE) {
|
||||
if (HasSpawnFlags(TP_ONCE)) {
|
||||
other.velocity += vecPush;
|
||||
if (other.velocity[2] > 0) {
|
||||
other.flags &= ~FL_ONGROUND;
|
||||
|
@ -145,7 +145,7 @@ trigger_push::Respawn(void)
|
|||
SetMovementDirection();
|
||||
ClearAngles();
|
||||
|
||||
if (spawnflags & TP_STARTOFF) {
|
||||
if (HasSpawnFlags(TP_STARTOFF)) {
|
||||
SetSolid(SOLID_NOT);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -77,7 +77,7 @@ trigger_relay::Trigger(entity act, int state)
|
|||
{
|
||||
if (m_iEnabled == FALSE)
|
||||
return;
|
||||
if (spawnflags & TRLY_ONCE)
|
||||
if (HasSpawnFlags(TRLY_ONCE))
|
||||
m_iEnabled = FALSE;
|
||||
|
||||
UseTargets(act, m_iTriggerState, m_flDelay);
|
||||
|
|
|
@ -45,9 +45,9 @@ trigger_teleport::touch(void)
|
|||
{
|
||||
if (GetMaster() == FALSE)
|
||||
return;
|
||||
if (spawnflags & TRIGTELE_NOCLIENTS && other.flags & FL_CLIENT)
|
||||
if (HasSpawnFlags(TRIGTELE_NOCLIENTS) && other.flags & FL_CLIENT)
|
||||
return;
|
||||
if (!(spawnflags & TRIGTELE_MONSTERS) && other.flags & FL_MONSTER)
|
||||
if (!HasSpawnFlags(TRIGTELE_MONSTERS) && other.flags & FL_MONSTER)
|
||||
return;
|
||||
|
||||
if (other.movetype != MOVETYPE_NONE) {
|
||||
|
|
|
@ -68,6 +68,7 @@ class NSEntity:NSTrigger
|
|||
virtual void(void) EvaluateEntity;
|
||||
virtual float(entity, float) SendEntity;
|
||||
|
||||
nonvirtual entity(void) GetParent;
|
||||
nonvirtual void(string) SetParent;
|
||||
nonvirtual void(string) SetParentAttachment;
|
||||
nonvirtual void(void) ClearParent;
|
||||
|
@ -97,4 +98,21 @@ class NSEntity:NSTrigger
|
|||
virtual void(string, string) SpawnKey;
|
||||
nonvirtual void(void) Destroy;
|
||||
virtual void(void) UpdateBounds;
|
||||
|
||||
/* useful methods, based on GMod's API */
|
||||
nonvirtual float(void) EntIndex;
|
||||
nonvirtual void(void) DropToFloor;
|
||||
nonvirtual vector(void) GetForward;
|
||||
nonvirtual vector(void) GetRight;
|
||||
nonvirtual vector(void) GetUp;
|
||||
nonvirtual vector(void) WorldSpaceCenter;
|
||||
nonvirtual float(void) WaterLevel;
|
||||
nonvirtual bool(entity) Visible;
|
||||
nonvirtual bool(vector) VisibleVec;
|
||||
nonvirtual entity(void) GetOwner;
|
||||
nonvirtual bool(float) HasSpawnFlags;
|
||||
nonvirtual bool(void) IsOnGround;
|
||||
nonvirtual entity(void) GetGroundEntity;
|
||||
virtual void(entity) Blocked;
|
||||
nonvirtual void(void) _BlockedHandler;
|
||||
};
|
||||
|
|
|
@ -14,6 +14,170 @@
|
|||
* OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
||||
*/
|
||||
|
||||
float
|
||||
NSEntity::EntIndex(void)
|
||||
{
|
||||
return num_for_edict(this);
|
||||
}
|
||||
|
||||
void
|
||||
droptofloorwrapper(entity foo)
|
||||
{
|
||||
entity old_self = self;
|
||||
self = foo;
|
||||
droptofloor();
|
||||
self = old_self;
|
||||
}
|
||||
|
||||
void
|
||||
NSEntity::DropToFloor(void)
|
||||
{
|
||||
droptofloorwrapper(this);
|
||||
}
|
||||
|
||||
vector
|
||||
NSEntity::GetForward(void)
|
||||
{
|
||||
makevectors(angles);
|
||||
return v_forward;
|
||||
}
|
||||
|
||||
vector
|
||||
NSEntity::GetRight(void)
|
||||
{
|
||||
makevectors(angles);
|
||||
return v_right;
|
||||
}
|
||||
|
||||
vector
|
||||
NSEntity::GetUp(void)
|
||||
{
|
||||
makevectors(angles);
|
||||
return v_up;
|
||||
}
|
||||
|
||||
/*
|
||||
============
|
||||
NSEntity::WorldSpaceCenter
|
||||
|
||||
Returns the center of an entity's bounding boxes.
|
||||
Useful on brush entities that have no real 'origin' defined.
|
||||
============
|
||||
*/
|
||||
vector
|
||||
NSEntity::WorldSpaceCenter(void)
|
||||
{
|
||||
return absmin + (0.5 * (absmax - absmin));
|
||||
}
|
||||
|
||||
/*
|
||||
============
|
||||
NSEntity::VisibleVec
|
||||
|
||||
Returns whether or not the entity is able to see a given position
|
||||
============
|
||||
*/
|
||||
float
|
||||
NSEntity::WaterLevel(void)
|
||||
{
|
||||
return waterlevel;
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
============
|
||||
NSEntity::VisibleVec
|
||||
|
||||
Returns whether or not the entity is able to see a given position
|
||||
============
|
||||
*/
|
||||
bool
|
||||
NSEntity::VisibleVec(vector org)
|
||||
{
|
||||
vector flDelta;
|
||||
float flFoV;
|
||||
|
||||
makevectors(angles);
|
||||
flDelta = normalize (org - origin);
|
||||
flFoV = flDelta * v_forward;
|
||||
|
||||
if (flFoV > 0.3) {
|
||||
traceline(origin, org, TRUE, this);
|
||||
if (trace_fraction == 1.0) {
|
||||
return (TRUE);
|
||||
}
|
||||
}
|
||||
return (FALSE);
|
||||
}
|
||||
|
||||
/*
|
||||
============
|
||||
NSEntity::Visible
|
||||
|
||||
Returns whether or not the entity is able to see a given entity
|
||||
============
|
||||
*/
|
||||
bool
|
||||
NSEntity::Visible(entity ent)
|
||||
{
|
||||
vector flDelta;
|
||||
float flFoV;
|
||||
|
||||
makevectors(angles);
|
||||
flDelta = normalize (ent.origin - origin);
|
||||
flFoV = flDelta * v_forward;
|
||||
|
||||
if (flFoV > 0.3) {
|
||||
traceline(origin, ent.origin, MOVE_NORMAL, this);
|
||||
if (trace_fraction == 1.0) {
|
||||
return (true);
|
||||
}
|
||||
}
|
||||
return (false);
|
||||
}
|
||||
|
||||
entity
|
||||
NSEntity::GetOwner(void)
|
||||
{
|
||||
return owner;
|
||||
}
|
||||
|
||||
bool
|
||||
NSEntity::HasSpawnFlags(float sf)
|
||||
{
|
||||
return (spawnflags & sf) ? true : false;
|
||||
}
|
||||
|
||||
bool
|
||||
NSEntity::IsOnGround(void)
|
||||
{
|
||||
return (flags & FL_ONGROUND) ? true : false;
|
||||
}
|
||||
|
||||
bool
|
||||
NSEntity::IsSolid(void)
|
||||
{
|
||||
return (solid != SOLID_NOT) ? true : false;
|
||||
}
|
||||
|
||||
entity
|
||||
NSEntity::GetGroundEntity(void)
|
||||
{
|
||||
return groundentity;
|
||||
}
|
||||
|
||||
void
|
||||
NSEntity::Blocked(entity eBlocker)
|
||||
{
|
||||
/* To be handled by sub-classes */
|
||||
}
|
||||
|
||||
void
|
||||
NSEntity::_BlockedHandler(void)
|
||||
{
|
||||
Blocked(other);
|
||||
}
|
||||
|
||||
#ifdef CLIENT
|
||||
/*
|
||||
============
|
||||
|
@ -279,6 +443,11 @@ NSEntity::ParentUpdate(void)
|
|||
}
|
||||
}
|
||||
}
|
||||
entity
|
||||
NSEntity::GetParent(void)
|
||||
{
|
||||
return find(world, ::targetname, m_parent);
|
||||
}
|
||||
void
|
||||
NSEntity::SetParent(string name)
|
||||
{
|
||||
|
@ -701,6 +870,7 @@ NSEntity::NSEntity(void)
|
|||
m_oldOrigin = origin;
|
||||
m_oldSolid = solid;
|
||||
m_oldModel = Util_FixModel(model);
|
||||
blocked = _BlockedHandler;
|
||||
|
||||
/* Input/Output system */
|
||||
m_strOnTrigger = CreateOutput(m_strOnTrigger);
|
||||
|
|
|
@ -194,7 +194,7 @@ NSMonster::SeeThink(void)
|
|||
continue;
|
||||
|
||||
/* some monsters will ignore players */
|
||||
if ((w.flags & FL_CLIENT) && (spawnflags & MSF_IGNOREPLAYER))
|
||||
if ((w.flags & FL_CLIENT) && HasSpawnFlags(MSF_IGNOREPLAYER))
|
||||
continue;
|
||||
|
||||
/* first, is the potential enemy in our field of view? */
|
||||
|
@ -967,7 +967,7 @@ void
|
|||
NSMonster::NSMonster(void)
|
||||
{
|
||||
#ifdef SERVER
|
||||
if (!(spawnflags & MSF_MULTIPLAYER))
|
||||
if (!HasSpawnFlags(MSF_MULTIPLAYER))
|
||||
if (g_grMode.MonstersSpawn() == FALSE) {
|
||||
remove(this);
|
||||
return;
|
||||
|
|
|
@ -52,6 +52,10 @@ class NSSurfacePropEntity:NSRenderableEntity
|
|||
virtual void(void) Pain;
|
||||
virtual void(void) Death;
|
||||
|
||||
/* Generic Damage */
|
||||
virtual void(float) SetTakedamage;
|
||||
virtual void(float) SetHealth;
|
||||
|
||||
/* Surface/PropKit */
|
||||
int m_iMaterial;
|
||||
int m_iPropData;
|
||||
|
|
|
@ -15,6 +15,18 @@
|
|||
*/
|
||||
|
||||
#ifdef SERVER
|
||||
void
|
||||
NSSurfacePropEntity::SetTakedamage(float type)
|
||||
{
|
||||
takedamage = type;
|
||||
}
|
||||
|
||||
void
|
||||
NSSurfacePropEntity::SetHealth(float new_health)
|
||||
{
|
||||
health = new_health;
|
||||
}
|
||||
|
||||
float
|
||||
NSSurfacePropEntity::GetSpawnHealth(void)
|
||||
{
|
||||
|
|
|
@ -203,7 +203,7 @@ NSTalkMonster::TalkPlayerIdle(void)
|
|||
{
|
||||
if (m_iSequenceState != SEQUENCESTATE_NONE)
|
||||
return;
|
||||
if (spawnflags & MSF_PREDISASTER)
|
||||
if (HasSpawnFlags(MSF_PREDISASTER))
|
||||
return;
|
||||
if (m_flNextSentence > time)
|
||||
return;
|
||||
|
@ -228,7 +228,7 @@ NSTalkMonster::TalkPlayerAsk(void)
|
|||
{
|
||||
if (m_iSequenceState != SEQUENCESTATE_NONE)
|
||||
return;
|
||||
if (spawnflags & MSF_PREDISASTER)
|
||||
if (HasSpawnFlags(MSF_PREDISASTER))
|
||||
return;
|
||||
if (m_flNextSentence > time)
|
||||
return;
|
||||
|
|
|
@ -316,7 +316,7 @@ env_projectedtexture::Respawn(void)
|
|||
SetOrigin(GetSpawnOrigin());
|
||||
SetAngles(GetSpawnAngles());
|
||||
|
||||
m_iState = (spawnflags & 1) ? 1 : 0;
|
||||
m_iState = HasSpawnFlags(1) ? 1 : 0;
|
||||
}
|
||||
#endif
|
||||
|
||||
|
|
|
@ -239,7 +239,7 @@ info_particle_system::Respawn(void)
|
|||
SetOrigin(GetSpawnOrigin());
|
||||
SetAngles(GetSpawnAngles());
|
||||
|
||||
if (spawnflags & PSFL_STARTACTIVE) {
|
||||
if (HasSpawnFlags(PSFL_STARTACTIVE)) {
|
||||
Trigger(this, TRIG_ON);
|
||||
} else {
|
||||
Trigger(this, TRIG_OFF);
|
||||
|
|
|
@ -183,7 +183,7 @@ prop_rope::predraw(void)
|
|||
}
|
||||
|
||||
/* only drawing one segment. */
|
||||
if (spawnflags & 1) {
|
||||
if (HasSpawnFlags(1)) {
|
||||
return (PREDRAW_NEXT);
|
||||
}
|
||||
|
||||
|
|
|
@ -206,7 +206,7 @@ trigger_camera::NextPath(void)
|
|||
velocity = [0,0,0];
|
||||
|
||||
/* warp next frame */
|
||||
if (eNode.spawnflags & PC_TELEPORT) {
|
||||
if (eNode.HasSpawnFlags(PC_TELEPORT)) {
|
||||
print(sprintf("^1trigger_camera::^3NextPath^7: Node %s wants %s to teleport\n", eNode.targetname, targetname));
|
||||
think = NextPath;
|
||||
nextthink = ltime;
|
||||
|
@ -214,7 +214,7 @@ trigger_camera::NextPath(void)
|
|||
}
|
||||
|
||||
/* stop until triggered again */
|
||||
if (eNode.spawnflags & PC_WAIT) {
|
||||
if (eNode.HasSpawnFlags(PC_WAIT)) {
|
||||
return;
|
||||
}
|
||||
|
||||
|
|
|
@ -3763,3 +3763,11 @@ accessor filestream : float
|
|||
#undef FTEDEP
|
||||
#undef DEP
|
||||
#pragma noref 0
|
||||
|
||||
typedef enum
|
||||
{
|
||||
true = 1,
|
||||
false = 0,
|
||||
TRUE = 1,
|
||||
FALSE = 0
|
||||
} bool;
|
||||
|
|
Loading…
Reference in a new issue