Cpp:Building A Simple Tile Engine:Part 6

From GPWiki

Files:GUITutorial_warn.gif The Game Programming Wiki has moved! Files:GUITutorial_warn.gif

The wiki is now hosted by GameDev.NET at wiki.gamedev.net. All gpwiki.org content has been moved to the new server.

However, the GPWiki forums are still active! Come say hello.

Part 6: Creating the unit manager


I haven't got the time to finish this article right now, so until I have here's a stub box for you to look at:

This page is far from complete, go ahead and write some more!
You can extend this page by editing it.

File: UnitManager.h

#ifndef UNITMANAGER_H
#define UNITMANAGER_H
 
#include <vector>
using std::vector;
 
#include "Interfaces.h"
#include "Unit.h"
 
/** Unit mananger */
class CUnitManager: public IBaseEntity
{
protected:
	vector< CUnit* > m_vpUnits;
	void AddUnit( CUnit* pUnit );
 
public:
	CUnitManager();
	virtual ~CUnitManager();
 
	virtual void			VThink		( const int& iElapsedTime );
	virtual void			VRender		( SDL_Surface* pDestSurface	);
 
	virtual bool			VLoad		( TiXmlElement* pXMLData );
	virtual TiXmlElement	VGetSaveData();
 
	CUnit* GetUnit( unsigned int iIndex );
};
 
#endif // UNITMANAGER_H 

File: UnitManager.cpp

#include "UnitManager.h"
#include "Unit.h"
 
CUnitManager::CUnitManager()
{
	
}
 
CUnitManager::~CUnitManager()
{
	while( m_vpUnits.size() > 0 ) 
	{
		if ( m_vpUnits.back() != 0 ) {
			delete m_vpUnits.back();
		}
		m_vpUnits.pop_back();
	}
}
 
bool CUnitManager::VLoad( TiXmlElement* pXMLData )
{
	TiXmlNode* pXMLUnit = 0;
	CUnit* pUnit;
	bool bLoadOK;
	while( pXMLUnit = pXMLData->IterateChildren( pXMLUnit ) ) {
		pUnit = new CUnit;
		bLoadOK = pUnit->VLoad( pXMLUnit->ToElement() );
		if ( bLoadOK == false ) {
			return false;
		}
		AddUnit( pUnit );
	}
	
	return true;
}
 
TiXmlElement CUnitManager::VGetSaveData()
{
	TiXmlElement pXMLUnits( "units" );
 
	for ( unsigned int i = 0; i < m_vpUnits.size(); ++i ) {
		pXMLUnits.InsertEndChild( m_vpUnits[ i ]->VGetSaveData() );
	}
 
    return pXMLUnits;
}
 
void CUnitManager::AddUnit( CUnit* pUnit )
{
	m_vpUnits.push_back( pUnit );
}
 
CUnit* CUnitManager::GetUnit( unsigned int iIndex )
{
	if ( iIndex < 0 || iIndex > m_vpUnits.size() )
		return 0;
 
	return m_vpUnits[ iIndex ];
}
 
void CUnitManager::VThink( const int& iElapsedTime )
{
	for ( unsigned int i = 0; i < m_vpUnits.size(); ++i )
	{
		m_vpUnits[ i ]->VThink(  iElapsedTime );
	}
}
 
void CUnitManager::VRender( SDL_Surface* pDestSurface )
{
	for ( unsigned int i = 0; i < m_vpUnits.size(); ++i )
	{
		m_vpUnits[ i ]->VRender( pDestSurface );
	}
}

Proceed to Part 7: Creating the game manager


Table of Content - Part 1 - Part 2 - Part 3 - Part 4 - Part 5 - Part 6 - Part 7 - Part 8 - Part X