initial
This commit is contained in:
207
game/shared/cstrike15/weapon_molotov.cpp
Normal file
207
game/shared/cstrike15/weapon_molotov.cpp
Normal file
@@ -0,0 +1,207 @@
|
||||
//========= Copyright <20> 1996-2005, Valve Corporation, All rights reserved. ============//
|
||||
//
|
||||
// Purpose:
|
||||
//
|
||||
//=============================================================================//
|
||||
|
||||
#include "cbase.h"
|
||||
#include "weapon_csbase.h"
|
||||
#include "gamerules.h"
|
||||
#include "npcevent.h"
|
||||
#include "engine/IEngineSound.h"
|
||||
#include "weapon_molotov.h"
|
||||
|
||||
#ifdef CLIENT_DLL
|
||||
#include "c_cs_player.h"
|
||||
#else
|
||||
#include "cs_player.h"
|
||||
#include "items.h"
|
||||
#include "molotov_projectile.h"
|
||||
#include "Effects/inferno.h"
|
||||
#endif
|
||||
|
||||
// NOTE: This has to be the last file included!
|
||||
#include "tier0/memdbgon.h"
|
||||
|
||||
IMPLEMENT_NETWORKCLASS_ALIASED( MolotovGrenade, DT_MolotovGrenade )
|
||||
|
||||
BEGIN_NETWORK_TABLE( CMolotovGrenade, DT_MolotovGrenade )
|
||||
END_NETWORK_TABLE()
|
||||
|
||||
BEGIN_PREDICTION_DATA( CMolotovGrenade )
|
||||
END_PREDICTION_DATA()
|
||||
|
||||
LINK_ENTITY_TO_CLASS_ALIASED( weapon_molotov, MolotovGrenade );
|
||||
PRECACHE_REGISTER( weapon_molotov );
|
||||
|
||||
#if !defined( CLIENT_DLL )
|
||||
|
||||
BEGIN_DATADESC( CMolotovGrenade )
|
||||
END_DATADESC()
|
||||
|
||||
void CMolotovGrenade::EmitGrenade( Vector vecSrc, QAngle vecAngles, Vector vecVel, AngularImpulse angImpulse, CBasePlayer *pPlayer, const CCSWeaponInfo& weaponInfo )
|
||||
{
|
||||
// [mlowrance] were throwing the grenade, be sure to remove flame sound effect
|
||||
SetLoopingSoundPlaying( false );
|
||||
StopSound( "Molotov.IdleLoop" );
|
||||
//DevMsg( 1, "---------->Stopping Molotov.IdleLoop 2\n" );
|
||||
CMolotovProjectile::Create( vecSrc, vecAngles, vecVel, angImpulse, pPlayer, weaponInfo );
|
||||
}
|
||||
|
||||
void CMolotovGrenade::Precache( void )
|
||||
{
|
||||
BaseClass::Precache();
|
||||
|
||||
PrecacheScriptSound( "Molotov.IdleLoop" );
|
||||
}
|
||||
|
||||
#else // GAME_DLL
|
||||
|
||||
static int s_nMolotovFire;
|
||||
PRECACHE_REGISTER_BEGIN( GLOBAL, CMolotovGrenade )
|
||||
PRECACHE_INDEX( PARTICLE_SYSTEM, "weapon_molotov_held", s_nMolotovFire );
|
||||
PRECACHE_REGISTER_END()
|
||||
|
||||
void CMolotovGrenade::UpdateParticles( void )
|
||||
{
|
||||
// FIXME: This is bogus; we need to make the particle property have particle system types:
|
||||
// first person, third person, owner, and logic in the particle property to know whether
|
||||
// to render a given system given these rules and knowledge of what mode the owner is in
|
||||
C_CSPlayer *pPlayer = ToCSPlayer( GetOwner() );
|
||||
if ( !pPlayer )
|
||||
return;
|
||||
|
||||
int nRenderFlags = 0;
|
||||
|
||||
CWeaponCSBase *pCSWeapon = (CWeaponCSBase*)pPlayer->GetActiveWeapon();
|
||||
if ( !pCSWeapon )
|
||||
return;
|
||||
|
||||
int iWeaponId = pCSWeapon->GetCSWeaponID();
|
||||
|
||||
if ( iWeaponId == WEAPON_MOLOTOV )
|
||||
{
|
||||
bool bIsFirstOrThirdpersonMolotovVisible = pCSWeapon->IsWeaponVisible();
|
||||
|
||||
CBaseAnimating *pWeaponBaseAnimating = pCSWeapon->GetBaseAnimating();
|
||||
|
||||
CBaseWeaponWorldModel *pWeaponWorldModel = pCSWeapon->GetWeaponWorldModel();
|
||||
if ( pWeaponWorldModel && pWeaponWorldModel->ShouldDraw() )
|
||||
{
|
||||
pWeaponBaseAnimating = pWeaponWorldModel->GetBaseAnimating();
|
||||
bIsFirstOrThirdpersonMolotovVisible = true;
|
||||
}
|
||||
|
||||
if ( m_molotovParticleEffect.IsValid() )
|
||||
{
|
||||
// m_molotovParticleEffect->SetDormant( pPlayer->GetPlayerAnimState()->ShouldHideWeapon() ); // ShouldHideWeapon is a Terror Codebase function, not CStrike15
|
||||
m_molotovParticleEffect->SetDormant( !bIsFirstOrThirdpersonMolotovVisible ); // Is the weapon Hidden?
|
||||
}
|
||||
|
||||
if ( bIsFirstOrThirdpersonMolotovVisible )
|
||||
{
|
||||
if ( m_bPinPulled )
|
||||
{
|
||||
if ( !m_molotovParticleEffect() )
|
||||
{
|
||||
// TEST: [mlowrance] This is to test for attachment.
|
||||
int iAttachment = -1;
|
||||
if ( pWeaponBaseAnimating )
|
||||
iAttachment = pWeaponBaseAnimating->LookupAttachment( "Wick" );
|
||||
|
||||
if ( iAttachment >= 0 )
|
||||
{
|
||||
// FIXME: Precache 'Wick' attachment index
|
||||
m_molotovParticleEffect = pWeaponBaseAnimating->ParticleProp()->CreatePrecached( s_nMolotovFire, PATTACH_POINT_FOLLOW, iAttachment );
|
||||
EmitSound( "Molotov.IdleLoop" );
|
||||
SetLoopingSoundPlaying( true );
|
||||
|
||||
//DevMsg( 1, "++++++++++>Playing Molotov.IdleLoop 1\n" );
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
if ( m_molotovParticleEffect() )
|
||||
{
|
||||
if ( nRenderFlags != 3 )
|
||||
{
|
||||
m_molotovParticleEffect->SetDrawOnlyForSplitScreenUser( nRenderFlags - 1 );
|
||||
}
|
||||
else
|
||||
{
|
||||
m_molotovParticleEffect->SetDrawOnlyForSplitScreenUser( -1 );
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if ( m_molotovParticleEffect.IsValid() )
|
||||
{
|
||||
StopSound( "Molotov.IdleLoop" );
|
||||
//DevMsg( 1, "---------->Stopping Molotov.IdleLoop 1\n" );
|
||||
m_molotovParticleEffect->StopEmission( false, false );
|
||||
m_molotovParticleEffect->SetRemoveFlag();
|
||||
m_molotovParticleEffect = NULL;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
bool CMolotovGrenade::Simulate( void )
|
||||
{
|
||||
UpdateParticles();
|
||||
return BaseClass::Simulate();
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------------------------------------------
|
||||
void CMolotovGrenade::OnParticleEffectDeleted( CNewParticleEffect *pParticleEffect )
|
||||
{
|
||||
if ( m_molotovParticleEffect() == pParticleEffect )
|
||||
{
|
||||
m_molotovParticleEffect = NULL;
|
||||
}
|
||||
}
|
||||
|
||||
#endif // !CLIENT_DLL
|
||||
|
||||
void CMolotovGrenade::Drop(const Vector& vecVelocity)
|
||||
{
|
||||
CBaseCSGrenade::Drop(vecVelocity);
|
||||
StopSound( "Molotov.IdleLoop" );
|
||||
SetLoopingSoundPlaying( false );
|
||||
}
|
||||
|
||||
|
||||
IMPLEMENT_NETWORKCLASS_ALIASED( IncendiaryGrenade, DT_IncendiaryGrenade )
|
||||
|
||||
BEGIN_NETWORK_TABLE( CIncendiaryGrenade, DT_IncendiaryGrenade )
|
||||
END_NETWORK_TABLE()
|
||||
|
||||
//BEGIN_PREDICTION_DATA( CIncendiaryGrenade )
|
||||
//END_PREDICTION_DATA()
|
||||
|
||||
LINK_ENTITY_TO_CLASS_ALIASED( weapon_incgrenade, IncendiaryGrenade );
|
||||
PRECACHE_REGISTER( weapon_incgrenade );
|
||||
|
||||
#if !defined( CLIENT_DLL )
|
||||
|
||||
void CIncendiaryGrenade::EmitGrenade( Vector vecSrc, QAngle vecAngles, Vector vecVel, AngularImpulse angImpulse, CBasePlayer *pPlayer, const CCSWeaponInfo& weaponInfo )
|
||||
{
|
||||
// [mlowrance] were throwing the grenade, be sure to remove flame sound effect
|
||||
SetLoopingSoundPlaying( false );
|
||||
StopSound( "Molotov.IdleLoop" );
|
||||
//DevMsg( 1, "---------->Stopping Molotov.IdleLoop 2\n" );
|
||||
CMolotovProjectile::Create( vecSrc, vecAngles, vecVel, angImpulse, pPlayer, weaponInfo );
|
||||
}
|
||||
|
||||
void CIncendiaryGrenade::Precache( void )
|
||||
{
|
||||
BaseClass::Precache();
|
||||
|
||||
PrecacheScriptSound( "Molotov.IdleLoop" );
|
||||
}
|
||||
|
||||
#else // GAME_DLL
|
||||
|
||||
#endif // !CLIENT_DLL
|
||||
Reference in New Issue
Block a user