Minor cleanup of SendFlags assignments, fix for 'sv respawn_ents' affecting players.

This commit is contained in:
Marco Cawthorne 2021-09-01 22:11:30 +02:00
parent f0957141cc
commit fd05c2419c
Signed by: eukara
GPG Key ID: C196CD8BA993248A
16 changed files with 110 additions and 121 deletions

View File

@ -129,7 +129,7 @@ ambient_generic::UseLoop(entity act, int state)
}
m_iToggleSwitch = 1 - m_iToggleSwitch;
SendFlags |= AG_SAMPLE;
SetSendFlags(AG_SAMPLE);
}
void
@ -153,7 +153,7 @@ ambient_generic::Respawn(void)
}
Trigger = UseLoop;
SendFlags |= AG_SAMPLE;
SetSendFlags(AG_SAMPLE);
}
}

View File

@ -36,7 +36,7 @@ void
CBaseMonster::AnimPlay(float seq)
{
/* forces a client-side update */
SendFlags |= BASEFL_CHANGED_FRAME;
SetSendFlags(BASEFL_CHANGED_FRAME);
SetFrame(seq);
m_flAnimTime = time + frameduration(modelindex, frame);

View File

@ -67,7 +67,7 @@ class env_laser:CBaseTrigger
virtual void(void) think;
virtual void(entity, int) Trigger;
virtual void(void) Respawn;
virtual void(void) ParentUpdate;
virtual void(void) EvaluateEntity;
virtual float(entity, float) SendEntity;
virtual void(string, string) SpawnKey;
};
@ -162,31 +162,21 @@ env_laser::SendEntity(entity ePEnt, float fChanged)
}
void
env_laser::ParentUpdate(void)
env_laser::EvaluateEntity(void)
{
/* FIXME: Check our fields for networking */
if (origin != net_origin) {
SendFlags |= ENVLASER_CHANGED_ORIGIN;
SetSendFlags(ENVLASER_CHANGED_ORIGIN);
net_origin = origin;
}
if (angles != net_angles) {
SendFlags |= ENVLASER_CHANGED_ANGLES;
SetSendFlags(ENVLASER_CHANGED_ANGLES);
net_angles = angles;
}
if (m_iState != m_iStateOld) {
SendFlags |= ENVLASER_CHANGED_STATE;
SetSendFlags(ENVLASER_CHANGED_STATE);
m_iStateOld = m_iState;
}
if (m_parent) {
entity p = find(world, ::targetname, m_parent);
if (!p) {
return;
}
SetOrigin(p.origin);
}
}
void

View File

@ -87,7 +87,7 @@ prop_door_rotating::Interact(void)
m_iValue = 1 - m_iValue;
frame = 1;
frame1time = 0.0f;
SendFlags |= BASEFL_CHANGED_FRAME;
SetSendFlags(BASEFL_CHANGED_FRAME);
if (m_iValue)
think = TurnAway;

View File

@ -79,6 +79,7 @@ class CBaseEntity
#endif
/* we only provide these for networked keys, so we can send updates */
virtual void(float) SetSendFlags;
virtual void(float) SetEffects;
virtual void(float) SetFrame;
virtual void(string) SetModel;

View File

