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
This commit is contained in:
parent
a6e1319fad
commit
008739dee6
6 changed files with 135 additions and 40 deletions
44
game/unit.h
44
game/unit.h
|
@ -13,29 +13,61 @@ class CUnit
|
|||
public:
|
||||
virtual ~CUnit() = default;
|
||||
|
||||
virtual unitVis_c getVisual() const = 0;
|
||||
|
||||
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 );
|
||||
|
||||
inline unit_id_t getID() const { return id; }
|
||||
|
||||
protected:
|
||||
CUnit() = default;
|
||||
|
||||
// Protected constructor, cannot be constructed as base type
|
||||
CUnit();
|
||||
|
||||
private:
|
||||
|
||||
// Unit ID
|
||||
unit_id_t id;
|
||||
const unit_id_t unit_id;
|
||||
|
||||
// Visual
|
||||
unitVis_c unit_vis;
|
||||
|
||||
// Team ID
|
||||
team_id_t team_id;
|
||||
|
||||
// Owner ID
|
||||
player_id_t 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_
|
Loading…
Add table
Add a link
Reference in a new issue