|
11 | 11 | LINK_ENTITY_TO_CLASS( func_asw_fade, CFunc_ASW_Fade ); |
12 | 12 |
|
13 | 13 | BEGIN_DATADESC( CFunc_ASW_Fade ) |
14 | | - DEFINE_FIELD( m_bHasProxies, FIELD_BOOLEAN ), |
15 | | - DEFINE_KEYFIELD( m_nFadeOpacity, FIELD_CHARACTER, "fade_opacity" ), |
16 | | - DEFINE_INPUT( m_iCollideWithGrenades, FIELD_CHARACTER, "CollideWithGrenades" ), |
17 | | - DEFINE_INPUT( m_bCollideWithMarines, FIELD_BOOLEAN, "CollideWithMarines" ), |
18 | | - DEFINE_INPUT( m_bAllowFade, FIELD_BOOLEAN, "AllowFade" ), |
| 14 | +DEFINE_FIELD( m_bHasProxies, FIELD_BOOLEAN ), |
| 15 | +DEFINE_KEYFIELD( m_nFadeOpacity, FIELD_CHARACTER, "fade_opacity" ), |
| 16 | +DEFINE_KEYFIELD( m_iCollideWithGrenades, FIELD_CHARACTER, "CollideWithGrenades" ), |
| 17 | +DEFINE_KEYFIELD( m_bCollideWithMarines, FIELD_BOOLEAN, "CollideWithMarines" ), |
| 18 | +DEFINE_KEYFIELD( m_bAllowFade, FIELD_BOOLEAN, "AllowFade" ), |
| 19 | + |
| 20 | +DEFINE_INPUTFUNC( FIELD_INTEGER, "SetCollideWithGrenades", InputSetCollideWithGrenades ), |
| 21 | +DEFINE_INPUTFUNC( FIELD_BOOLEAN, "SetCollideWithMarines", InputSetCollideWithMarines ), |
19 | 22 | END_DATADESC() |
20 | 23 |
|
21 | 24 | IMPLEMENT_SERVERCLASS_ST( CFunc_ASW_Fade, DT_Func_ASW_Fade ) |
22 | | - SendPropInt( SENDINFO( m_nFadeOpacity ), 8, SPROP_UNSIGNED ), |
23 | | - SendPropInt( SENDINFO( m_iCollideWithGrenades ), 2, SPROP_UNSIGNED ), |
24 | | - SendPropBool( SENDINFO( m_bCollideWithMarines ) ), |
25 | | - SendPropBool( SENDINFO( m_bAllowFade ) ), |
26 | | - SendPropBool( SENDINFO( m_bHasProxies ) ), |
| 25 | +SendPropInt( SENDINFO( m_nFadeOpacity ), 8, SPROP_UNSIGNED ), |
| 26 | +SendPropInt( SENDINFO( m_iCollideWithGrenades ), 2, SPROP_UNSIGNED ), |
| 27 | +SendPropBool( SENDINFO( m_bCollideWithMarines ) ), |
| 28 | +SendPropBool( SENDINFO( m_bAllowFade ) ), |
| 29 | +SendPropBool( SENDINFO( m_bHasProxies ) ), |
27 | 30 | END_SEND_TABLE() |
28 | 31 |
|
29 | 32 | CFunc_ASW_Fade::CFunc_ASW_Fade() |
@@ -72,6 +75,44 @@ void CFunc_ASW_Fade::DisableCollisionsWithMarine( CBaseEntity *pMarine ) |
72 | 75 | } |
73 | 76 | } |
74 | 77 |
|
| 78 | +void CFunc_ASW_Fade::InputSetCollideWithGrenades( inputdata_t& inputdata ) |
| 79 | +{ |
| 80 | + m_iCollideWithGrenades = clamp( inputdata.value.Int(), 0, 2 ); |
| 81 | + |
| 82 | + static const char* pszExplosiveClasses[] = { |
| 83 | + "asw_mine", |
| 84 | + "npc_zombine", |
| 85 | + "asw_rocket", |
| 86 | + "grenadespit", |
| 87 | + "asw_missile_round", |
| 88 | + "asw_grenade_cluster", |
| 89 | + "asw_flare_projectile", |
| 90 | + "asw_laser_mine", |
| 91 | + "asw_grenade_vindicator", |
| 92 | + nullptr |
| 93 | + }; |
| 94 | + |
| 95 | + for ( const char** pszClass = pszExplosiveClasses; *pszClass; ++pszClass ) |
| 96 | + { |
| 97 | + CBaseEntity* pGrenade = NULL; |
| 98 | + while ( ( pGrenade = gEntList.FindEntityByClassname( pGrenade, *pszClass ) ) != NULL ) |
| 99 | + { |
| 100 | + DisableCollisionsWithGrenade( pGrenade ); |
| 101 | + } |
| 102 | + } |
| 103 | +} |
| 104 | + |
| 105 | +void CFunc_ASW_Fade::InputSetCollideWithMarines( inputdata_t& inputdata ) |
| 106 | +{ |
| 107 | + m_bCollideWithMarines = !!inputdata.value.Int(); |
| 108 | + |
| 109 | + CBaseEntity* pMarine = NULL; |
| 110 | + while ( ( pMarine = gEntList.FindEntityByClassname( pMarine, "asw_marine" ) ) != NULL ) |
| 111 | + { |
| 112 | + DisableCollisionsWithMarine( pMarine ); |
| 113 | + } |
| 114 | +} |
| 115 | + |
75 | 116 | bool CFunc_ASW_Fade::ShouldFade( CASW_Inhabitable_NPC *pNPC ) |
76 | 117 | { |
77 | 118 | if ( !m_bAllowFade || !pNPC || !pNPC->IsInhabited() || !pNPC->GetCommander() ) |
|
0 commit comments