NS/main/source/mod/AvHBlink.cpp

171 lines
3.2 KiB
C++
Raw Normal View History

#include "mod/AvHAlienWeapons.h"
#include "mod/AvHAlienWeaponConstants.h"
#include "mod/AvHSpecials.h"
#include "pm_shared/pm_defs.h"
extern playermove_t* pmove;
#ifdef AVH_SERVER
#include "mod/AvHPlayer.h"
#endif
#ifdef AVH_CLIENT
#include "cl_dll/hud.h"
#include "mod/AvHHud.h"
extern int g_runfuncs;
#endif
#include "mod/AvHAlienAbilities.h"
LINK_ENTITY_TO_CLASS(kwBlinkGun, AvHBlinkGun);
void AvHBlinkGun::Init()
{
this->mRange = 0;
this->mDamage = 0;
this->mTimeOfNextBlinkEvent = 0;
}
int AvHBlinkGun::GetBarrelLength() const
{
return 0;
}
float AvHBlinkGun::GetRateOfFire() const
{
return BALANCE_FVAR(kBlinkROF);
}
BOOL AvHBlinkGun::Deploy()
{
return AvHAlienWeapon::Deploy();
}
void AvHBlinkGun::ItemPostFrame(void)
{
AvHAlienWeapon::ItemPostFrame();
float theClientTimePassedThisTick = (pmove->cmd.msec/1000.0f);
this->mTimeOfNextBlinkEvent -= theClientTimePassedThisTick;
}
int AvHBlinkGun::GetDeployAnimation() const
{
// Look at most recently used weapon and see if we can transition from it
int theDeployAnimation = 7;
AvHWeaponID thePreviousID = this->GetPreviousWeaponID();
switch(thePreviousID)
{
case AVH_WEAPON_BLINK:
case AVH_WEAPON_METABOLIZE:
theDeployAnimation = -1;
break;
case AVH_WEAPON_SWIPE:
theDeployAnimation = 9;
break;
case AVH_WEAPON_ACIDROCKET:
case AVH_WEAPON_BILEBOMB:
theDeployAnimation = 11;
break;
}
return theDeployAnimation;
}
int AvHBlinkGun::GetIdleAnimation() const
{
int theAnimation = UTIL_SharedRandomLong(this->m_pPlayer->random_seed, 17, 18);
return theAnimation;
}
int AvHBlinkGun::GetShootAnimation() const
{
return -1;
}
bool AvHBlinkGun::GetFiresUnderwater() const
{
return true;
}
bool AvHBlinkGun::GetIsDroppable() const
{
return false;
}
AvHMessageID AvHBlinkGun::GetAbilityImpulse() const
{
return ALIEN_ABILITY_BLINK;
}
void AvHBlinkGun::FireProjectiles(void)
{
#ifdef AVH_CLIENT
if(g_runfuncs)
{
gHUD.SetAlienAbility(this->GetAbilityImpulse());
}
#endif
#ifdef AVH_SERVER
AvHPlayer* thePlayer = dynamic_cast<AvHPlayer*>(this->m_pPlayer);
if(thePlayer)
{
thePlayer->TriggerUncloak();
}
#endif
if(this->mTimeOfNextBlinkEvent <= 0)
{
const float kEventDelay = 2.0f;
this->PlaybackEvent(this->mBlinkSuccessEvent, this->GetShootAnimation());
this->mTimeOfNextBlinkEvent = UTIL_WeaponTimeBase() + kEventDelay;
}
}
bool AvHBlinkGun::GetMustPressTriggerForEachShot() const
{
return false;
}
char* AvHBlinkGun::GetViewModel() const
{
return kLevel4ViewModel;
}
void AvHBlinkGun::Precache()
{
AvHAlienWeapon::Precache();
PRECACHE_UNMODIFIED_SOUND(kBlinkSuccessSound);
// No event for firing, only on success or failure
this->mEvent = 0;
this->mBlinkSuccessEvent = PRECACHE_EVENT(1, kBlinkEffectSuccessEventName);
}
void AvHBlinkGun::Spawn()
{
AvHAlienWeapon::Spawn();
Precache();
this->m_iId = AVH_WEAPON_BLINK;
// Set our class name
this->pev->classname = MAKE_STRING(kwsBlinkGun);
SET_MODEL(ENT(this->pev), kNullModel);
FallInit();// get ready to fall down.
}
bool AvHBlinkGun::UsesAmmo(void) const
{
return false;
}