Script:Files:script/weapons/gpmg.script

From Mod Wiki
Revision as of 18:09, 2 November 2007 by Wizz (talk | contribs)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
/***********************************************************************

weapon_gpmg.script

***********************************************************************/

object weapon_gpmg : weapon_clip {
    void        preinit();

    void        FireCommon();
    void        UpdateBullets( float total );
    float        DoReload( boolean wasScoped );

    float        numFinalBullets;
    float        currentBulletCount;
}

void weapon_gpmg::preinit() {
    hasScope        = false;
    hasIronSights    = true;
    hasEndFireAnim    = false;

    numFinalBullets = getFloatKey( "num_final_bullets" );
    currentBulletCount = numFinalBullets;

    UpdateBullets( ammoInClip( 0 ) );
}

void weapon_gpmg::FireCommon() {
    PlayFireEffect();
    PlayFireSound();
    PlayBrassSound();
    PlayFireAnim();

    playingFireAnim = true;
    launchProjectiles( numProjectiles, 0, getCurrentSpread(), 0, 1, 1 );
    increaseSpread();

    UseAmmo( 0 );
    AmmoCheckClip( 0 );

    UpdateBullets( ammoInClip( 0 ) );
}

void weapon_gpmg::UpdateBullets( float total ) {
    if ( total > numFinalBullets ) {
        total = numFinalBullets;
    }

    if ( total == currentBulletCount ) {
        return;
    }

    float index;
    string surfaceName;
    float surfaceId;
    if ( total > currentBulletCount ) {    
        for ( index = currentBulletCount; index < total; index++ ) {
            surfaceName = getKey( "surface_bullet_" + index );
            surfaceId = getSurfaceId( surfaceName );
            if ( surfaceId != -1 ) {
                showSurface( surfaceId );
            } else {
            }
        }
    } else {
        for ( index = total; index < currentBulletCount; index++ ) {
            surfaceName = getKey( "surface_bullet_" + index );
            surfaceId = getSurfaceId( surfaceName );
            if ( surfaceId != -1 ) {
                hideSurface( surfaceId );
            } else {
            }
        }
    }

    currentBulletCount = total;
}

float weapon_gpmg::DoReload( boolean wasScoped ) {
    weaponReloading();
    playAnim( ANIMCHANNEL_ALL, "reload" );

    // Gordon: a small wait to get the bullets off screen
    sys.wait( 0.3f );

    UpdateBullets( ammoAvailable( 0 ) );

    while ( !animDone( ANIMCHANNEL_ALL, 4 ) ) {
        sys.waitFrame();

        if ( WEAPON_HIDE ) {
            Base_EndReload();
            weaponState( "Idle", 4 );
        }

        if ( WEAPON_LOWERWEAPON ) {
            Base_EndReload();
            weaponState( "Lower", 4 );
        }
    }

    addToClip( 0, clipSize( 0 ) );

    return 0.0f;
}