78 lines
1.7 KiB
C++
78 lines
1.7 KiB
C++
#ifndef _UNIT_H_
|
|
#define _UNIT_H_
|
|
|
|
#include <string>
|
|
#include <memory>
|
|
|
|
#include "gametypes.h"
|
|
#include "vector2.h"
|
|
|
|
// Base unit type
|
|
class CUnit
|
|
{
|
|
public:
|
|
|
|
CUnit();
|
|
CUnit(CUnit&& unit);
|
|
~CUnit() = default;
|
|
|
|
inline const unit_id_t& getID() const { return unit_id; }
|
|
inline const team_id_t& getTeam() const { return team_id; }
|
|
inline const player_id_t& getPlayer() const { return player_id; }
|
|
inline const unitVis_c& getVisual() const { return unit_vis; }
|
|
|
|
// Return non-zero values on error
|
|
inline int setTeam(const team_id_t& v) { return (v == team_id_invalid) ? -1 : (( team_id = v ), 0); }
|
|
inline int setPlayer(const player_id_t& v) { return (v == player_id_invalid) ? -1 : (( player_id = v ), 0); }
|
|
inline int setVisual(const unitVis_c& v) { return (v == unitVis_invalid) ? -1 : (( unit_vis = v ), 0); }
|
|
|
|
inline const uvector2& getPos() const { return pos; }
|
|
inline void setPos(const uvector2& v) { pos = v; }
|
|
|
|
// Check unit is valid
|
|
inline bool valid() const;
|
|
|
|
// Set a unit based solely on it's visual
|
|
bool setFromVisual( const unitVis_c& vis);
|
|
|
|
// Factory function for creating units from a visual
|
|
static CUnit getUnitFromVis( unitVis_c vis );
|
|
|
|
|
|
protected:
|
|
|
|
|
|
private:
|
|
|
|
// Update the visual of V
|
|
unitVis_c updateMyVisual();
|
|
|
|
// Unit ID
|
|
const unit_id_t unit_id;
|
|
|
|
// Visual
|
|
unitVis_c unit_vis;
|
|
|
|
// Team ID
|
|
team_id_t team_id;
|
|
|
|
// Owner ID
|
|
player_id_t player_id;
|
|
|
|
// Direction
|
|
dir_t dir;
|
|
|
|
// Position
|
|
uvector2 pos;
|
|
};
|
|
|
|
// Simple validation
|
|
inline bool CUnit::valid() const
|
|
{
|
|
return (unit_id != unit_id_invalid )
|
|
&& (team_id != team_id_invalid )
|
|
&& (player_id != player_id_invalid)
|
|
&& (unit_vis != unitVis_invalid);
|
|
}
|
|
|
|
#endif //_UNIT_H_
|