bool ETHActiveEntityHandler::RemoveFinishedTemporaryEntity(ETHRenderEntity* entity, ETHBucketManager& buckets) { if ((entity->IsTemporary() && entity->AreParticlesOver())) { const Vector2 v2Bucket = ETHBucketManager::GetBucket(entity->GetPositionXY(), buckets.GetBucketSize()); ETHBucketMap::iterator bucketIter = buckets.Find(v2Bucket); assert(bucketIter != buckets.GetLastBucket()); // Remove from main bucket map buckets.DeleteEntity(entity->GetID(), v2Bucket, false); #if defined(_DEBUG) || defined(DEBUG) ETH_STREAM_DECL(ss) << GS_L("Entity ") << entity->GetEntityName() << GS_L(" (ID#") << entity->GetID() << GS_L(") removed from dynamic entity list (particle effects over)"); m_provider->Log(ss.str(), Platform::Logger::INFO); #endif return true; } return false; }
void ETHTempEntityHandler::CheckTemporaryEntities(const Vector2& zAxisDir, ETHBucketManager& buckets, const unsigned long lastFrameElapsedTime) { #ifdef _DEBUG TestEntityLists(); #endif for (std::list<ETHRenderEntity*>::iterator iter = m_dynamicOrTempEntities.begin(); iter != m_dynamicOrTempEntities.end();) { ETHRenderEntity* pRenderEntity = *iter; pRenderEntity->Update(lastFrameElapsedTime, zAxisDir, buckets); // if the particle system is finished, erase it if ((pRenderEntity->IsTemporary() && pRenderEntity->AreParticlesOver())) { const Vector2 v2Bucket = ETHGlobal::GetBucket(pRenderEntity->GetPositionXY(), buckets.GetBucketSize()); ETHBucketMap::iterator bucketIter = buckets.Find(v2Bucket); if (bucketIter == buckets.GetLastBucket()) { iter++; continue; } // Remove from main bucket map buckets.DeleteEntity(pRenderEntity->GetID(), v2Bucket, false); #ifdef _DEBUG ETH_STREAM_DECL(ss) << GS_L("Entity ") << (*iter)->GetEntityName() << GS_L(" (ID#") << pRenderEntity->GetID() << GS_L(") removed from dynamic entity list (particle effects over)"); m_provider->Log(ss.str(), Platform::Logger::INFO); #endif (*iter)->Release(); iter = m_dynamicOrTempEntities.erase(iter); continue; } iter++; } }
Vector2 ETHEntity::GetCurrentBucket(const ETHBucketManager& buckets) const { return ETHBucketManager::GetBucket(GetPositionXY(), buckets.GetBucketSize()); }