Веб-сайт самохостера Lotigara

summaryrefslogtreecommitdiff
path: root/source/game/StarPlayerTech.hpp
blob: 3e1b9d256e096d8f0bcc2ca11c6ef5f4ecca7a87 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
#pragma once

#include "StarTechDatabase.hpp"

namespace Star {

STAR_EXCEPTION(PlayerTechException, StarException);

STAR_CLASS(PlayerTech);

// Set of player techs, techs can be either unavailable, available but not
// enabled, enabled but not equipped, or equipped.
class PlayerTech {
public:
  PlayerTech();
  PlayerTech(Json const& json);

  Json toJson() const;

  bool isAvailable(String const& techModule) const;
  void makeAvailable(String const& techModule);
  void makeUnavailable(String const& techModule);

  bool isEnabled(String const& techModule) const;
  void enable(String const& techModule);
  void disable(String const& techModule);

  bool isEquipped(String const& techModule) const;
  void equip(String const& techModule);
  void unequip(String const& techModule);

  StringSet const& availableTechs() const;
  StringSet const& enabledTechs() const;
  HashMap<TechType, String> const& equippedTechs() const;
  StringList techModules() const;

private:
  StringSet m_availableTechs;
  StringSet m_enabledTechs;
  HashMap<TechType, String> m_equippedTechs;
};

}