etqw-sdk/base/script/weapons/shotgun.script

83 lines
2.0 KiB
Plaintext

/***********************************************************************
weapon_shotgun.script
***********************************************************************/
object weapon_shotgun : weapon_clip {
void preinit();
float DoReload( boolean wasScoped );
void ShotgunReload();
void Base_BeginReload();
};
void weapon_shotgun::preinit() {
hasScope = false;
hasIronSights = true;
}
float weapon_shotgun::DoReload( boolean wasScoped ) {
if ( !sys.isServer() && sys.getLocalViewPlayer() != myPlayer ) {
weaponReloading();
playAnim( ANIMCHANNEL_ALL, "reload" );
waitUntil( animDone( ANIMCHANNEL_ALL, 4 ) );
weaponReady();
} else {
playAnim( ANIMCHANNEL_ALL, "reload_start" );
waitUntil( animDone( ANIMCHANNEL_ALL, 4 ) );
if ( CanReload() ) {
ShotgunReload();
}
}
playAnim( ANIMCHANNEL_ALL, "reload_end" );
waitUntil( animDone( ANIMCHANNEL_ALL, 4 ) );
return 0.0f;
}
void weapon_shotgun::ShotgunReload() {
Base_BeginReload();
while ( CanReload() ) {
sys.waitFrame();
weaponReloading();
playAnim( ANIMCHANNEL_ALL, "reload" );
waitUntil( animDone( ANIMCHANNEL_ALL, 4 ) );
addToClip( 0, reloadAmmo );
weaponReady();
if ( WEAPON_ATTACK && sys.getTime() > refireTime ) {
// let it transition back towards an idle animation for a bit
Base_EndReload();
playAnimBlended( ANIMCHANNEL_ALL, "idle", 0.1f );
sys.wait( 0.1f );
weaponState( "Idle", 4 );
}
if ( WEAPON_HIDE ) {
Base_EndReload();
weaponState( "Idle", 4 );
}
if ( WEAPON_LOWERWEAPON ) {
Base_EndReload();
weaponState( "Lower", 4 );
}
}
Base_EndReload();
}
void weapon_shotgun::Base_BeginReload() {
if ( ShouldRunGuis() ) {
float need = clipSize( 0 ) - ammoInClip( 0 );
if ( need > ( ammoAvailable( 0 ) - ammoInClip( 0 ) ) ) {
need = ammoAvailable( 0 ) - ammoInClip( 0 );
}
float reloadTime = ( getAnimLength( "reload" ) ) * need - need * 0.09f;
sys.setGUIFloat( GUI_GLOBALS_HANDLE, "gameHud.weaponReloadTime", reloadTime );
}
}