Remove SendFlags with constants from NSEntity and peers, make full use
of EvaluateEntity() to decide which attributes to send network updates of.
This commit is contained in:
parent
af04bc5e4c
commit
8cb4c35e23
15 changed files with 222 additions and 109 deletions
|
@ -165,18 +165,19 @@ void
|
|||
env_laser::EvaluateEntity(void)
|
||||
{
|
||||
/* FIXME: Check our fields for networking */
|
||||
if (origin != net_origin) {
|
||||
if (ATTR_CHANGED(angles)) {
|
||||
SetSendFlags(ENVLASER_CHANGED_ORIGIN);
|
||||
net_origin = origin;
|
||||
}
|
||||
if (angles != net_angles) {
|
||||
if (ATTR_CHANGED(origin)) {
|
||||
SetSendFlags(ENVLASER_CHANGED_ANGLES);
|
||||
net_angles = angles;
|
||||
}
|
||||
if (m_iState != m_iStateOld) {
|
||||
SetSendFlags(ENVLASER_CHANGED_STATE);
|
||||
m_iStateOld = m_iState;
|
||||
}
|
||||
|
||||
SAVE_STATE(origin);
|
||||
SAVE_STATE(angles);
|
||||
}
|
||||
|
||||
void
|
||||
|
|
|
@ -26,6 +26,17 @@ class NSEntity:NSTrigger
|
|||
vector m_vecMins;
|
||||
vector m_vecMaxs;
|
||||
|
||||
/* keep track of these variables */
|
||||
PREDICTED_VECTOR_N(origin);
|
||||
PREDICTED_VECTOR_N(angles);
|
||||
PREDICTED_FLOAT_N(modelindex);
|
||||
PREDICTED_VECTOR_N(size);
|
||||
PREDICTED_FLOAT_N(solid);
|
||||
PREDICTED_FLOAT_N(movetype);
|
||||
PREDICTED_FLOAT_N(scale);
|
||||
PREDICTED_FLOAT_N(flags);
|
||||
PREDICTED_VECTOR_N(velocity);
|
||||
|
||||
#ifdef CLIENT
|
||||
virtual void(float,float) ReceiveEntity;
|
||||
virtual void(void) postdraw;
|
||||
|
@ -48,12 +59,6 @@ class NSEntity:NSTrigger
|
|||
vector m_oldAngle;
|
||||
string m_oldModel;
|
||||
|
||||
/* keep track of these variables */
|
||||
vector net_origin;
|
||||
vector net_angles;
|
||||
vector net_velocity;
|
||||
float net_modelindex;
|
||||
|
||||
string m_parent;
|
||||
|
||||
virtual void(void) Show;
|
||||
|
|
|
@ -211,22 +211,49 @@ NSEntity::EvaluateEntity(void)
|
|||
{
|
||||
/* while the engine is still handling physics for these, we can't
|
||||
* predict when origin/angle might change */
|
||||
if (net_origin != origin) {
|
||||
net_origin = origin;
|
||||
if (ATTR_CHANGED(origin)) {
|
||||
SetSendFlags(BASEFL_CHANGED_ORIGIN);
|
||||
}
|
||||
if (net_angles != angles) {
|
||||
|
||||
if (ATTR_CHANGED(angles)) {
|
||||
angles[0] = Math_FixDelta(angles[0]);
|
||||
angles[1] = Math_FixDelta(angles[1]);
|
||||
angles[2] = Math_FixDelta(angles[2]);
|
||||
|
||||
net_angles = angles;
|
||||
SetSendFlags(BASEFL_CHANGED_ANGLES);
|
||||
}
|
||||
if (net_velocity != velocity) {
|
||||
net_velocity = velocity;
|
||||
|
||||
if (ATTR_CHANGED(modelindex)) {
|
||||
SetSendFlags(BASEFL_CHANGED_MODELINDEX);
|
||||
}
|
||||
|
||||
if (ATTR_CHANGED(size)) {
|
||||
SetSendFlags(BASEFL_CHANGED_SIZE);
|
||||
}
|
||||
|
||||
if (ATTR_CHANGED(solid)) {
|
||||
SetSendFlags(BASEFL_CHANGED_SOLID);
|
||||
}
|
||||
|
||||
if (ATTR_CHANGED(movetype)) {
|
||||
SetSendFlags(BASEFL_CHANGED_MOVETYPE);
|
||||
}
|
||||
|
||||
if (ATTR_CHANGED(scale)) {
|
||||
SetSendFlags(BASEFL_CHANGED_SCALE);
|
||||
}
|
||||
|
||||
if (ATTR_CHANGED(velocity)) {
|
||||
SetSendFlags(BASEFL_CHANGED_VELOCITY);
|
||||
}
|
||||
|
||||
SAVE_STATE(origin);
|
||||
SAVE_STATE(angles);
|
||||
SAVE_STATE(modelindex);
|
||||
SAVE_STATE(size);
|
||||
SAVE_STATE(solid);
|
||||
SAVE_STATE(movetype);
|
||||
SAVE_STATE(scale);
|
||||
SAVE_STATE(velocity);
|
||||
}
|
||||
|
||||
/* Make sure StartFrame calls this */
|
||||
|
@ -280,7 +307,6 @@ NSEntity::SetVelocity(vector vecNew)
|
|||
return;
|
||||
|
||||
velocity = vecNew;
|
||||
SetSendFlags(BASEFL_CHANGED_VELOCITY);
|
||||
};
|
||||
|
||||
void
|
||||
|
@ -307,7 +333,6 @@ NSEntity::SetMovetype(float newMovetype)
|
|||
return;
|
||||
|
||||
movetype = newMovetype;
|
||||
SetSendFlags(BASEFL_CHANGED_MOVETYPE);
|
||||
}
|
||||
void
|
||||
NSEntity::SetSolid(float newSolid)
|
||||
|
@ -316,7 +341,6 @@ NSEntity::SetSolid(float newSolid)
|
|||
return;
|
||||
|
||||
solid = newSolid;
|
||||
SetSendFlags(BASEFL_CHANGED_SOLID);
|
||||
}
|
||||
void
|
||||
NSEntity::SetScale(float newScale)
|
||||
|
@ -325,7 +349,6 @@ NSEntity::SetScale(float newScale)
|
|||
return;
|
||||
|
||||
scale = newScale;
|
||||
SetSendFlags(BASEFL_CHANGED_SCALE);
|
||||
}
|
||||
|
||||
void
|
||||
|
@ -371,7 +394,6 @@ NSEntity::UpdateBounds(void)
|
|||
flScale = scale;
|
||||
|
||||
setsize(this, newMins * flScale, newMaxs * flScale);
|
||||
SetSendFlags(BASEFL_CHANGED_SIZE);
|
||||
}
|
||||
|
||||
void
|
||||
|
@ -381,7 +403,6 @@ NSEntity::SetAngles(vector newAngles)
|
|||
return;
|
||||
|
||||
angles = newAngles;
|
||||
SetSendFlags(BASEFL_CHANGED_ANGLES);
|
||||
}
|
||||
|
||||
void
|
||||
|
@ -397,7 +418,6 @@ NSEntity::SetSize(vector newMins, vector newMaxs)
|
|||
flScale = scale;
|
||||
|
||||
setsize(this, newMins * flScale, newMaxs * flScale);
|
||||
SetSendFlags(BASEFL_CHANGED_SIZE);
|
||||
}
|
||||
|
||||
void
|
||||
|
@ -407,7 +427,6 @@ NSEntity::SetOrigin(vector newOrigin)
|
|||
return;
|
||||
|
||||
setorigin(this, newOrigin);
|
||||
SetSendFlags(BASEFL_CHANGED_ORIGIN);
|
||||
}
|
||||
|
||||
void
|
||||
|
@ -418,8 +437,6 @@ NSEntity::SetModel(string newModel)
|
|||
|
||||
/* mins/maxs have been updated by setmodel */
|
||||
SetSize(mins, maxs);
|
||||
|
||||
SetSendFlags(BASEFL_CHANGED_MODELINDEX);
|
||||
}
|
||||
void
|
||||
NSEntity::SetModelindex(float newModelIndex)
|
||||
|
@ -429,7 +446,6 @@ NSEntity::SetModelindex(float newModelIndex)
|
|||
|
||||
modelindex = newModelIndex;
|
||||
SetSize(mins, maxs);
|
||||
SetSendFlags(BASEFL_CHANGED_MODELINDEX);
|
||||
}
|
||||
|
||||
#ifdef SERVER
|
||||
|
@ -659,7 +675,5 @@ NSEntity::NSEntity(void)
|
|||
if (m_oldModel != "") {
|
||||
precache_model(GetSpawnModel());
|
||||
}
|
||||
#else
|
||||
isCSQC = 1;
|
||||
#endif
|
||||
}
|
||||
|
|
|
@ -33,13 +33,17 @@ class NSRenderableEntity:NSEntity
|
|||
virtual void(void) Respawn;
|
||||
virtual void(float) Save;
|
||||
virtual void(string,string) Restore;
|
||||
virtual void(void) EvaluateEntity;
|
||||
#else
|
||||
virtual void(float,float) ReceiveEntity;
|
||||
virtual float(void) predraw;
|
||||
#endif
|
||||
|
||||
/* new */
|
||||
int m_iBody;
|
||||
PREDICTED_INT(m_iBody);
|
||||
PREDICTED_FLOAT_N(frame);
|
||||
PREDICTED_FLOAT_N(skin);
|
||||
PREDICTED_FLOAT_N(effects);
|
||||
/* model events */
|
||||
float m_flBaseTime;
|
||||
|
||||
|
@ -55,10 +59,10 @@ class NSRenderableEntity:NSEntity
|
|||
virtual void(void) MakeStatic;
|
||||
|
||||
#ifdef GS_RENDERFX
|
||||
float m_iRenderFX;
|
||||
float m_iRenderMode;
|
||||
float m_flRenderAmt;
|
||||
vector m_vecRenderColor;
|
||||
PREDICTED_FLOAT(m_iRenderFX);
|
||||
PREDICTED_FLOAT(m_iRenderMode);
|
||||
PREDICTED_FLOAT(m_flRenderAmt);
|
||||
PREDICTED_VECTOR(m_vecRenderColor);
|
||||
|
||||
/* set */
|
||||
nonvirtual void(float) SetRenderFX;
|
||||
|
|
|
@ -48,6 +48,77 @@ NSRenderableEntity::MakeStatic(void)
|
|||
}
|
||||
|
||||
#ifdef SERVER
|
||||
void
|
||||
NSRenderableEntity::EvaluateEntity(void)
|
||||
{
|
||||
if (ATTR_CHANGED(origin)) {
|
||||
SetSendFlags(BASEFL_CHANGED_ORIGIN);
|
||||
}
|
||||
if (ATTR_CHANGED(angles)) {
|
||||
SetSendFlags(BASEFL_CHANGED_ANGLES);
|
||||
}
|
||||
if (ATTR_CHANGED(modelindex)) {
|
||||
SetSendFlags(BASEFL_CHANGED_MODELINDEX);
|
||||
}
|
||||
if (ATTR_CHANGED(solid)) {
|
||||
SetSendFlags(BASEFL_CHANGED_SOLID);
|
||||
}
|
||||
if (ATTR_CHANGED(movetype)) {
|
||||
SetSendFlags(BASEFL_CHANGED_MOVETYPE);
|
||||
}
|
||||
if (ATTR_CHANGED(size)) {
|
||||
SetSendFlags(BASEFL_CHANGED_SIZE);
|
||||
}
|
||||
if (ATTR_CHANGED(frame)) {
|
||||
SetSendFlags(BASEFL_CHANGED_FRAME);
|
||||
}
|
||||
if (ATTR_CHANGED(skin)) {
|
||||
SetSendFlags(BASEFL_CHANGED_SKIN);
|
||||
}
|
||||
if (ATTR_CHANGED(effects)) {
|
||||
SetSendFlags(BASEFL_CHANGED_EFFECTS);
|
||||
}
|
||||
if (ATTR_CHANGED(m_iBody)) {
|
||||
SetSendFlags(BASEFL_CHANGED_BODY);
|
||||
}
|
||||
if (ATTR_CHANGED(scale)) {
|
||||
SetSendFlags(BASEFL_CHANGED_SCALE);
|
||||
}
|
||||
if (ATTR_CHANGED(velocity)) {
|
||||
SetSendFlags(BASEFL_CHANGED_VELOCITY);
|
||||
}
|
||||
|
||||
SAVE_STATE(origin);
|
||||
SAVE_STATE(angles);
|
||||
SAVE_STATE(modelindex);
|
||||
SAVE_STATE(solid);
|
||||
SAVE_STATE(movetype);
|
||||
SAVE_STATE(size);
|
||||
SAVE_STATE(frame);
|
||||
SAVE_STATE(skin);
|
||||
SAVE_STATE(effects);
|
||||
SAVE_STATE(m_iBody);
|
||||
SAVE_STATE(scale);
|
||||
SAVE_STATE(velocity);
|
||||
|
||||
#ifdef GS_RENDERFX
|
||||
if (ATTR_CHANGED(m_iRenderMode)) {
|
||||
SetSendFlags(BASEFL_CHANGED_RENDERMODE);
|
||||
}
|
||||
|
||||
if (ATTR_CHANGED(m_vecRenderColor)) {
|
||||
SetSendFlags(BASEFL_CHANGED_RENDERCOLOR);
|
||||
}
|
||||
if (ATTR_CHANGED(m_flRenderAmt)) {
|
||||
SetSendFlags(BASEFL_CHANGED_RENDERAMT);
|
||||
}
|
||||
#else
|
||||
if (ATTR_CHANGED(alpha)) {
|
||||
SetSendFlags(BASEFL_CHANGED_ALPHA);
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
/* Make sure StartFrame calls this */
|
||||
float
|
||||
NSRenderableEntity::SendEntity(entity ePEnt, float fChanged)
|
||||
|
@ -559,7 +630,6 @@ NSRenderableEntity::SetEffects(float newEffects)
|
|||
return;
|
||||
|
||||
effects = newEffects;
|
||||
SetSendFlags(BASEFL_CHANGED_EFFECTS);
|
||||
}
|
||||
void
|
||||
NSRenderableEntity::SetFrame(float newFrame)
|
||||
|
@ -569,7 +639,6 @@ NSRenderableEntity::SetFrame(float newFrame)
|
|||
|
||||
frame = newFrame;
|
||||
frame1time = 0.0f;
|
||||
SetSendFlags(BASEFL_CHANGED_FRAME);
|
||||
}
|
||||
void
|
||||
NSRenderableEntity::SetSkin(float newSkin)
|
||||
|
@ -578,7 +647,6 @@ NSRenderableEntity::SetSkin(float newSkin)
|
|||
return;
|
||||
|
||||
skin = newSkin;
|
||||
SetSendFlags(BASEFL_CHANGED_SKIN);
|
||||
}
|
||||
void
|
||||
NSRenderableEntity::SetBody(int newBody)
|
||||
|
@ -587,7 +655,6 @@ NSRenderableEntity::SetBody(int newBody)
|
|||
return;
|
||||
|
||||
m_iBody = newBody;
|
||||
SetSendFlags(BASEFL_CHANGED_BODY);
|
||||
}
|
||||
void
|
||||
NSRenderableEntity::SetScale(float newScale)
|
||||
|
@ -597,7 +664,6 @@ NSRenderableEntity::SetScale(float newScale)
|
|||
|
||||
scale = newScale;
|
||||
setsize(this, m_vecMins * scale, m_vecMaxs * scale);
|
||||
SetSendFlags(BASEFL_CHANGED_SCALE);
|
||||
}
|
||||
|
||||
#ifdef GS_RENDERFX
|
||||
|
@ -608,7 +674,6 @@ NSRenderableEntity::SetRenderFX(float newFX)
|
|||
return;
|
||||
|
||||
m_iRenderFX = newFX;
|
||||
SetSendFlags(BASEFL_CHANGED_RENDERMODE);
|
||||
}
|
||||
void
|
||||
NSRenderableEntity::SetRenderMode(float newMode)
|
||||
|
@ -617,7 +682,6 @@ NSRenderableEntity::SetRenderMode(float newMode)
|
|||
return;
|
||||
|
||||
m_iRenderMode = newMode;
|
||||
SetSendFlags(BASEFL_CHANGED_RENDERMODE);
|
||||
}
|
||||
void
|
||||
NSRenderableEntity::SetRenderAmt(float newAmt)
|
||||
|
@ -626,7 +690,6 @@ NSRenderableEntity::SetRenderAmt(float newAmt)
|
|||
return;
|
||||
|
||||
m_flRenderAmt = newAmt;
|
||||
SetSendFlags(BASEFL_CHANGED_RENDERAMT);
|
||||
}
|
||||
void
|
||||
NSRenderableEntity::SetRenderColor(vector newColor)
|
||||
|
@ -635,7 +698,6 @@ NSRenderableEntity::SetRenderColor(vector newColor)
|
|||
return;
|
||||
|
||||
m_vecRenderColor = newColor;
|
||||
SetSendFlags(BASEFL_CHANGED_RENDERCOLOR);
|
||||
}
|
||||
#endif
|
||||
|
||||
|
|
|
@ -91,22 +91,23 @@ NSVehicle::EvaluateEntity(void)
|
|||
{
|
||||
/* while the engine is still handling physics for these, we can't
|
||||
* predict when origin/angle might change */
|
||||
if (net_origin != origin) {
|
||||
net_origin = origin;
|
||||
if (ATTR_CHANGED(origin)) {
|
||||
SetSendFlags(VEHFL_CHANGED_ORIGIN);
|
||||
}
|
||||
if (net_angles != angles) {
|
||||
if (ATTR_CHANGED(angles)) {
|
||||
angles[0] = Math_FixDelta(angles[0]);
|
||||
angles[1] = Math_FixDelta(angles[1]);
|
||||
angles[2] = Math_FixDelta(angles[2]);
|
||||
|
||||
net_angles = angles;
|
||||
SetSendFlags(VEHFL_CHANGED_ANGLES);
|
||||
}
|
||||
if (net_velocity != velocity) {
|
||||
net_velocity = velocity;
|
||||
if (ATTR_CHANGED(velocity)) {
|
||||
SetSendFlags(VEHFL_CHANGED_VELOCITY);
|
||||
}
|
||||
|
||||
SAVE_STATE(origin);
|
||||
SAVE_STATE(angles);
|
||||
SAVE_STATE(velocity);
|
||||
}
|
||||
|
||||
float
|
||||
|
|
|
@ -155,14 +155,18 @@ env_projectedtexture::ReceiveEntity(float flNew, float flFlags)
|
|||
void
|
||||
env_projectedtexture::EvaluateEntity(void)
|
||||
{
|
||||
if (net_origin != origin) {
|
||||
net_origin = origin;
|
||||
SendFlags |= PRTEXFL_CHANGED_ORIGIN;
|
||||
if (ATTR_CHANGED(origin)) {
|
||||
SetSendFlags(PRTEXFL_CHANGED_ORIGIN);
|
||||
}
|
||||
if (net_angles != angles) {
|
||||
net_angles = angles;
|
||||
SendFlags |= PRTEXFL_CHANGED_ANGLES;
|
||||
if (ATTR_CHANGED(angles)) {
|
||||
angles[0] = Math_FixDelta(angles[0]);
|
||||
angles[1] = Math_FixDelta(angles[1]);
|
||||
angles[2] = Math_FixDelta(angles[2]);
|
||||
|
||||
SetSendFlags(PRTEXFL_CHANGED_ANGLES);
|
||||
}
|
||||
SAVE_STATE(origin);
|
||||
SAVE_STATE(angles);
|
||||
}
|
||||
|
||||
void
|
||||
|
|
|
@ -219,10 +219,10 @@ func_monitor::SendEntity(entity ePEnt, float flFlags)
|
|||
void
|
||||
func_monitor::EvaluateEntity(void)
|
||||
{
|
||||
if (net_origin != origin) {
|
||||
net_origin = origin;
|
||||
if (ATTR_CHANGED(origin)) {
|
||||
SetSendFlags(MONITORFL_CHANGED_BASE);
|
||||
}
|
||||
SAVE_STATE(origin);
|
||||
|
||||
/* this monitor is disabled */
|
||||
if (!m_iValue)
|
||||
|
|
|
@ -177,22 +177,23 @@ func_tankmortar::EvaluateEntity(void)
|
|||
{
|
||||
/* while the engine is still handling physics for these, we can't
|
||||
* predict when origin/angle might change */
|
||||
if (net_origin != origin) {
|
||||
net_origin = origin;
|
||||
if (ATTR_CHANGED(origin)) {
|
||||
SetSendFlags(VEHFL_CHANGED_ORIGIN);
|
||||
}
|
||||
if (net_angles != angles) {
|
||||
if (ATTR_CHANGED(angles)) {
|
||||
angles[0] = Math_FixDelta(angles[0]);
|
||||
angles[1] = Math_FixDelta(angles[1]);
|
||||
angles[2] = Math_FixDelta(angles[2]);
|
||||
|
||||
net_angles = angles;
|
||||
SetSendFlags(VEHFL_CHANGED_ANGLES);
|
||||
}
|
||||
if (net_velocity != velocity) {
|
||||
net_velocity = velocity;
|
||||
if (ATTR_CHANGED(velocity)) {
|
||||
SetSendFlags(VEHFL_CHANGED_VELOCITY);
|
||||
}
|
||||
|
||||
SAVE_STATE(origin);
|
||||
SAVE_STATE(angles);
|
||||
SAVE_STATE(velocity);
|
||||
}
|
||||
|
||||
float
|
||||
|
@ -458,4 +459,4 @@ func_tankmortar_readentity(float isnew)
|
|||
|
||||
veh.ReadEntity(flags, isnew);
|
||||
}
|
||||
#endif
|
||||
#endif
|
||||
|
|
|
@ -161,15 +161,16 @@ info_particle_system::SendEntity(entity ePEnt, float flFlags)
|
|||
void
|
||||
info_particle_system::EvaluateEntity(void)
|
||||
{
|
||||
if (net_origin != origin) {
|
||||
net_origin = origin;
|
||||
if (ATTR_CHANGED(origin)) {
|
||||
SetSendFlags(PARTSYSFL_CHANGED_ORIGIN);
|
||||
}
|
||||
|
||||
if (net_angles != angles) {
|
||||
net_angles = angles;
|
||||
if (ATTR_CHANGED(angles)) {
|
||||
SetSendFlags(PARTSYSFL_CHANGED_ANGLES);
|
||||
}
|
||||
|
||||
SAVE_STATE(origin);
|
||||
SAVE_STATE(angles);
|
||||
}
|
||||
|
||||
void
|
||||
|
|
|
@ -183,14 +183,15 @@ light_dynamic::Initialized(void)
|
|||
void
|
||||
light_dynamic::EvaluateEntity(void)
|
||||
{
|
||||
if (net_origin != origin) {
|
||||
net_origin = origin;
|
||||
if (ATTR_CHANGED(origin)) {
|
||||
SetSendFlags(DLIGHTFL_CHANGED_ORIGIN);
|
||||
}
|
||||
if (net_angles != angles) {
|
||||
net_angles = angles;
|
||||
if (ATTR_CHANGED(angles)) {
|
||||
SetSendFlags(DLIGHTFL_CHANGED_ANGLES);
|
||||
}
|
||||
|
||||
SAVE_STATE(origin);
|
||||
SAVE_STATE(angles);
|
||||
}
|
||||
|
||||
void
|
||||
|
|
|
@ -30,6 +30,8 @@ Point entity defining a 4-wheel vehicle that you can drive.
|
|||
This entity was introduced in Half-Life 2 (2004).
|
||||
*/
|
||||
|
||||
#define VEH_SKIDDING FL_USE_RELEASED
|
||||
|
||||
enumflags
|
||||
{
|
||||
VEHFL_DRIVER,
|
||||
|
@ -37,7 +39,8 @@ enumflags
|
|||
VEHFL_ORIGIN,
|
||||
VEHFL_ANGLES,
|
||||
VEHFL_VELOCITY,
|
||||
VEHFL_TURNING
|
||||
VEHFL_TURNING,
|
||||
VEHFL_FLAGS
|
||||
};
|
||||
|
||||
class prop_vehicle_driveable_wheel
|
||||
|
@ -309,6 +312,12 @@ prop_vehicle_driveable_wheel::Accel(float flMoveTime, float m_flTurn)
|
|||
velocity += v_forward * bound(-1, vehParent.m_vecMoveValues[0] / 400, 1) * vehParent.m_flAcceleration * flMoveTime * flTraction;
|
||||
}
|
||||
|
||||
/* test if this car is skidding */
|
||||
float skid = (velocity * v_right);
|
||||
if ( fabs(skid) > vehParent.m_flSkidSpeed ) {
|
||||
vehParent.flags |= VEH_SKIDDING;
|
||||
}
|
||||
|
||||
/* nuke sideways velocity. if a wheel is off the ground this probably
|
||||
means that it'll be pushed further. players should try not to roll
|
||||
too much. */
|
||||
|
@ -413,6 +422,7 @@ prop_vehicle_driveable::PredictPreFrame(void)
|
|||
SAVE_STATE(origin);
|
||||
SAVE_STATE(velocity);
|
||||
SAVE_STATE(m_flTurn);
|
||||
SAVE_STATE(flags);
|
||||
|
||||
m_wlFL.PredictPreFrame();
|
||||
m_wlFR.PredictPreFrame();
|
||||
|
@ -427,6 +437,7 @@ prop_vehicle_driveable::PredictPostFrame(void)
|
|||
ROLL_BACK(origin);
|
||||
ROLL_BACK(velocity);
|
||||
ROLL_BACK(m_flTurn);
|
||||
ROLL_BACK(flags);
|
||||
|
||||
m_wlFL.PredictPostFrame();
|
||||
m_wlFR.PredictPostFrame();
|
||||
|
@ -490,6 +501,8 @@ prop_vehicle_driveable::RunVehiclePhysics(void)
|
|||
m_flTimeLength = frametime;
|
||||
}
|
||||
|
||||
flags &= ~VEH_SKIDDING;
|
||||
|
||||
angles[0] = Math_FixDelta(angles[0]);
|
||||
angles[1] = Math_FixDelta(angles[1]);
|
||||
angles[2] = Math_FixDelta(angles[2]);
|
||||
|
@ -614,6 +627,9 @@ prop_vehicle_driveable::ReadEntity(float flSendFlags, float flNew)
|
|||
if (flSendFlags & VEHFL_TURNING)
|
||||
m_flTurn = readfloat();
|
||||
|
||||
if (flSendFlags & VEHFL_FLAGS)
|
||||
flags = readfloat();
|
||||
|
||||
if (flNew) {
|
||||
drawmask = MASK_ENGINE;
|
||||
SetMovetype(MOVETYPE_NONE);
|
||||
|
@ -640,36 +656,40 @@ prop_vehicle_driveable::EvaluateEntity(void)
|
|||
{
|
||||
/* while the engine is still handling physics for these, we can't
|
||||
* predict when origin/angle might change */
|
||||
if (net_origin != origin) {
|
||||
net_origin = origin;
|
||||
if (ATTR_CHANGED(origin)) {
|
||||
SetSendFlags(VEHFL_ORIGIN);
|
||||
}
|
||||
|
||||
SetSendFlags(VEHFL_ORIGIN);
|
||||
if (net_angles != angles) {
|
||||
if (ATTR_CHANGED(angles)) {
|
||||
angles[0] = Math_FixDelta(angles[0]);
|
||||
angles[1] = Math_FixDelta(angles[1]);
|
||||
angles[2] = Math_FixDelta(angles[2]);
|
||||
|
||||
net_angles = angles;
|
||||
SetSendFlags(VEHFL_ANGLES);
|
||||
}
|
||||
if (net_modelindex != modelindex) {
|
||||
net_modelindex = modelindex;
|
||||
if (ATTR_CHANGED(modelindex)) {
|
||||
SetSendFlags(VEHFL_MODELINDEX);
|
||||
}
|
||||
if (net_velocity != velocity) {
|
||||
net_velocity = velocity;
|
||||
if (ATTR_CHANGED(velocity)) {
|
||||
SetSendFlags(VEHFL_VELOCITY);
|
||||
}
|
||||
if (m_flTurn_net != m_flTurn) {
|
||||
m_flTurn_net = m_flTurn;
|
||||
SetSendFlags(VEHFL_TURNING);
|
||||
}
|
||||
if (m_eDriver_net != m_eDriver) {
|
||||
m_eDriver_net = m_eDriver;
|
||||
SetSendFlags(VEHFL_DRIVER);
|
||||
}
|
||||
if (ATTR_CHANGED(flags)) {
|
||||
SetSendFlags(VEHFL_FLAGS);
|
||||
}
|
||||
|
||||
SAVE_STATE(origin);
|
||||
SAVE_STATE(angles);
|
||||
SAVE_STATE(modelindex);
|
||||
SAVE_STATE(velocity);
|
||||
SAVE_STATE(m_flTurn);
|
||||
SAVE_STATE(m_eDriver);
|
||||
SAVE_STATE(flags);
|
||||
}
|
||||
|
||||
float
|
||||
|
@ -710,6 +730,9 @@ prop_vehicle_driveable::SendEntity(entity ePVSent, float flSendFlags)
|
|||
if (flSendFlags & VEHFL_TURNING)
|
||||
WriteFloat(MSG_ENTITY, m_flTurn);
|
||||
|
||||
if (flSendFlags & VEHFL_FLAGS)
|
||||
WriteFloat(MSG_ENTITY, flags);
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
#endif
|
||||
|
|
|
@ -142,14 +142,15 @@ trigger_camera::EvaluateEntity(void)
|
|||
angles = vectoangles(t.origin - origin);
|
||||
}
|
||||
|
||||
if (net_origin != origin) {
|
||||
net_origin = origin;
|
||||
if (ATTR_CHANGED(origin)) {
|
||||
SetSendFlags(OCAMFL_CHANGED_ORIGIN);
|
||||
}
|
||||
if (net_angles != angles) {
|
||||
net_angles = angles;
|
||||
if (ATTR_CHANGED(angles)) {
|
||||
SetSendFlags(OCAMFL_CHANGED_ANGLES);
|
||||
}
|
||||
|
||||
SAVE_STATE(origin);
|
||||
SAVE_STATE(angles);
|
||||
}
|
||||
|
||||
void
|
||||
|
|
|
@ -14,6 +14,21 @@
|
|||
* OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
||||
*/
|
||||
|
||||
/* networking helpers */
|
||||
#define PREDICTED_INT(x) int x; int x ##_net
|
||||
#define PREDICTED_FLOAT(x) float x; float x ##_net
|
||||
#define PREDICTED_VECTOR(x) vector x; vector x ##_net
|
||||
#define PREDICTED_ENT(x) entity x; entity x ##_net
|
||||
|
||||
#define PREDICTED_INT_N(x) int x ##_net
|
||||
#define PREDICTED_FLOAT_N(x) float x ##_net
|
||||
#define PREDICTED_VECTOR_N(x) vector x ##_net
|
||||
|
||||
#define ROLL_BACK(x) x = x ##_net
|
||||
#define SAVE_STATE(x) x ##_net = x
|
||||
#define ATTR_CHANGED(x) (x ##_net != x)
|
||||
#define VEC_CHANGED(x,y) (x ##_net[y] != x[y])
|
||||
|
||||
#include "sound.h"
|
||||
|
||||
#ifdef CLIENT
|
||||
|
|
|
@ -14,36 +14,16 @@
|
|||
* OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
||||
*/
|
||||
|
||||
#define PREDICTED_INT(x) int x; int x ##_net
|
||||
#define PREDICTED_FLOAT(x) float x; float x ##_net
|
||||
#define PREDICTED_VECTOR(x) vector x; vector x ##_net
|
||||
#define PREDICTED_ENT(x) entity x; entity x ##_net
|
||||
|
||||
#define PREDICTED_INT_N(x) int x ##_net
|
||||
#define PREDICTED_FLOAT_N(x) float x ##_net
|
||||
#define PREDICTED_VECTOR_N(x) vector x ##_net
|
||||
|
||||
#define ROLL_BACK(x) x = x ##_net
|
||||
#define SAVE_STATE(x) x ##_net = x
|
||||
#define ATTR_CHANGED(x) (x ##_net != x)
|
||||
#define VEC_CHANGED(x,y) (x ##_net[y] != x[y])
|
||||
|
||||
class
|
||||
base_player:base_client
|
||||
{
|
||||
PREDICTED_FLOAT(health);
|
||||
PREDICTED_FLOAT(armor);
|
||||
|
||||
PREDICTED_FLOAT_N(modelindex);
|
||||
PREDICTED_VECTOR_N(origin);
|
||||
PREDICTED_VECTOR_N(velocity);
|
||||
PREDICTED_VECTOR_N(angles);
|
||||
PREDICTED_FLOAT_N(colormap);
|
||||
PREDICTED_FLOAT_N(flags);
|
||||
PREDICTED_FLOAT_N(gflags);
|
||||
PREDICTED_FLOAT(viewzoom);
|
||||
PREDICTED_VECTOR_N(view_ofs);
|
||||
PREDICTED_FLOAT_N(movetype);
|
||||
PREDICTED_VECTOR(v_angle);
|
||||
PREDICTED_FLOAT_N(pmove_flags);
|
||||
|
||||
|
|
Loading…
Reference in a new issue