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
|
game.cpp
|
||||||
board.cpp
|
board.cpp
|
||||||
unitv.cpp
|
unitv.cpp
|
||||||
|
unit.cpp
|
||||||
)
|
)
|
||||||
|
|
||||||
add_library( game ${SOURCES} )
|
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));
|
||||||
|
}
|
11
game/unit.h
11
game/unit.h
|
@ -2,6 +2,7 @@
|
||||||
#define _UNIT_H_
|
#define _UNIT_H_
|
||||||
|
|
||||||
#include <string>
|
#include <string>
|
||||||
|
#include <memory>
|
||||||
|
|
||||||
#include "vector2.h"
|
#include "vector2.h"
|
||||||
|
|
||||||
|
@ -15,11 +16,15 @@ typedef char unitVis_c;
|
||||||
class CUnit
|
class CUnit
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
|
|
||||||
CUnit() = default;
|
|
||||||
virtual ~CUnit() = default;
|
virtual ~CUnit() = default;
|
||||||
|
|
||||||
virtual unitVis_c getVisual() const = 0;
|
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:
|
private:
|
||||||
|
|
||||||
|
|
|
@ -8,17 +8,18 @@ CUnitV::CUnitV()
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// 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
|
unitVis_c CUnitV::getVisual() const
|
||||||
{
|
{
|
||||||
// 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,'<'},
|
|
||||||
};
|
|
||||||
|
|
||||||
std::map< dir_t, char >::const_iterator it = sk_visMap.find(dir);
|
std::map< dir_t, char >::const_iterator it = sk_visMap.find(dir);
|
||||||
|
|
||||||
if( it == sk_visMap.end() )
|
if( it == sk_visMap.end() )
|
||||||
|
@ -27,4 +28,21 @@ unitVis_c CUnitV::getVisual() const
|
||||||
}
|
}
|
||||||
|
|
||||||
return it->second;
|
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();
|
CUnitV();
|
||||||
virtual ~CUnitV() = default;
|
virtual ~CUnitV() = default;
|
||||||
|
|
||||||
virtual unitVis_c getVisual() const;
|
virtual unitVis_c getVisual() const override;
|
||||||
|
virtual bool setFromVisual( unitVis_c& vis ) override;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
|
||||||
|
|
|
@ -43,8 +43,13 @@ int main()
|
||||||
{
|
{
|
||||||
tests::test_CBoard();
|
tests::test_CBoard();
|
||||||
|
|
||||||
std::cout<<"Testing units"<<std::endl;
|
{
|
||||||
CUnitV myV;
|
CUnitV myV;
|
||||||
|
std::cout<<myV.getVisual()<<std::endl;
|
||||||
|
}
|
||||||
|
|
||||||
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