Splash* SplashManager::Create(float x, float y, float scale) { for (std::list<Splash*>::iterator it = Splashes.begin(); it != Splashes.end(); ++it) { // Found a free explosion so re-use it if (!(*it)->isInUse()) { (*it)->m_X = x; (*it)->m_Y = y; (*it)->m_IsVisible = true; (*it)->setUsed(true); (*it)->SetAnimDuration(SPLASH_ANIM_DURATION); (*it)->SetAnimRepeat(1); return *it; } } // No explosion found so allocate a new one Game* game = (Game*)g_pSceneManager->Find("game"); Splash* splash = new Splash(); game->AddChild(splash); splash->m_X = x; splash->m_Y = y; splash->m_Angle = 270.0f; splash->m_IsVisible = true; splash->setUsed(true); splash->SetAnimDuration(SPLASH_ANIM_DURATION); splash->SetAnimRepeat(1); splash->m_AnchorX = 0.5f; splash->m_AnchorY = 0.5f; splash->m_ScaleX = (scale * 3) / splash->GetImage()->GetWidth(); splash->m_ScaleY = splash->m_ScaleX; return splash; }