Add new creation method from a visual representation
This commit is contained in:
parent
8ade68101b
commit
7f639a6bf4
6 changed files with 72 additions and 16 deletions
|
@ -15,6 +15,7 @@ set( SOURCES
|
|||
game.cpp
|
||||
board.cpp
|
||||
unitv.cpp
|
||||
unit.cpp
|
||||
)
|
||||
|
||||
add_library( game ${SOURCES} )
|
26
game/unit.cpp
Normal file
26
game/unit.cpp
Normal file
|
@ -0,0 +1,26 @@
|
|||
#include "unit.h"
|
||||
|
||||
#include "unitv.h"
|
||||
|
||||
#include <memory>
|
||||
|
||||
std::unique_ptr<CUnit> CUnit::getUnitFromVis( unitVis_c vis )
|
||||
{
|
||||
switch( vis )
|
||||
{
|
||||
case '^':
|
||||
case '>':
|
||||
case 'v':
|
||||
case '<':
|
||||
{
|
||||
std::unique_ptr<CUnit> p = std::unique_ptr<CUnit>(new CUnitV);
|
||||
if( (bool)p && p->setFromVisual(vis) )
|
||||
{
|
||||
return std::move(p);
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
return std::move(std::unique_ptr<CUnit>(nullptr));
|
||||
}
|
|
@ -2,6 +2,7 @@
|
|||
#define _UNIT_H_
|
||||
|
||||
#include <string>
|
||||
#include <memory>
|
||||
|
||||
#include "vector2.h"
|
||||
|
||||
|
@ -15,11 +16,15 @@ typedef char unitVis_c;
|
|||
class CUnit
|
||||
{
|
||||
public:
|
||||
|
||||
CUnit() = default;
|
||||
virtual ~CUnit() = default;
|
||||
|
||||
virtual unitVis_c getVisual() const = 0;
|
||||
virtual bool setFromVisual(unitVis_c& vis) = 0;
|
||||
|
||||
static std::unique_ptr<CUnit> getUnitFromVis( unitVis_c vis );
|
||||
|
||||
protected:
|
||||
CUnit() = default;
|
||||
|
||||
private:
|
||||
|
||||
|
|
|
@ -8,17 +8,18 @@ CUnitV::CUnitV()
|
|||
|
||||
}
|
||||
|
||||
unitVis_c CUnitV::getVisual() const
|
||||
|
||||
// Map of visual representation of unitv
|
||||
static const std::map< dir_t, unitVis_c > sk_visMap =
|
||||
{
|
||||
// Map of visual representation of unitv
|
||||
static const std::map< dir_t, unitVis_c > sk_visMap =
|
||||
{
|
||||
{dir_t::N,'^'},
|
||||
{dir_t::E,'>'},
|
||||
{dir_t::S,'v'},
|
||||
{dir_t::W,'<'},
|
||||
};
|
||||
};
|
||||
|
||||
unitVis_c CUnitV::getVisual() const
|
||||
{
|
||||
std::map< dir_t, char >::const_iterator it = sk_visMap.find(dir);
|
||||
|
||||
if( it == sk_visMap.end() )
|
||||
|
@ -28,3 +29,20 @@ unitVis_c CUnitV::getVisual() const
|
|||
|
||||
return it->second;
|
||||
}
|
||||
|
||||
bool CUnitV::setFromVisual( unitVis_c& vis )
|
||||
{
|
||||
std::map< dir_t, char >::const_iterator it;
|
||||
|
||||
for( it = sk_visMap.begin(); it != sk_visMap.end(); it++ )
|
||||
{
|
||||
if( it->second == vis )
|
||||
{
|
||||
dir == it->first;
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
// No matching direction to visual
|
||||
return false;
|
||||
}
|
|
@ -11,7 +11,8 @@ public:
|
|||
CUnitV();
|
||||
virtual ~CUnitV() = default;
|
||||
|
||||
virtual unitVis_c getVisual() const;
|
||||
virtual unitVis_c getVisual() const override;
|
||||
virtual bool setFromVisual( unitVis_c& vis ) override;
|
||||
|
||||
private:
|
||||
|
||||
|
|
|
@ -43,8 +43,13 @@ int main()
|
|||
{
|
||||
tests::test_CBoard();
|
||||
|
||||
std::cout<<"Testing units"<<std::endl;
|
||||
{
|
||||
CUnitV myV;
|
||||
|
||||
std::cout<<myV.getVisual()<<std::endl;
|
||||
}
|
||||
|
||||
{
|
||||
std::unique_ptr<CUnit> myV = CUnit::getUnitFromVis('v');
|
||||
std::cout<<myV->getVisual()<<std::endl;
|
||||
}
|
||||
};
|
Loading…
Add table
Reference in a new issue