@ -388,11 +388,6 @@ CBaseEntity::Initialized(void)
{
}
void
CBaseEntity::CBaseEntity(void)
{
}
/* our EV_SENTENCE event */
void
CBaseEntity_ParseSentence(void)
@ -688,7 +683,7 @@ CBaseEntity::EvaluateEntity(void)
* predict when origin/angle might change */
if (net_origin != origin) {
net_origin = origin;
SendFlags |= BASEFL_CHANGED_ORIGIN;
SetSendFlags(BASEFL_CHANGED_ORIGIN);
}
if (net_angles != angles) {
angles[0] = Math_FixDelta(angles[0]);
@ -696,11 +691,11 @@ CBaseEntity::EvaluateEntity(void)
angles[2] = Math_FixDelta(angles[2]);
net_angles = angles;
SendFlags |= BASEFL_CHANGED_ANGLES;
SetSendFlags(BASEFL_CHANGED_ANGLES);
}
if (net_velocity != velocity) {
net_velocity = velocity;
SendFlags |= BASEFL_CHANGED_VELOCITY;
SetSendFlags(BASEFL_CHANGED_VELOCITY);
}
}
@ -759,10 +754,19 @@ CBaseEntity::Hide(void)
SetMovetype(MOVETYPE_NONE);
takedamage = DAMAGE_NO;
}
#endif
/*
============
CBaseEntity::CBaseEntity
client doesn't have to do a whole lot here
============
*/
void
CBaseEntity::CBaseEntity(void)
{
#ifdef SERVER
/* Not in Deathmatch */
if (spawnflags & 2048) {
if (cvar("sv_playerslots") > 1) {
@ -771,7 +775,9 @@ CBaseEntity::CBaseEntity(void)
}
}
identity = 1;
identity = 1; /* .identity is a global ent field we abuse to let find() calls
reliably know that those are CBaseEntity class-based */
effects |= EF_NOSHADOW;
scale = 1.0f;
@ -804,8 +810,8 @@ CBaseEntity::CBaseEntity(void)
if (m_oldModel != "") {
precache_model(m_oldModel);
}
}
#endif
}
/* we want to really use those set functions because they'll notify of any
* networking related changes. otherwise we'll have to keep track of copies
@ -965,6 +971,15 @@ CBaseEntity::SetRenderColor(vector newColor)
}
#endif
/*
============
CBaseEntity::SpawnKey
note that the engine still likes to try and map key/value
pairs on its own, but we can at least undo some of that in
here if needed
============
*/
void
CBaseEntity::SpawnKey(string strKey, string strValue)
{

View File

@ -1,6 +1,4 @@
.int m_iVehNum;
class CBaseVehicle:CBaseTrigger
{
int m_iVehicleFlags;

View File

@ -107,7 +107,7 @@ CBaseVehicle::EvaluateEntity(void)
* predict when origin/angle might change */
if (net_origin != origin) {
net_origin = origin;
SendFlags |= VEHFL_CHANGED_ORIGIN;
SetSendFlags(VEHFL_CHANGED_ORIGIN);
}
if (net_angles != angles) {
angles[0] = Math_FixDelta(angles[0]);
@ -115,11 +115,11 @@ CBaseVehicle::EvaluateEntity(void)
angles[2] = Math_FixDelta(angles[2]);
net_angles = angles;
SendFlags |= VEHFL_CHANGED_ANGLES;
SetSendFlags(VEHFL_CHANGED_ANGLES);
}
if (net_velocity != velocity) {
net_velocity = velocity;
SendFlags |= VEHFL_CHANGED_VELOCITY;
SetSendFlags(VEHFL_CHANGED_VELOCITY);
}
}
@ -227,7 +227,7 @@ CBaseVehicle::PlayerEnter(base_player pl)
pl.flags |= FL_INVEHICLE;
#ifdef SERVER
SendFlags |= VEHFL_CHANGED_DRIVER;
SetSendFlags(VEHFL_CHANGED_DRIVER);
#endif
}
@ -247,7 +247,7 @@ CBaseVehicle::PlayerLeave(base_player pl)
m_eDriver = __NULL__;
#ifdef SERVER
SendFlags |= VEHFL_CHANGED_DRIVER;
SetSendFlags(VEHFL_CHANGED_DRIVER);
#endif
}

View File

