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