Cpp:Building A Simple Tile Engine:Part 6

From GPWiki

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