ttrts/game/unit.h
Marc Di Luzio 008739dee6 Various work towards a basic game implementation
Get rid of some virtual functions that weren't needed.
Fix some functions to work during static init if need be.
Units now have unique incremental IDs
2014-12-16 13:13:00 +00:00

73 lines
No EOL
1.8 KiB
C++

#ifndef _UNIT_H_
#define _UNIT_H_
#include <string>
#include <memory>
#include "gametypes.h"
#include "vector2.h"
// Base unit type
class CUnit
{
public:
virtual ~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
// Maybe make non-virtual at some point to avoid vtable lookups
virtual bool setFromVisual(unitVis_c& vis) = 0;
// Factory function for creating units from a visual
static std::unique_ptr<CUnit> getUnitFromVis( unitVis_c vis );
protected:
// Protected constructor, cannot be constructed as base type
CUnit();
private:
// 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;
// All units must have 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_