Lowering your weapon on sprint: Difference between revisions

From Valve Developer Community
Jump to navigation Jump to search
No edit summary
m (Nesciuse moved page Lowering your weapon on sprint/en to Lowering your weapon on sprint without leaving a redirect: Move en subpage to basepage)
 
(8 intermediate revisions by 4 users not shown)
Line 1: Line 1:
{{lang|title=Abaixando sua arma enquanto correndo}}
{{LanguageBar}}
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.
{{Underlinked|date=January 2024}}
{{Dead end|date=January 2024}}


{{note|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.}}
This article provides a basic implementation of weapon lowering while sprinting, and preventing weapon fire while doing so.


{{note|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'''}}
{{note|This will not work if your viewmodel doesn't have ACT_VM_IDLE_LOWERED animation declared somewhere in the .qc file.}}


== O Codigo ==
{{note|If your weapon_yourweaponname.cpp is overriding ItemPostFrame then you have to place BaseClass::ProcessAnimationEvents(); in the ItemPostFrame of that class but only if you aren't calling BaseClass::ItemPostFrame();. For example in the weapon_shotgun.cpp it has an override of ItemPostFrame which means that the lowering weapon code will not be called for this weapon unless you add a call to it! '''Remember to put the Basecombatweapon_Shared.h declarations under public or protected so that you can make use of these variables in classes which inherit basecombatweapon_shared, like the weapon_shotgun.cpp's ItemPostFrame. If you don't do this you will get undeclared identifier errors'''}}
 
== The Code ==
{{note|This has been tested with HL2MP, 2013 and Alien Swarm SDKS.}}
{{note|This has been tested with HL2MP, 2013 and Alien Swarm SDKS.}}


===BASECOMBATWEAPON_SHARED.CPP===
===BASECOMBATWEAPON_SHARED.CPP===


Aperta CRTL+F e procure para essa parte:
Hit CTRL+F and search for this code:
 
<source lang=cpp>
<source lang=cpp>


Line 18: Line 22:
</source>
</source>


Em seguida, copie e cole isto acima:
Then copy and paste this above it:


<source lang=cpp>
<source lang=cpp>
Line 56: Line 60:
</source>
</source>


Agora, para garantir que nosso código seja chamado, adicionamos ProcessAnimationEvents(); aqui:
Now to make sure our code gets called we add ProcessAnimationEvents(); here:


<source lang=cpp>
<source lang=cpp>
Line 62: Line 66:
void CBaseCombatWeapon::ItemPostFrame( void )
void CBaseCombatWeapon::ItemPostFrame( void )
{
{
    //Adicione isso abaixo da verificação do acessador pOwner.
      //Add this underneath the pOwner accessor check.
       ProcessAnimationEvents();
       ProcessAnimationEvents();
}
}
Line 70: Line 74:
===BASECOMBATWEAPON_SHARED.H===
===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''':
Add these declarations under public at line 211 below '''bool IsViewModelSequenceFinished( void ); // Returns if the viewmodel's current animation is finished''':
{{note|Tornamos ProcessAnimationEvents virtuais para que possamos substituí-lo em classes que herdam esta classe.}}
{{note|We make ProcessAnimationEvents virtual so that we can override it in classes which inherit this class.}}


<source lang=cpp>
<source lang=cpp>
Line 80: Line 84:
</source>
</source>


==Fim==
==Finish==


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|Finished Product]]


[[Category:Weapons programming:pt-br]]
{{Uncategorized|date=January 2024}}
[[Category:Tutorials:pt-br]]
[[Category:Weapons programming]]
[[Category:Programming:pt-br]]
[[Category:Tutorials]]

Latest revision as of 08:13, 12 July 2024

English (en)Português do Brasil (pt-br)Translate (Translate)
Underlinked - Logo.png
This article needs more Wikipedia icon links to other articles to help Wikipedia icon integrate it into the encyclopedia. Please help improve this article by adding links Wikipedia icon that are relevant to the context within the existing text.
January 2024
Dead End - Icon.png
This article has no Wikipedia icon links to other VDC articles. Please help improve this article by adding links Wikipedia icon that are relevant to the context within the existing text.
January 2024

This article provides a basic implementation of weapon lowering while sprinting, and preventing weapon fire while doing so.

Note.pngNote:This will not work if your viewmodel doesn't have ACT_VM_IDLE_LOWERED animation declared somewhere in the .qc file.
Note.pngNote:If your weapon_yourweaponname.cpp is overriding ItemPostFrame then you have to place BaseClass::ProcessAnimationEvents(); in the ItemPostFrame of that class but only if you aren't calling BaseClass::ItemPostFrame();. For example in the weapon_shotgun.cpp it has an override of ItemPostFrame which means that the lowering weapon code will not be called for this weapon unless you add a call to it! Remember to put the Basecombatweapon_Shared.h declarations under public or protected so that you can make use of these variables in classes which inherit basecombatweapon_shared, like the weapon_shotgun.cpp's ItemPostFrame. If you don't do this you will get undeclared identifier errors

The Code

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

BASECOMBATWEAPON_SHARED.CPP

Hit CTRL+F and search for this code:

void CBaseCombatWeapon::ItemPostFrame( void )

Then copy and paste this above it:

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;
		}
	}
}

Now to make sure our code gets called we add ProcessAnimationEvents(); here:

void CBaseCombatWeapon::ItemPostFrame( void )
{
      //Add this underneath the pOwner accessor check.
      ProcessAnimationEvents();
}

BASECOMBATWEAPON_SHARED.H

Add these declarations under public at line 211 below bool IsViewModelSequenceFinished( void ); // Returns if the viewmodel's current animation is finished:

Note.pngNote:We make ProcessAnimationEvents virtual so that we can override it in classes which inherit this class.
	virtual void            ProcessAnimationEvents(void);
	bool                    m_bWeaponIsLowered;

Finish

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!

Finished Product
Wikipedia - Letter.png
This article has not been added to any content Wikipedia icon categories. Please help out by Wikipedia icon adding categories.
January 2024