@ -249,27 +249,27 @@ env_projectedtexture::Input(entity eAct, string strInput, string strData)
switch (strInput) {
case "LightColor":
m_vecLight = stov(strData);
SendFlags |= PRTEXFL_CHANGED_LIGHT;
SetSendFlags(PRTEXFL_CHANGED_LIGHT);
break;
case "SetNearZ":
m_flNearZ = stof(strData);
SendFlags |= PRTEXFL_CHANGED_NEARZ;
SetSendFlags(PRTEXFL_CHANGED_NEARZ);
break;
case "SetFarZ":
m_flFarZ = stof(strData);
SendFlags |= PRTEXFL_CHANGED_FARZ;
SetSendFlags(PRTEXFL_CHANGED_FARZ);
break;
case "SetLightStyle":
m_flStyle = stof(strData);
SendFlags |= PRTEXFL_CHANGED_STYLE;
SetSendFlags(PRTEXFL_CHANGED_STYLE);
break;
case "SpotlightTexture":
m_strTextureName = strData;
SendFlags |= PRTEXFL_CHANGED_TEXTURE;
SetSendFlags(PRTEXFL_CHANGED_TEXTURE);
break;
case "SetPattern":
m_strPattern = strData;
SendFlags |= PRTEXFL_CHANGED_PATTERN;
SetSendFlags(PRTEXFL_CHANGED_PATTERN);
break;
case "TurnOn":
Trigger(eAct, TRIG_ON);

View File

@ -97,7 +97,7 @@ class func_monitor:CBaseTrigger
virtual void(float) ReceiveEntity;
#else
virtual void(void) Respawn;
virtual void(void) ParentUpdate;
virtual void(void) EvaluateEntity;
virtual float(entity, float) SendEntity;
virtual void(string, string) SpawnKey;
virtual void(entity, int) Trigger;
@ -221,18 +221,11 @@ func_monitor::SendEntity(entity ePEnt, float flFlags)
}
void
func_monitor::ParentUpdate(void)
func_monitor::EvaluateEntity(void)
{
if (net_origin != origin) {
net_origin = origin;
SendFlags |= MONITORFL_CHANGED_BASE;
}
if (m_parent) {
entity p = find(world, ::targetname, m_parent);
if (p)
SetOrigin(p.origin);
SetSendFlags(MONITORFL_CHANGED_BASE);
}
/* this monitor is disabled */
@ -251,35 +244,35 @@ func_monitor::ParentUpdate(void)
if (m_vecCamOrigin != viewer.origin) {
m_vecCamOrigin = viewer.origin;
SendFlags |= MONITORFL_CHANGED_ORIGIN;
SetSendFlags(MONITORFL_CHANGED_ORIGIN);
}
if (m_vecCamAngles != viewer.angles) {
m_vecCamAngles = viewer.angles;
SendFlags |= MONITORFL_CHANGED_ANGLES;
SetSendFlags(MONITORFL_CHANGED_ANGLES);
}
if (m_flFOV != viewer.m_flFOV) {
m_flFOV = viewer.m_flFOV;
SendFlags |= MONITORFL_CHANGED_FOV;
SetSendFlags(MONITORFL_CHANGED_FOV);
}
if (m_iUseSAR != viewer.m_iUseSAR) {
m_iUseSAR = viewer.m_iUseSAR;
SendFlags |= MONITORFL_CHANGED_ASPECT;
SetSendFlags(MONITORFL_CHANGED_ASPECT);
}
if (m_vecFogColor != viewer.m_vecFogColor) {
m_vecFogColor = viewer.m_vecFogColor;
SendFlags |= MONITORFL_CHANGED_FOGCOLOR;
SetSendFlags(MONITORFL_CHANGED_FOGCOLOR);
}
if (m_flFogStart != viewer.m_flFogStart) {
m_flFogStart = viewer.m_flFogStart;
SendFlags |= MONITORFL_CHANGED_FOGSTART;
SetSendFlags(MONITORFL_CHANGED_FOGSTART);
}
if (m_flFogEnd != viewer.m_flFogEnd) {
m_flFogEnd = viewer.m_flFogEnd;
SendFlags |= MONITORFL_CHANGED_FOGEND;
SetSendFlags(MONITORFL_CHANGED_FOGEND);
}
if (m_flFogEnd != viewer.m_flFogEnd) {
m_flFogEnd = viewer.m_flFogEnd;
SendFlags |= MONITORFL_CHANGED_STATUS;
SetSendFlags(MONITORFL_CHANGED_STATUS);
}
}
@ -297,7 +290,7 @@ func_monitor::Trigger(entity act, int state)
m_iValue = 1 - m_iValue;
}
SendFlags |= MONITORFL_CHANGED_STATUS;
SetSendFlags(MONITORFL_CHANGED_STATUS);
}
void

View File

