void FPxScene::InitLevel( ULevel* level )
{
	pxguard(FPxScene::InitLevel);
	PX_LOG( PX_NAME, TEXT("%s >> %s ::"), PX_LOGP );

	if( !level )
	{
		PX_ERR( PX_NAME, TEXT("%s !! %s :: No level provided"), PX_LOGP );
		return;
	}

	if( !mLevel )
	{
		CreateLevel(level);
	}
	else if( mLevel != level )
	{
		PX_LOG( PX_NAME, TEXT("%s !! %s :: Different level already loaded"), PX_LOGP );
		return;
	}

	// Add level actors
	for( INT i=0; i<level->Actors.Num(); i++ )
		if( level->Actors(i) )
			InitActor( level->Actors(i) );

	PX_LOG( PX_NAME, TEXT("%s << %s ::"), PX_LOGP );
	unguard;
}
	void DefenderManager::UpdateSpawning()
	{
		if(m_WaveTimer < 0.0f)
		{
			auto angleStep = 90.0f / (GSETTINGS->m_DefenderManagerSettings->m_SpotsPerQuarter + 1);
			for(int i=0; i<4; ++i)
			{
				auto angleStart = 90.0f*i;
				auto angleEnd = 90.0f*(i+1);
				for (int j = 0; j < GSETTINGS->m_DefenderManagerSettings->m_CountPerWavePerQuarter; ++j)
				{
					auto spawnAngle = angleStart + angleStep*(m_RandomSpots.GetNext()+1);
					auto spawnDir = Vector3::Create(Math::Cos(spawnAngle*Math::DegToRadFactor), Math::Sin(spawnAngle*Math::DegToRadFactor), 0.0f);
					auto pos = spawnDir * GSETTINGS->m_DefenderManagerSettings->m_Radius;
					auto range = GSETTINGS->m_DefenderManagerSettings->m_AngleRange;
					auto angle = Random::GetFloat(-range, range);
					auto dir = (-spawnDir).Rotate(Vector3::Up, angle * Math::DegToRadFactor);

					// Spawn actor
					auto newActor = static_cast<Defender*>(m_PreloadedActor->Copy());
					AddChild(newActor);
					newActor->SetPosition(pos);
					newActor->LookAt(dir);
					newActor->SwitchState(Defender::S_Hover);
					newActor->InitActor(GSETTINGS->m_DefenderSettings);
					m_lDefenders.push_back(newActor);
				}
			}

			m_WaveTimer = GSETTINGS->m_DefenderManagerSettings->m_WaveFrequency;
		}
		else
			m_WaveTimer -= g_fDeltaTime;

		if (m_SpawnTimer < 0.0f)
		{
			SwitchState(S_Defending);

			auto camera = EntityRenderer::Instance()->Get3DCamera();
			if (camera == FOLLOWCAM)
				FOLLOWCAM->OnDefendersSpawned();
		}
		else
			m_SpawnTimer -= g_fDeltaTime;
	}