Browse Source

make gravgun pull not depend on network rates

gravgun
mittorn 7 years ago
parent
commit
64de53674f
  1. 45
      dlls/gravgun.cpp

45
dlls/gravgun.cpp

@ -66,7 +66,7 @@ public: @@ -66,7 +66,7 @@ public:
void PrimaryAttack(void);
void SecondaryAttack(void);
void WeaponIdle(void);
void Pull(CBaseEntity* ent, float force);
void Pull(CBaseEntity* ent);
void GravAnim(int iAnim, int skiplocal, int body);
Vector PredictTarget( float length );
CBaseEntity *GetCrossEnt( Vector gunpos, Vector aim, float radius );
@ -74,7 +74,8 @@ public: @@ -74,7 +74,8 @@ public:
float m_flAmmoUseTime;// since we use < 1 point of ammo per update, we subtract ammo on a timer.
void GrabThink(void);
void EXPORT GrabThink( void );
void EXPORT PullThink( void );
float Fire(const Vector &vecOrigSrc, const Vector &vecDir);
BOOL HasAmmo(void);
@ -118,7 +119,7 @@ Vector CGravGun::PredictTarget(float length) @@ -118,7 +119,7 @@ Vector CGravGun::PredictTarget(float length)
{
Vector predicted = m_pPlayer->pev->origin;
float cmdtime = gpGlobals->time - m_flLastCmd;
printf("PredictTarget %f\n", cmdtime);
ALERT( at_notice, "PredictTarget %f\n", cmdtime );
// button-based prediction
if( m_pPlayer->pev->button & IN_FORWARD )
@ -165,6 +166,7 @@ BOOL CGravGun::Deploy(void) @@ -165,6 +166,7 @@ BOOL CGravGun::Deploy(void)
{
m_deployed = FALSE;
m_fireState = FIRE_OFF;
SetThink( NULL );
return DefaultDeploy("models/v_gravcannon.mdl", "models/p_gravcannon.mdl", GAUSS_DRAW, "gauss");
}
@ -382,8 +384,9 @@ void CGravGun::Attack2(void) @@ -382,8 +384,9 @@ void CGravGun::Attack2(void)
if(crossent->TouchGravGun(m_pPlayer, 0))
{
m_hAimentEntity = crossent;
Pull(crossent,5);
GravAnim(GAUSS_SPIN, 0, 0);
SetThink( &CGravGun::PullThink );
pev->nextthink = gpGlobals->time + 0.001;
}
}
@ -469,7 +472,6 @@ CBaseEntity* CGravGun::TraceForward(CBaseEntity *pMe,float radius) @@ -469,7 +472,6 @@ CBaseEntity* CGravGun::TraceForward(CBaseEntity *pMe,float radius)
//Used for prop grab and
void CGravGun::GrabThink()
{
printf("GrabThink\n");
if (( m_iGrabFailures < 50 )&& m_hAimentEntity )
{
Vector origin = m_hAimentEntity->pev->origin;
@ -482,7 +484,7 @@ void CGravGun::GrabThink() @@ -482,7 +484,7 @@ void CGravGun::GrabThink()
UpdateEffect(pev->origin, origin, 1);
Pull(m_hAimentEntity, 100);
Pull(m_hAimentEntity);
pev->nextthink = gpGlobals->time + 0.001;
}
else{
@ -498,11 +500,19 @@ void CGravGun::GrabThink() @@ -498,11 +500,19 @@ void CGravGun::GrabThink()
EndAttack();
m_iStage = 0;
}
}
void CGravGun::PullThink()
{
if( m_hAimentEntity )
{
Pull( m_hAimentEntity );
pev->nextthink = gpGlobals->time + 0.05;
}
else SetThink( NULL );
}
void CGravGun::Pull(CBaseEntity* ent,float force)
void CGravGun::Pull(CBaseEntity* ent)
{
Vector origin = ent->pev->origin;
if( ent->IsBSPModel())
@ -512,6 +522,7 @@ void CGravGun::Pull(CBaseEntity* ent,float force) @@ -512,6 +522,7 @@ void CGravGun::Pull(CBaseEntity* ent,float force)
target.z += 32;
if ((target - origin).Length() > 60){
target = PredictTarget(110);
Vector diff = target - origin;
target.z += 60;
@ -521,9 +532,12 @@ void CGravGun::Pull(CBaseEntity* ent,float force) @@ -521,9 +532,12 @@ void CGravGun::Pull(CBaseEntity* ent,float force)
if( !m_iStage )
{
ent->pev->velocity = (target - origin).Normalize()*300;
ent->pev->velocity = diff.Normalize()*(55000.0* 1.0/diff.Length());
if(ent->pev->velocity.Length() > 500 )
ent->pev->velocity = diff.Normalize() * 500;
pev->velocity.z += 10;
if( (target - origin).Length() < 150 )
if( diff.Length() < 150 )
{
m_iStage = 1;
@ -534,8 +548,11 @@ void CGravGun::Pull(CBaseEntity* ent,float force) @@ -534,8 +548,11 @@ void CGravGun::Pull(CBaseEntity* ent,float force)
}
else
{
ent->pev->velocity = (target - origin).Normalize()*550;
ent->pev->velocity = diff.Normalize()*(55000.0* 1.0/diff.Length());
if(ent->pev->velocity.Length() > 900 )
ent->pev->velocity = diff.Normalize() * 900;
pev->velocity.z += 15;
ALERT( at_notice, "vel %f\n", ent->pev->velocity.Length() );
}
//ent->pev->velocity = ent->pev->velocity + m_pPlayer->pev->velocity;
/////
@ -557,7 +574,7 @@ void CGravGun::Pull(CBaseEntity* ent,float force) @@ -557,7 +574,7 @@ void CGravGun::Pull(CBaseEntity* ent,float force)
}
else if( ent->TouchGravGun(m_pPlayer, 2) )
{
ent->pev->velocity = (target - origin)* 35;
ent->pev->velocity = (target - origin)* 80;
if(ent->pev->velocity.Length()>900)
ent->pev->velocity = (target - origin).Normalize() * 900;
ent->pev->velocity = ent->pev->velocity + m_pPlayer->pev->velocity;
@ -789,6 +806,8 @@ void CGravGun::EndAttack(void) @@ -789,6 +806,8 @@ void CGravGun::EndAttack(void)
m_fireState = FIRE_OFF;
DestroyEffect();
if( m_pfnThink == &CGravGun::PullThink )
SetThink( NULL );
}

Loading…
Cancel
Save