Lowering your weapon on sprint: Difference between revisions

From Valve Developer Community
Jump to navigation Jump to search
No edit summary
No edit summary
Line 83: Line 83:


Now your weapon should be lowered when you hit the sprint button and you will not be able to shoot until you release the button!
Now your weapon should be lowered when you hit the sprint button and you will not be able to shoot until you release the button!
[[File:Sprint.gif|none| Olhe como fica! ]
 
[[File:Sprint.gif|none| Olhe como fica ]]


[[Category:Weapons programming:pt-br]]
[[Category:Weapons programming:pt-br]]
[[Category:Tutorials:pt-br]]
[[Category:Tutorials:pt-br]]
[[Category:Programming:pt-br]]
[[Category:Programming:pt-br]]

Revision as of 10:12, 16 January 2024

English (en)Português do Brasil (pt-br)Translate (Translate)

Este artigo fornece uma implementação básica de abaixamento de armas durante a corrida e prevenção de disparos de armas ao fazê-lo.

Note.pngNote:Isso não funcionará se seu modelo de visualização não tiver animação ACT_VM_IDLE_LOWERED declarada em algum lugar do arquivo .qc.
Note.pngNote:Se sua gun_yourweaponname.cpp estiver substituindo ItemPostFrame, você deverá colocar BaseClass::ProcessAnimationEvents(); no ItemPostFrame dessa classe, mas somente se você não estiver chamando BaseClass::ItemPostFrame();. Por exemplo, em arma_shotgun.cpp ele tem uma substituição de ItemPostFrame, o que significa que o código de redução da arma não será chamado para esta arma, a menos que você adicione uma chamada a ela! Lembre-se de colocar as declarações Basecombatweapon_Shared.h em públicas ou protegidas para que você possa fazer uso dessas variáveis ​​​​em classes que herdam basecombatweapon_shared, como o ItemPostFrame do Weapon_shotgun.cpp. Se você não fizer isso, receberá erros de identificador não declarados

O Codigo

Note.pngNote:This has been tested with HL2MP, 2013 and Alien Swarm SDKS.

BASECOMBATWEAPON_SHARED.CPP

Aperta CRTL+F e procure para essa parte:

void CBaseCombatWeapon::ItemPostFrame( void )

Em seguida, copie e cole isto acima:

void CBaseCombatWeapon::ProcessAnimationEvents(void)
{
	CBasePlayer *pOwner = ToBasePlayer( GetOwner() );
	if (!pOwner)
		return;

	if ( !m_bWeaponIsLowered && (pOwner->m_nButtons & IN_SPEED ) )
	{
		m_bWeaponIsLowered = true;
		SendWeaponAnim( ACT_VM_IDLE_LOWERED );
		m_flNextPrimaryAttack = gpGlobals->curtime + GetViewModelSequenceDuration();
	        m_flNextSecondaryAttack = m_flNextPrimaryAttack;
	}
	else if ( m_bWeaponIsLowered && !(pOwner->m_nButtons & IN_SPEED ) )
	{
		m_bWeaponIsLowered = false;
		SendWeaponAnim( ACT_VM_IDLE );
		m_flNextPrimaryAttack = gpGlobals->curtime + GetViewModelSequenceDuration();
 	        m_flNextSecondaryAttack = m_flNextPrimaryAttack;
	}

	if ( m_bWeaponIsLowered )
	{
		if ( gpGlobals->curtime > m_flNextPrimaryAttack )
		{
			SendWeaponAnim( ACT_VM_IDLE_LOWERED );
			m_flNextPrimaryAttack = gpGlobals->curtime + GetViewModelSequenceDuration();
			m_flNextSecondaryAttack = m_flNextPrimaryAttack;
		}
	}
}

Agora, para garantir que nosso código seja chamado, adicionamos ProcessAnimationEvents(); aqui:

void CBaseCombatWeapon::ItemPostFrame( void )
{
     //Adicione isso abaixo da verificação do acessador pOwner.
      ProcessAnimationEvents();
}

BASECOMBATWEAPON_SHARED.H

Adicione essas declarações em public na linha 211 abaixo bool IsViewModelSequenceFinished( void ); // Retorna se a animação atual do viewmodel foi finalizada:

Note.pngNote:Tornamos ProcessAnimationEvents virtuais para que possamos substituí-lo em classes que herdam esta classe.
	virtual void            ProcessAnimationEvents(void);
	bool                    m_bWeaponIsLowered;

Fim

Now your weapon should be lowered when you hit the sprint button and you will not be able to shoot until you release the button!

Olhe como fica