@ -65,7 +65,7 @@ class info_particle_system:CBaseTrigger
virtual void(float) ReceiveEntity;
#else
virtual void(void) Respawn;
virtual void(void) ParentUpdate;
virtual void(void) EvaluateEntity;
virtual float(entity, float) SendEntity;
virtual void(string, string) SpawnKey;
virtual void(entity, int) Trigger;
@ -161,23 +161,16 @@ info_particle_system::SendEntity(entity ePEnt, float flFlags)
}
void
info_particle_system::ParentUpdate(void)
info_particle_system::EvaluateEntity(void)
{
if (net_origin != origin) {
net_origin = origin;
SendFlags |= PARTSYSFL_CHANGED_ORIGIN;
SetSendFlags(PARTSYSFL_CHANGED_ORIGIN);
}
if (net_angles != angles) {
net_angles = angles;
SendFlags |= PARTSYSFL_CHANGED_ANGLES;
}
if (m_parent) {
entity p = find(world, ::targetname, m_parent);
if (p)
SetOrigin(p.origin);
SetSendFlags(PARTSYSFL_CHANGED_ANGLES);
}
}

View File

@ -94,7 +94,7 @@ class light_dynamic:CBaseTrigger
virtual void(void) Respawn;
virtual float(entity, float) SendEntity;
virtual void(entity, string, string) Input;
virtual void(void) ParentUpdate;
virtual void(void) EvaluateEntity;
#endif
};
@ -182,22 +182,15 @@ light_dynamic::Initialized(void)
}
#else
void
light_dynamic::ParentUpdate(void)
light_dynamic::EvaluateEntity(void)
{
if (net_origin != origin) {
net_origin = origin;
SendFlags |= DLIGHTFL_CHANGED_ORIGIN;
SetSendFlags(DLIGHTFL_CHANGED_ORIGIN);
}
if (net_angles != angles) {
net_angles = angles;
SendFlags |= DLIGHTFL_CHANGED_ANGLES;
}
if (m_parent) {
entity p = find(world, ::targetname, m_parent);
if (p)
SetOrigin(p.origin);
SetSendFlags(DLIGHTFL_CHANGED_ANGLES);
}
}

View File

@ -66,7 +66,7 @@ class trigger_camera:CBaseTrigger
virtual void(void) Respawn;
virtual void(string, string) SpawnKey;
virtual float(entity, float) SendEntity;
virtual void(void) ParentUpdate;
virtual void(void) EvaluateEntity;
#endif
};
@ -139,7 +139,7 @@ trigger_camera::SendEntity(entity ePEnt, float flFlags)
}
void
trigger_camera::ParentUpdate(void)
trigger_camera::EvaluateEntity(void)
{
entity t = find(world, ::targetname, m_strAimAt);
if (t) {
@ -148,19 +148,11 @@ trigger_camera::ParentUpdate(void)
if (net_origin != origin) {
net_origin = origin;
SendFlags |= OCAMFL_CHANGED_ORIGIN;
SetSendFlags(OCAMFL_CHANGED_ORIGIN);
}
if (net_angles != angles) {
net_angles = angles;
SendFlags |= OCAMFL_CHANGED_ANGLES;
}
/* camera don't support parenting when we're following paths! */
if (m_parent && !m_strMoveTo) {
entity p = find(world, ::targetname, m_parent);
if (p)
SetOrigin(p.origin);
SetSendFlags(OCAMFL_CHANGED_ANGLES);
}
}
@ -250,7 +242,7 @@ trigger_camera::Trigger(entity act, int state)
target = m_strMoveTo;
NextPath();
GoToTarget();
SendFlags |= OCAMFL_CHANGED_ORIGIN | OCAMFL_CHANGED_ANGLES | OCAMFL_CHANGED_WAIT;
SetSendFlags(OCAMFL_CHANGED_ORIGIN | OCAMFL_CHANGED_ANGLES | OCAMFL_CHANGED_WAIT);
}
void

View File

@ -105,6 +105,7 @@ base_player
float underwater_dmg;
float pain_time;
virtual void(void) Respawn;
virtual void(void) EvaluateEntity;
virtual float(entity, float) SendEntity;
#endif

View File

