83 lines
2 KiB
Text
83 lines
2 KiB
Text
|
/***********************************************************************
|
||
|
|
||
|
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 );
|
||
|
}
|
||
|
}
|