#include "unit.h" #include // for std::map namespace { // Helper function for generating unique unit ids during static init unit_id_t get_unique_unit_id() { 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 ) , player_id ( player_id_invalid ) , unit_vis ( unitVis_invalid ) , dir ( dir_t::S ) { updateMyVisual(); }; // 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) ) { 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++ ) { if( it->second == vis ) { dir == it->first; updateMyVisual(); return true; } } // No matching direction to visual return false; }