NSRenderableEntity: add new methods SetAxialScale() and GetAxialScale(). These can be used in combination with the isotropic scaler which uses SetScale().

This commit is contained in:
Marco Cawthorne 2023-07-07 17:05:30 -07:00
parent 7350bf98d4
commit bc67e0ab47
Signed by: eukara
GPG Key ID: CE2032F0A2882A22
4 changed files with 68 additions and 2 deletions

View File

@ -1582,6 +1582,9 @@ NSMonster::EvaluateEntity(void)
EVALUATE_FIELD(effects, MONFL_CHANGED_EFFECTS)
EVALUATE_FIELD(m_iBody, MONFL_CHANGED_BODY)
EVALUATE_FIELD(scale, MONFL_CHANGED_SCALE)
EVALUATE_VECTOR(m_vecAxialScale, 0, MONFL_CHANGED_SCALE)
EVALUATE_VECTOR(m_vecAxialScale, 1, MONFL_CHANGED_SCALE)
EVALUATE_VECTOR(m_vecAxialScale, 2, MONFL_CHANGED_SCALE)
EVALUATE_VECTOR(velocity, 0, MONFL_CHANGED_VELOCITY)
EVALUATE_VECTOR(velocity, 1, MONFL_CHANGED_VELOCITY)
EVALUATE_VECTOR(velocity, 2, MONFL_CHANGED_VELOCITY)
@ -1635,6 +1638,9 @@ NSMonster::SendEntity(entity ePEnt, float flChanged)
SENDENTITY_FLOAT(effects, MONFL_CHANGED_EFFECTS)
SENDENTITY_SHORT(m_iBody, MONFL_CHANGED_BODY)
SENDENTITY_FLOAT(scale, MONFL_CHANGED_SCALE)
SENDENTITY_FLOAT(m_vecAxialScale[0], MONFL_CHANGED_SCALE)
SENDENTITY_FLOAT(m_vecAxialScale[1], MONFL_CHANGED_SCALE)
SENDENTITY_FLOAT(m_vecAxialScale[2], MONFL_CHANGED_SCALE)
SENDENTITY_COORD(velocity[0], MONFL_CHANGED_VELOCITY)
SENDENTITY_COORD(velocity[1], MONFL_CHANGED_VELOCITY)
SENDENTITY_COORD(velocity[2], MONFL_CHANGED_VELOCITY)
@ -1715,6 +1721,9 @@ NSMonster::ReceiveEntity(float flNew, float flChanged)
READENTITY_FLOAT(effects, MONFL_CHANGED_EFFECTS)
READENTITY_SHORT(m_iBody, MONFL_CHANGED_BODY)
READENTITY_FLOAT(scale, MONFL_CHANGED_SCALE)
READENTITY_FLOAT(m_vecAxialScale[0], MONFL_CHANGED_SCALE)
READENTITY_FLOAT(m_vecAxialScale[1], MONFL_CHANGED_SCALE)
READENTITY_FLOAT(m_vecAxialScale[2], MONFL_CHANGED_SCALE)
READENTITY_COORD(velocity[0], MONFL_CHANGED_VELOCITY)
READENTITY_COORD(velocity[1], MONFL_CHANGED_VELOCITY)
READENTITY_COORD(velocity[2], MONFL_CHANGED_VELOCITY)

View File

@ -105,6 +105,7 @@ private:
PREDICTED_FLOAT(m_iRenderMode)
PREDICTED_FLOAT(m_flRenderAmt)
PREDICTED_VECTOR(m_vecRenderColor)
PREDICTED_VECTOR(m_vecAxialScale)
/* model events */
float m_flBaseTime;
@ -172,6 +173,9 @@ public:
nonvirtual void SetBoneControl4(float);
/** Sets the value of the bone controller #5. */
nonvirtual void SetBoneControl5(float);
/** Sets the axial, anisotropic scale of an entity, affecting the individual axis (forward, right, up). */
nonvirtual void SetAxialScale(vector);
/** Returns the bodygroup of the entity. */
nonvirtual int GetBody(void);
/** Returns the body within a given group. */
@ -194,10 +198,13 @@ public:
nonvirtual float GetBoneControl4(void);
/** Returns the value of the entity's bone controller #5. */
nonvirtual float GetBoneControl5(void);
/** Returns the axial/anisotropic scale of the entity, same as input format (forward, right, up) */
nonvirtual vector GetAxialScale(void);
#ifdef CLIENT
/** Called by predraw(); and will set the appropriate rendering specific fields. */
nonvirtual void RenderFXPass(void);
nonvirtual void RenderAxialScale(void);
#endif
};

