Exemple #1
0
//-----------------------------------------------------------------------------
// Purpose:
// Input  : *pEvent -
//			*pOperator -
//-----------------------------------------------------------------------------
void CWeaponFrag::Operator_HandleAnimEvent( animevent_t *pEvent, CBaseCombatCharacter *pOperator )
{
    CBasePlayer *pOwner = ToBasePlayer( GetOwner() );
    bool fThrewGrenade = false;

    switch( pEvent->event )
    {
    case EVENT_WEAPON_SEQUENCE_FINISHED:
        m_fDrawbackFinished = true;
        break;

    case EVENT_WEAPON_THROW:
        ThrowGrenade( pOwner );
        DecrementAmmo( pOwner );
        fThrewGrenade = true;
        break;

    case EVENT_WEAPON_THROW2:
        RollGrenade( pOwner );
        DecrementAmmo( pOwner );
        fThrewGrenade = true;
        break;

    case EVENT_WEAPON_THROW3:
        LobGrenade( pOwner );
        DecrementAmmo( pOwner );
        fThrewGrenade = true;
        break;

    default:
        BaseClass::Operator_HandleAnimEvent( pEvent, pOperator );
        break;
    }

#define RETHROW_DELAY	0.5
    if( fThrewGrenade )
    {
        m_flNextPrimaryAttack	= gpGlobals->curtime + RETHROW_DELAY;
        m_flNextSecondaryAttack	= gpGlobals->curtime + RETHROW_DELAY;
        m_flTimeWeaponIdle = FLT_MAX; //NOTE: This is set once the animation has finished up!
    }
}
//-----------------------------------------------------------------------------
// Purpose: 
//-----------------------------------------------------------------------------
void CBaseSDKGrenade::ItemPostFrame()
{
	CSDKPlayer *pPlayer = GetPlayerOwner();
	if ( !pPlayer )
		return;

	CBaseViewModel *vm = pPlayer->GetViewModel( m_nViewModelIndex );
	if ( !vm )
		return;

	// If they let go of the fire button, they want to throw the grenade.
	if ( m_bPinPulled && !(pPlayer->m_nButtons & IN_ATTACK) ) 
	{
		pPlayer->DoAnimationEvent( PLAYERANIMEVENT_THROW_GRENADE );

		StartGrenadeThrow();
		
		DecrementAmmo( pPlayer );
	
		m_bPinPulled = false;
		SendWeaponAnim( ACT_VM_THROW );	
		SetWeaponIdleTime( gpGlobals->curtime + SequenceDuration() );
	}
	else if ((m_fThrowTime > 0) && (m_fThrowTime < gpGlobals->curtime))
	{
		ThrowGrenade();
	}
	else if( m_bRedraw )
	{
		// Has the throw animation finished playing
		if( m_flTimeWeaponIdle < gpGlobals->curtime )
		{
#ifdef GAME_DLL
			// if we're officially out of grenades, ditch this weapon
			if( pPlayer->GetAmmoCount(m_iPrimaryAmmoType) <= 0 )
			{
				pPlayer->Weapon_Drop( this, NULL, NULL );
				UTIL_Remove(this);
			}
			else
			{
				pPlayer->SwitchToNextBestWeapon( this );
			}
#endif
			return;	//don't animate this grenade any more!
		}	
	}
	else if( !m_bRedraw )
	{
		BaseClass::ItemPostFrame();
	}
}
	//-----------------------------------------------------------------------------
	// Purpose: 
	// Input  : *pEvent - 
	//			*pOperator - 
	//-----------------------------------------------------------------------------
	void CBaseCSGrenade::Operator_HandleAnimEvent( animevent_t *pEvent, CBaseCombatCharacter *pOperator )
	{
		CBasePlayer *pOwner = ToBasePlayer( GetOwner() );
		switch( pEvent->event )
		{
			case EVENT_WEAPON_THROW:
				ThrowGrenade();
				DecrementAmmo( pOwner );
				break;

			default:
				BaseClass::Operator_HandleAnimEvent( pEvent, pOperator );
				break;
		}
	}
