Example #1
0
CSceneManager::~CSceneManager()
{
	SceneMap::iterator itor = m_mapSceneList.begin();
	for(; itor != m_mapSceneList.end(); ++itor)
	{
		CScene *pScene = itor->second;
		if(pScene != NULL)
		{
			pScene->Uninit();
			delete pScene;
			pScene = NULL;
		}
	}
}
Example #2
0
//***************************************************************
//	全更新
//***************************************************************
void	CScene::UpdateAll(void)
{
	//ポインタ宣言
	CScene	*pScene;

	for(int	nCount = 0 ; nCount < MAX_LIST ; nCount++)
	{
		pScene = m_apTop[nCount];
		while(pScene)
		{
			//次のオブジェクトへのポインタを保存
			CScene	*pSceneNext = pScene->m_pNext;

			//更新
			pScene->Update();

			//次のオブジェクトを代入
			pScene = pSceneNext;
		}
	}

	for(int	nCount = 0 ; nCount < MAX_LIST ; nCount++)
	{
		pScene = m_apTop[nCount];
		while(pScene)
		{
			//次のオブジェクトへのポインタを保存
			CScene	*pSceneNext = pScene->m_pNext;

			//死亡フラグが成立している場合
			if(pScene->m_bDelete)
			{
				//リストの先頭の場合
				if(pScene == m_apTop[pScene->m_nPriority])
				{
					//先頭にリリース対象の次のアドレスを入れる
					m_apTop[pScene->m_nPriority] = pScene->m_pNext;

					//リストの残りが複数の時
					if(pScene->m_pNext != NULL)
					{
						pScene->m_pNext->m_pPrev = NULL;
					}
				}
				//リストの最後の場合
				else	if(pScene == m_apCur[pScene->m_nPriority])
				{
					m_apCur[pScene->m_nPriority] = pScene->m_pPrev;
					pScene->m_pPrev->m_pNext = NULL;
				}
				//それ以外
				else
				{
					pScene->m_pPrev->m_pNext = pScene->m_pNext;
					pScene->m_pNext->m_pPrev = pScene->m_pPrev;
				}

				//解放処理
				pScene->Uninit();
				delete	pScene;
			}

			//次のオブジェクトを代入
			pScene = pSceneNext;
		}
	}
}