Ejemplo n.º 1
0
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;
}
Ejemplo n.º 2
0
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++;
	}
}