void CWeaponGrenade::PrimaryAttackThrow( void ) {
    CBaseCombatCharacter *pOwner  = GetOwner();
    if ( pOwner == NULL )
        return;

    CBasePlayer *pPlayer = ToBasePlayer( GetOwner() );;
    if ( !pPlayer )
        return;

    SendWeaponAnim( ACT_VM_THROW );
    m_flNextPrimaryAttack = gpGlobals->curtime + SequenceDuration();

    ThrowGrenade(pPlayer);
    DecrementAmmo(pOwner);

    m_bAttackPaused = false;

    if(!HasPrimaryAmmo())
        pPlayer->SwitchToNextBestWeapon( this );
}
Exemple #5
0
//-----------------------------------------------------------------------------
// Purpose:
//-----------------------------------------------------------------------------
void CWeaponFrag::ItemPostFrame( void )
{
    if( m_fDrawbackFinished )
    {
        CBasePlayer *pOwner = ToBasePlayer( GetOwner() );

        if (pOwner)
        {
            switch( m_AttackPaused )
            {
            case GRENADE_PAUSED_PRIMARY:
                if( !(pOwner->m_nButtons & IN_ATTACK) )
                {
                    SendWeaponAnim( ACT_VM_THROW );
                    ToHL2MPPlayer(pOwner)->DoAnimationEvent( PLAYERANIMEVENT_ATTACK_PRIMARY );

                    //Tony; fire the sequence
                    m_fDrawbackFinished = false;
                }
                //We are still holding attack...
                else
                {
                    if ( flExplodeTime <= gpGlobals->curtime )
                    {
                        //DHL: Skip the animations and go boom immediately if we've been holding it too long
                        ThrowGrenade( pOwner, true ); //Make it invisible as to maintain the illusion of going off in the player's hand
                        DecrementAmmo( pOwner );

                        //Make absolutely certain that if the grenade goes off in a player's hand, they die.
#ifndef CLIENT_DLL
                        CTakeDamageInfo GrenadeInfo( this, pOwner, 100.0f, DMG_BURN, 0 );
                        pOwner->TakeDamage( GrenadeInfo );
#endif

                    }
                }
                break;

            case GRENADE_PAUSED_SECONDARY:
                if( !(pOwner->m_nButtons & IN_ATTACK2) )
                {
                    //See if we're ducking
                    if ( pOwner->m_nButtons & IN_DUCK )
                    {
                        //Send the weapon animation
                        SendWeaponAnim( ACT_VM_SECONDARYATTACK );
                    }
                    else
                    {
                        //Send the weapon animation
                        SendWeaponAnim( ACT_VM_HAULBACK );
                    }
                    //Tony; the grenade really should have a secondary anim. but it doesn't on the player.
                    ToHL2MPPlayer(pOwner)->DoAnimationEvent( PLAYERANIMEVENT_ATTACK_PRIMARY );

                    m_fDrawbackFinished = false;
                }
                break;

            default:
                break;
            }
        }
    }

    BaseClass::ItemPostFrame();

    if ( m_bRedraw )
    {
        if ( IsViewModelSequenceFinished() )
        {
            Reload();
        }
    }
}
//-----------------------------------------------------------------------------
// Purpose: 
//-----------------------------------------------------------------------------
void CBaseSDKGrenade::ItemPostFrame()
{
	CSDKPlayer *pPlayer = GetPlayerOwner();
	if ( !pPlayer )
		return;

	CBaseViewModel *vm = pPlayer->GetViewModel( m_nViewModelIndex );
	if ( !vm )
		return;

	// If they let go of the fire button, they want to throw the grenade.
	if ( m_bPinPulled && !(pPlayer->m_nButtons & IN_ATTACK) ) 
	{
		pPlayer->DoAnimationEvent( PLAYERANIMEVENT_ATTACK_PRIMARY );
//		if (m_bSecondary)
//			DropGrenade();
//		else
			ThrowGrenade();

		if (!pPlayer->IsStyleSkillActive(SKILL_TROLL))
			DecrementAmmo( pPlayer );

		m_bPinPulled = false;
		SendWeaponAnim( ACT_VM_THROW );	
		SetWeaponIdleTime( GetCurrentTime() + SequenceDuration() );

		m_bPinPulled = false;
//		m_bSecondary = false;
	}
	else if( m_bRedraw )
	{
		// Has the throw animation finished playing
		if( m_flTimeWeaponIdle < GetCurrentTime() )
		{
			// if we're officially out of grenades, ditch this weapon
			if( pPlayer->GetAmmoCount(m_iPrimaryAmmoType) <= 0 )
			{
#ifdef GAME_DLL
				pPlayer->Weapon_Drop( this, NULL, NULL );
				UTIL_Remove(this);
#endif
				pPlayer->SwitchToNextBestWeapon( NULL ); //Tony; now switch! cuz we rans outs!
			}
			else if (pPlayer->IsStyleSkillActive(SKILL_TROLL))
			{
				m_bRedraw = false;
				m_flNextPrimaryAttack = GetCurrentTime() + 1.2;
				m_flNextSecondaryAttack = GetCurrentTime() + 1.2;
				SendWeaponAnim( GetDeployActivity() );	
			}
			else
			{
				m_bRedraw = false;

				// Only switch to the next best weapon if the next best weapon is not brawl.
				CBaseCombatWeapon *pNewWeapon = g_pGameRules->GetNextBestWeapon(pPlayer, this);
				CWeaponSDKBase* pSDKNewWeapon = dynamic_cast<CWeaponSDKBase*>(pNewWeapon);

				bool bSwitch = true;

				if (!pSDKNewWeapon)
					bSwitch = false;

				// If I'm going to switch to brawl but I have more grenades, don't switch.
				else if (pSDKNewWeapon && pSDKNewWeapon->GetWeaponID() == SDK_WEAPON_BRAWL && pPlayer->GetAmmoCount(m_iPrimaryAmmoType) > 0)
					bSwitch = false;

				if (bSwitch)
					pPlayer->SwitchToNextBestWeapon( this );
			}
			return;	//don't animate this grenade any more!
		}	
	}
	else if( !m_bRedraw )
	{
		BaseClass::ItemPostFrame();
	}
}
void CWeapon_Manhack::Operator_HandleAnimEvent( animevent_t *pEvent, CBaseCombatCharacter *pOperator )
{
	CBasePlayer *pOwner = ToBasePlayer( GetOwner() );

	switch( pEvent->event )
	{
		case EVENT_WEAPON_SEQUENCE_FINISHED:
			m_bIsDrawing = false;
			m_bIsDoingShit = false;
			m_bIsDoingShitToo = false;

			if (m_bRedraw)
			{
				m_bRedraw=false;
				Deploy();
			}
			break;

		case EVENT_WEAPON_THROW:
			if (CPropVehicleManhack::GetManhackVehicle()!=NULL)
			{
				if (m_bHasFreeSlot)	
				{
					if (CreateControllableNPCManhack( pOwner))
					{
						DecrementAmmo( pOwner );
						EnableManhackSubModel(false);
						m_bRedraw=true;

						CBasePlayer *pPlayer = ToBasePlayer( pOwner );
						if ( pPlayer != NULL && m_iManhackHintTimeShown < 2)
						{
							if (GlobalEntity_GetState("manhacks_not_controllable") == GLOBAL_ON )
								UTIL_HudHintText( pPlayer, "#HLSS_Hint_ManhackSend" );
							else
								UTIL_HudHintText( pPlayer, "#HLSS_Hint_ManhackControl" );

							m_iManhackHintTimeShown++;
						}
//						fSpawnedManhack = true;
					}
				}
			}
			else if (CreateControllableVehicleManhack( pOwner))
			{
				DecrementAmmo( pOwner );	
				EnableManhackSubModel(false);	
				m_bRedraw=true;
//				fSpawnedManhack = true;

				//CBasePlayer *pPlayer = ToBasePlayer( pOwner );
				if ( pOwner != NULL && m_iManhackHintTimeShown <2)
				{
					if (GlobalEntity_GetState("manhacks_not_controllable") == GLOBAL_ON )
						UTIL_HudHintText( pOwner, "#HLSS_Hint_ManhackSend" );
					else
						UTIL_HudHintText( pOwner, "#HLSS_Hint_ManhackControl" );

					m_iManhackHintTimeShown++;
				}
			}

			m_bToggleCallback = true;

			if (!m_bHoldingSpawn)
			{
				m_bSpawnSomeMore = false;
				m_bIsDoingController = true;
			}
			else
			{
				m_bSpawnSomeMore = true;
				m_bIsDoingController = false;
				m_bRedraw = true;
			}

			break;
		case EVENT_WEAPON_THROW2:
			if ( pOwner != NULL && pOwner->GetFlags() & FL_ONGROUND )
			{
				if (CPropVehicleManhack::GetManhackVehicle() != NULL) 
				{
					if (GlobalEntity_GetState("manhacks_not_controllable") == GLOBAL_OFF)
					{
						m_bShouldShowPanel = false;
						DriveControllableManhack();
					}
					else
					{
						if (m_bToggleCallback)
						{
							TellManhacksToGoThere();
							m_bToggleCallback = false;
						}
						else
						{
							CallManhacksBack();
							m_bToggleCallback = true;
						}

					}
				}
				else
				{
					//TERO: Lets do an error sound
				}
			}
			break;
		case EVENT_WEAPON_THROW3:
			if (m_bToggleCallback)
			{
				TellManhacksToGoThere();
				m_bToggleCallback = false;
			}
			else
			{
				CallManhacksBack();
				m_bToggleCallback = true;
			}
			break;
		default:
			BaseClass::Operator_HandleAnimEvent( pEvent, pOperator );
			break;
	}

#define RETHROW_DELAY	0.5
/*	if( fSpawnedManhack )
	{
		m_flNextPrimaryAttack	= gpGlobals->curtime + RETHROW_DELAY;
		m_flNextSecondaryAttack	= gpGlobals->curtime + RETHROW_DELAY;
		m_flTimeWeaponIdle = FLT_MAX; //NOTE: This is set once the animation has finished up!

	}
	*/
}