www.pudn.com > RCApp-src.zip > EntityManager.cpp
/* RedEye Project (http://members.ozemail.com.au/~ndmcevoy/) Copyright (C) 2003 Nick McEvoy This library is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public License for more details. You should have received a copy of the GNU Library General Public License along with this library; if not, write to the Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. ----------------------------------------------------------------- Commented for use with Doxygen (http://www.doxygen.org) ----------------------------------------------------------------- */ /*! \file EntityManager.cpp * \brief Entity manager. * * This file contains the entity manager. */ // GLUT includes #include// RedEye includes #include "EntityManager.h" #include "ModelManager.h" #include "Engine.h" #include "RCDefs.h" //! The one and only instance reEntityManager* reEntityManager::mpInstance = NULL; reEntityManager::reEntityManager() : mEntityList(false) { } reEntityManager::~reEntityManager() { DestroyLevel(); mpInstance = NULL; } reEntityManager* reEntityManager::GetInstance() { if (mpInstance == NULL) { mpInstance = new reEntityManager; } return mpInstance; } void reEntityManager::CreateLevel() { printf("reEntityManager::CreateLevel() - creating entities...\n"); // todo: read xml printf("reEntityManager::CreateLevel() - done\n"); } void reEntityManager::DestroyLevel() { printf("reEntityManager::DestroyLevel() - destroying entities...\n"); LISTPOSITION pos = mEntityList.GetHeadPosition(); while (pos) { reGameEntity* pGameEntity = mEntityList.GetNext(pos); reGetWorld()->removeKid(pGameEntity); ssgDeRefDelete(pGameEntity); } mEntityList.RemoveAll(); printf("reEntityManager::DestroyLevel() - done\n"); } void reEntityManager::Update(float fDeltaSec) { LISTPOSITION pos = mEntityList.GetHeadPosition(); while (pos) { reGameEntity* pGameEntity = mEntityList.GetNext(pos); pGameEntity->Update(fDeltaSec); } } void reEntityManager::SpaceCollide() { LISTPOSITION pos = mEntityList.GetHeadPosition(); while (pos) { reGameEntity* pGameEntity = mEntityList.GetNext(pos); pGameEntity->SpaceCollide(); } }