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