View File

@ -29,6 +29,7 @@ NSRenderableEntity::NSRenderableEntity(void)
m_flBoneControl4 = 0.5f;
m_flBoneControl5 = 0.5f;
m_iBody = 0i;
m_vecAxialScale = [1,1,1];
effects |= EF_NOSHADOW;
@ -117,6 +118,9 @@ NSRenderableEntity::EvaluateEntity(void)
EVALUATE_FIELD(effects, RDENT_CHANGED_EFFECTS)
EVALUATE_FIELD(m_iBody, RDENT_CHANGED_BODY)
EVALUATE_FIELD(scale, RDENT_CHANGED_SCALE)
EVALUATE_VECTOR(m_vecAxialScale, 0, RDENT_CHANGED_SCALE)
EVALUATE_VECTOR(m_vecAxialScale, 1, RDENT_CHANGED_SCALE)
EVALUATE_VECTOR(m_vecAxialScale, 2, RDENT_CHANGED_SCALE)
EVALUATE_VECTOR(velocity, 0, RDENT_CHANGED_VELOCITY)
EVALUATE_VECTOR(velocity, 1, RDENT_CHANGED_VELOCITY)
EVALUATE_VECTOR(velocity, 2, RDENT_CHANGED_VELOCITY)
@ -201,6 +205,9 @@ NSRenderableEntity::SendEntity(entity ePEnt, float flChanged)
SENDENTITY_FLOAT(effects, RDENT_CHANGED_EFFECTS)
SENDENTITY_SHORT(m_iBody, RDENT_CHANGED_BODY)
SENDENTITY_FLOAT(scale, RDENT_CHANGED_SCALE)
SENDENTITY_FLOAT(m_vecAxialScale[0], RDENT_CHANGED_SCALE)
SENDENTITY_FLOAT(m_vecAxialScale[1], RDENT_CHANGED_SCALE)
SENDENTITY_FLOAT(m_vecAxialScale[2], RDENT_CHANGED_SCALE)
SENDENTITY_COORD(velocity[0], RDENT_CHANGED_VELOCITY)
SENDENTITY_COORD(velocity[1], RDENT_CHANGED_VELOCITY)
SENDENTITY_COORD(velocity[2], RDENT_CHANGED_VELOCITY)
@ -258,6 +265,9 @@ NSRenderableEntity::ReceiveEntity(float flNew, float flChanged)
READENTITY_FLOAT(effects, RDENT_CHANGED_EFFECTS)
READENTITY_SHORT(m_iBody, RDENT_CHANGED_BODY)
READENTITY_FLOAT(scale, RDENT_CHANGED_SCALE)
READENTITY_FLOAT(m_vecAxialScale[0], RDENT_CHANGED_SCALE)
READENTITY_FLOAT(m_vecAxialScale[1], RDENT_CHANGED_SCALE)
READENTITY_FLOAT(m_vecAxialScale[2], RDENT_CHANGED_SCALE)
READENTITY_COORD(velocity[0], RDENT_CHANGED_VELOCITY)
READENTITY_COORD(velocity[1], RDENT_CHANGED_VELOCITY)
READENTITY_COORD(velocity[2], RDENT_CHANGED_VELOCITY)
@ -522,6 +532,19 @@ NSRenderableEntity::RenderDebugSkeleton(void)
}
}
void
NSRenderableEntity::RenderAxialScale(void)
{
/* only bother if we're non-standard */
if (m_vecAxialScale != [1,1,1]) {
makevectors(angles);
v_forward *= m_vecAxialScale[0];
v_right *= m_vecAxialScale[1];
v_up *= m_vecAxialScale[2];
renderflags |= RF_USEAXIS;
}
}
/*
============
NSRenderableEntity::predraw
@ -531,6 +554,7 @@ entities, so TODO: make things like anims, sentences apply
only to relevant child-classes
============
*/
var vector autocvar_testscale = [1,1,1];
float
NSRenderableEntity::predraw(void)
{
@ -554,6 +578,8 @@ NSRenderableEntity::predraw(void)
processmodelevents(modelindex, frame, m_flBaseTime,
frame1time, HandleAnimEvent);
RenderAxialScale();
if (alpha > 0.0) {
/* TODO: Move this somewhere more sane */
if (m_iRenderFX == RFX_Q2PULSE) {
@ -654,6 +680,12 @@ NSRenderableEntity::SetBoneControl5(float val)
m_flBoneControl5 = val;
}
void
NSRenderableEntity::SetAxialScale(vector scaleVec)
{
m_vecAxialScale = scaleVec;
}
int
NSRenderableEntity::GetBody(void)
{
@ -720,6 +752,12 @@ NSRenderableEntity::GetBoneControl5(void)
return m_flBoneControl5;
}
vector
NSRenderableEntity::GetAxialScale(void)
{
return m_vecAxialScale;
}
void
NSRenderableEntity::HandleAnimEvent(float flTimeStamp, int iCode, string strData)
{

View File

@ -796,6 +796,9 @@ NSTalkMonster::SendEntity(entity ePEnt, float flChanged)
SENDENTITY_FLOAT(effects, MONFL_CHANGED_EFFECTS)
SENDENTITY_SHORT(m_iBody, MONFL_CHANGED_BODY)
SENDENTITY_FLOAT(scale, MONFL_CHANGED_SCALE)
SENDENTITY_FLOAT(m_vecAxialScale[0], MONFL_CHANGED_SCALE)
SENDENTITY_FLOAT(m_vecAxialScale[1], MONFL_CHANGED_SCALE)
SENDENTITY_FLOAT(m_vecAxialScale[2], MONFL_CHANGED_SCALE)
SENDENTITY_COORD(velocity[0], MONFL_CHANGED_VELOCITY)
SENDENTITY_COORD(velocity[1], MONFL_CHANGED_VELOCITY)
SENDENTITY_COORD(velocity[2], MONFL_CHANGED_VELOCITY)
@ -805,7 +808,9 @@ NSTalkMonster::SendEntity(entity ePEnt, float flChanged)
SENDENTITY_ANGLE(m_vecRenderColor[1], MONFL_CHANGED_RENDERCOLOR)
SENDENTITY_ANGLE(m_vecRenderColor[2], MONFL_CHANGED_RENDERCOLOR)
SENDENTITY_ANGLE(m_flRenderAmt, MONFL_CHANGED_RENDERAMT)
SENDENTITY_FLOAT(m_flHeadYaw, MONFL_CHANGED_HEADYAW)
SENDENTITY_FLOAT(bonecontrol1, MONFL_CHANGED_HEADYAW)
SENDENTITY_FLOAT(subblendfrac, MONFL_CHANGED_HEADYAW)
SENDENTITY_FLOAT(frame1time, MONFL_CHANGED_HEADYAW)
return (1);
}
@ -955,6 +960,8 @@ NSTalkMonster::predraw(void)
basesubblendfrac = autocvar(basesubblendfrac, 0);
basesubblend2frac = autocvar(basesubblend2frac, 0);
RenderAxialScale();
addentity(this);
_RenderDebugViewCone();
@ -993,6 +1000,9 @@ NSTalkMonster::ReceiveEntity(float flNew, float flChanged)
READENTITY_FLOAT(effects, MONFL_CHANGED_EFFECTS)
READENTITY_SHORT(m_iBody, MONFL_CHANGED_BODY)
READENTITY_FLOAT(scale, MONFL_CHANGED_SCALE)
READENTITY_FLOAT(m_vecAxialScale[0], MONFL_CHANGED_SCALE)
READENTITY_FLOAT(m_vecAxialScale[1], MONFL_CHANGED_SCALE)
READENTITY_FLOAT(m_vecAxialScale[2], MONFL_CHANGED_SCALE)
READENTITY_COORD(velocity[0], MONFL_CHANGED_VELOCITY)
READENTITY_COORD(velocity[1], MONFL_CHANGED_VELOCITY)
READENTITY_COORD(velocity[2], MONFL_CHANGED_VELOCITY)
@ -1002,7 +1012,9 @@ NSTalkMonster::ReceiveEntity(float flNew, float flChanged)
READENTITY_ANGLE(m_vecRenderColor[1], MONFL_CHANGED_RENDERCOLOR)
READENTITY_ANGLE(m_vecRenderColor[2], MONFL_CHANGED_RENDERCOLOR)
READENTITY_ANGLE(m_flRenderAmt, MONFL_CHANGED_RENDERAMT)
READENTITY_FLOAT(m_flHeadYaw, MONFL_CHANGED_HEADYAW)
READENTITY_FLOAT(bonecontrol1, MONFL_CHANGED_HEADYAW)
READENTITY_FLOAT(subblendfrac, MONFL_CHANGED_HEADYAW)
READENTITY_FLOAT(frame1time, MONFL_CHANGED_HEADYAW)
if (scale == 0.0)
scale = 1.0f;