@ -174,6 +174,19 @@ base_player::PredictPostFrame(void)
ROLL_BACK(vehicle);
}
#else
/*
=================
base_player::Respawn
it'd be pretty unfortunate if 'sv respawn_ents' or something called this
=================
*/
void
base_player::Respawn(void)
{
/* make sure nothing happens here */
}
/*
=================
base_player::EvaluateEntity
@ -186,64 +199,64 @@ at the top of player::EvaluateEntity
void
base_player::EvaluateEntity(void)
{
SendFlags |= PLAYER_KEEPALIVE;
SetSendFlags(PLAYER_KEEPALIVE);
if (ATTR_CHANGED(modelindex))
SendFlags |= PLAYER_MODELINDEX;
SetSendFlags(PLAYER_MODELINDEX);
if (VEC_CHANGED(origin, 0))
SendFlags |= PLAYER_ORIGIN;
SetSendFlags(PLAYER_ORIGIN);
if (VEC_CHANGED(origin, 1))
SendFlags |= PLAYER_ORIGIN;
SetSendFlags(PLAYER_ORIGIN);
if (VEC_CHANGED(origin, 2))
SendFlags |= PLAYER_ORIGIN_Z;
SetSendFlags(PLAYER_ORIGIN_Z);
if (VEC_CHANGED(v_angle, 0))
SendFlags |= PLAYER_ANGLES_X;
SetSendFlags(PLAYER_ANGLES_X);
if (VEC_CHANGED(angles, 1))
SendFlags |= PLAYER_ANGLES_Y;
SetSendFlags(PLAYER_ANGLES_Y);
if (ATTR_CHANGED(colormap))
SendFlags |= PLAYER_COLORMAP;
SetSendFlags(PLAYER_COLORMAP);
if (VEC_CHANGED(velocity, 0))
SendFlags |= PLAYER_VELOCITY;
SetSendFlags(PLAYER_VELOCITY);
if (VEC_CHANGED(velocity, 1))
SendFlags |= PLAYER_VELOCITY;
SetSendFlags(PLAYER_VELOCITY);
if (VEC_CHANGED(velocity, 2))
SendFlags |= PLAYER_VELOCITY_Z;
SetSendFlags(PLAYER_VELOCITY_Z);
if (ATTR_CHANGED(flags))
SendFlags |= PLAYER_FLAGS;
SetSendFlags(PLAYER_FLAGS);
if (ATTR_CHANGED(gflags))
SendFlags |= PLAYER_FLAGS;
SetSendFlags(PLAYER_FLAGS);
if (ATTR_CHANGED(pmove_flags))
SendFlags |= PLAYER_FLAGS;
SetSendFlags(PLAYER_FLAGS);
if (ATTR_CHANGED(activeweapon))
SendFlags |= PLAYER_WEAPON;
SetSendFlags(PLAYER_WEAPON);
if (ATTR_CHANGED(g_items))
SendFlags |= PLAYER_ITEMS;
SetSendFlags(PLAYER_ITEMS);
if (ATTR_CHANGED(health))
SendFlags |= PLAYER_HEALTH;
SetSendFlags(PLAYER_HEALTH);
if (ATTR_CHANGED(armor))
SendFlags |= PLAYER_ARMOR;
SetSendFlags(PLAYER_ARMOR);
if (ATTR_CHANGED(movetype))
SendFlags |= PLAYER_MOVETYPE;
SetSendFlags(PLAYER_MOVETYPE);
if (ATTR_CHANGED(view_ofs))
SendFlags |= PLAYER_VIEWOFS;
SetSendFlags(PLAYER_VIEWOFS);
SAVE_STATE(modelindex);
SAVE_STATE(origin);

View File

@ -339,19 +339,19 @@ spectator::PostFrame(void)
/* check for which values have changed in this frame
and announce to network said changes */
if (origin != origin_net)
SendFlags |= SPECFL_ORIGIN;
SetSendFlags(SPECFL_ORIGIN);
if (velocity != velocity_net)
SendFlags |= SPECFL_VELOCITY;
SetSendFlags(SPECFL_VELOCITY);
if (spec_ent != spec_ent_net)
SendFlags |= SPECFL_TARGET;
SetSendFlags(SPECFL_TARGET);
if (spec_mode != spec_mode_net)
SendFlags |= SPECFL_MODE;
SetSendFlags(SPECFL_MODE);
if (spec_flags != spec_flags_net)
SendFlags |= SPECFL_FLAGS;
SetSendFlags(SPECFL_FLAGS);
origin_net = origin;
velocity_net = velocity;