remove unit inheritence, twas a silly idea, and remove usage of shared ptr and unique ptr not needed anymore
This commit is contained in:
		
							parent
							
								
									0700a13129
								
							
						
					
					
						commit
						0c7721cb17
					
				
					 8 changed files with 101 additions and 142 deletions
				
			
		| 
						 | 
				
			
			@ -1,7 +1,6 @@
 | 
			
		|||
#include "unit.h"
 | 
			
		||||
 | 
			
		||||
// Unit types
 | 
			
		||||
#include "unitv.h"
 | 
			
		||||
#include <map> // for std::map
 | 
			
		||||
 | 
			
		||||
namespace
 | 
			
		||||
{	
 | 
			
		||||
| 
						 | 
				
			
			@ -11,37 +10,83 @@ namespace
 | 
			
		|||
		static unit_id_t p = 0;
 | 
			
		||||
		return p++;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// Map of visual representation of unit V
 | 
			
		||||
	typedef std::map< dir_t, unitVis_c > dir_to_vis_map;
 | 
			
		||||
	
 | 
			
		||||
	// Helper function to get the vis map during static init
 | 
			
		||||
	const dir_to_vis_map& get_vis_map_V()
 | 
			
		||||
	{
 | 
			
		||||
		static const dir_to_vis_map sk_visMap =
 | 
			
		||||
		{
 | 
			
		||||
			{dir_t::N,'^'},
 | 
			
		||||
			{dir_t::E,'>'},
 | 
			
		||||
			{dir_t::S,'v'},
 | 
			
		||||
			{dir_t::W,'<'},
 | 
			
		||||
		};
 | 
			
		||||
 | 
			
		||||
		return sk_visMap;
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Plain constructor
 | 
			
		||||
CUnit::CUnit()
 | 
			
		||||
: unit_id ( get_unique_unit_id() )
 | 
			
		||||
, team_id ( team_id_invalid )
 | 
			
		||||
: unit_id 	( get_unique_unit_id() )
 | 
			
		||||
, team_id 	( team_id_invalid )
 | 
			
		||||
, player_id ( player_id_invalid )
 | 
			
		||||
, unit_vis ( unitVis_invalid )
 | 
			
		||||
, unit_vis 	( unitVis_invalid )
 | 
			
		||||
, dir 		( dir_t::S )
 | 
			
		||||
{
 | 
			
		||||
 | 
			
		||||
	updateMyVisual();
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
std::unique_ptr<CUnit> CUnit::getUnitFromVis( unitVis_c vis )
 | 
			
		||||
// Move constructor
 | 
			
		||||
CUnit::CUnit(CUnit&& unit)
 | 
			
		||||
: unit_id 	( std::move(unit.unit_id) )
 | 
			
		||||
, team_id 	( std::move(unit.team_id) )
 | 
			
		||||
, player_id ( std::move(unit.player_id) )
 | 
			
		||||
, unit_vis 	( std::move(unit.unit_vis) )
 | 
			
		||||
, dir 		( std::move(unit.dir) )
 | 
			
		||||
{
 | 
			
		||||
	switch( vis )
 | 
			
		||||
	updateMyVisual();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
CUnit&& CUnit::getUnitFromVis( unitVis_c vis )
 | 
			
		||||
{
 | 
			
		||||
	CUnit unit;
 | 
			
		||||
	unit.setFromVisual(vis);
 | 
			
		||||
	return std::move(unit);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Update the visual representation of the unit
 | 
			
		||||
unitVis_c CUnit::updateMyVisual()
 | 
			
		||||
{
 | 
			
		||||
	// Start at invalid
 | 
			
		||||
	setVisual(unitVis_invalid);
 | 
			
		||||
 | 
			
		||||
	dir_to_vis_map::const_iterator it = get_vis_map_V().find(dir);
 | 
			
		||||
 | 
			
		||||
	// If found set to new vis
 | 
			
		||||
	if( it != get_vis_map_V().end() )
 | 
			
		||||
		setVisual(it->second);
 | 
			
		||||
 | 
			
		||||
	return getVisual();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
bool CUnit::setFromVisual( const unitVis_c& vis )
 | 
			
		||||
{
 | 
			
		||||
	dir_to_vis_map::const_iterator it;
 | 
			
		||||
 | 
			
		||||
	for( it = get_vis_map_V().begin(); it != get_vis_map_V().end(); it++ )
 | 
			
		||||
	{
 | 
			
		||||
		// Match with any image for a V
 | 
			
		||||
		case '^':
 | 
			
		||||
		case '>':
 | 
			
		||||
		case 'v':
 | 
			
		||||
		case '<':
 | 
			
		||||
		if( it->second == vis )
 | 
			
		||||
		{
 | 
			
		||||
			// Create a V
 | 
			
		||||
			std::unique_ptr<CUnit> p = std::unique_ptr<CUnit>(new CUnitV);
 | 
			
		||||
			if( (bool)p && p->setFromVisual(vis) )
 | 
			
		||||
			{
 | 
			
		||||
				return std::move(p);
 | 
			
		||||
			}
 | 
			
		||||
			break;
 | 
			
		||||
			dir == it->first;
 | 
			
		||||
			updateMyVisual();
 | 
			
		||||
			return true;
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// No unit found, return nullptr
 | 
			
		||||
	return std::move(std::unique_ptr<CUnit>(nullptr));
 | 
			
		||||
	// No matching direction to visual
 | 
			
		||||
	return false;
 | 
			
		||||
}
 | 
			
		||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue