bool HasContentsGrate( CBaseEntity *pEntity )
	{
		// FIXME: Move this into the GetModelContents() function in base entity

		// Find the contents based on the model type
		int nModelType = modelinfo->GetModelType( pEntity->GetModel() );
		if ( nModelType == mod_studio )
		{
			CBaseAnimating *pAnim = dynamic_cast<CBaseAnimating *>(pEntity);
			if ( pAnim != NULL )
			{
				CStudioHdr *pStudioHdr = pAnim->GetModelPtr();
				if ( pStudioHdr != NULL && (pStudioHdr->contents() & CONTENTS_GRATE) )
					return true;
			}
		}
		else if ( nModelType == mod_brush )
		{
			// Brushes poll their contents differently
			int contents = modelinfo->GetModelContents( pEntity->GetModelIndex() );
			if ( contents & CONTENTS_GRATE )
				return true;
		}

		return false;
	}
Esempio n. 2
0
//-----------------------------------------------------------------------------
// Zap!
//-----------------------------------------------------------------------------
void CRagdollBoogie::ZapThink()
{
    if (!GetMoveParent())
        return;

    CBaseAnimating *pRagdoll = GetMoveParent()->GetBaseAnimating();
    if (!pRagdoll)
        return;

    // Make electricity on the client
    CStudioHdr *pStudioHdr = pRagdoll->GetModelPtr();
    if (!pStudioHdr)
        return;

    mstudiohitboxset_t *set = pStudioHdr->pHitboxSet(pRagdoll->GetHitboxSet());

    if (set->numhitboxes == 0)
        return;

    if (m_nSuppressionCount == 0)
    {
        CEffectData	data;

        data.m_nEntIndex = GetMoveParent()->entindex();
        data.m_flMagnitude = 4;
        data.m_flScale = HasSpawnFlags(SF_RAGDOLL_BOOGIE_ELECTRICAL_NARROW_BEAM) ? 1.0f : 2.0f;

        DispatchEffect("TeslaHitboxes", data);
    }

    SetContextThink(&CRagdollBoogie::ZapThink, gpGlobals->curtime + random->RandomFloat(0.1f, 0.3f), s_pZapContext);
}