virtual void UpdateBehavior( float timeDelta )
	{
		IGameObject* pGameObject = 0;
		IObjectUtils::GetObject( &pGameObject, m_pBBCommon->enemy_collision_objectid );

		m_pBBCommon->time_to_next_attack -= timeDelta;
		if ( m_pBBCommon->time_to_next_attack <= 0.0f )
		{
			m_pBBCommon->time_to_next_attack += m_pGameObjectParams->attack_speed;

			if (pGameObject && pGameObject->GetBehavior())
			{
				float enemyHealth = pGameObject->GetBehavior()->ReceiveDamage( m_pGameObjectParams->attack_damage );
				if ( enemyHealth <= 0.0f && pGameObject->GetGameObjectType() == EGO_RBC )
				{
					ConsumeRBC();	
					pGameObject = 0;
				}
			}
		}

		if (!pGameObject || pGameObject->GetGameTeam() == EGT_INFECTION)
		{
			m_pBBCommon->enemy_collision_objectid.SetInvalid();
		}
	}
	void DoDestroyGameObject( ObjectId id )
	{
		IObjectFactorySystem* pFactory = PerModuleInterface::g_pSystemTable->pObjectFactorySystem;
		IObject* pObj = pFactory->GetObject(id);
		if (pObj)
		{
			IGameObject* pGameObject = 0;
			IObjectUtils::GetObject( &pGameObject, pObj->GetObjectId() );

			// Notify any listeners that object is about to be destroyed
			for (size_t i=0; i<m_Listeners.size(); ++i)
			{
				m_Listeners[i]->OnGameObjectAboutToDestroy(pGameObject);
			}

			m_GameObjects[pGameObject->GetGameObjectType()].erase(pGameObject);
			IObjectUtils::DestroyObjectAndEntity( pGameObject->GetEntityId() );
		}
	}