BasicPolicy.hpp
Go to the documentation of this file.
1 // Copyright (c) 2019 Chris Ohk, Youngjoong Kim, SeungHyun Jeon
2 
3 // We are making my contributions/submissions to this project solely in our
4 // personal capacity and are not conveying any rights to any intellectual
5 // property of any third parties.
6 
7 #ifndef ROSETTASTONE_BASIC_POLICY_HPP
8 #define ROSETTASTONE_BASIC_POLICY_HPP
9 
11 
12 #include <functional>
13 
14 namespace RosettaStone
15 {
21 class BasicPolicy : public IPolicy
22 {
23  public:
25  BasicPolicy() = default;
26 
28  ~BasicPolicy() = default;
29 
33  TaskMeta Next(const Game& game) override;
34 
38  TaskMeta Require(Player& player, TaskID id) override;
39 
42  void Notify(const TaskMeta& meta) override;
43 
44  private:
46  virtual TaskMeta RequireMulligan(Player& player);
47 
49  virtual TaskMeta RequirePlayCard(Player& player);
50 
52  virtual TaskMeta RequireAttack(Player& player);
53 
55  virtual void NotifyOverDraw(const TaskMeta& meta);
56 
57  std::map<TaskID, std::function<TaskMeta(BasicPolicy&, Player&)>>
58  m_require = {
59  { TaskID::MULLIGAN, &BasicPolicy::RequireMulligan },
60  { TaskID::PLAY_CARD, &BasicPolicy::RequirePlayCard },
61  { TaskID::ATTACK, &BasicPolicy::RequireAttack },
62  };
63 
64  std::map<TaskID, std::function<void(BasicPolicy&, const TaskMeta&)>>
65  m_notify = {
66  { TaskID::OVERDRAW, &BasicPolicy::NotifyOverDraw },
67  };
68 };
69 } // namespace RosettaStone
70 
71 #endif // ROSETTASTONE_BASIC_POLICY_HPP
TaskMeta class.
Definition: TaskMeta.hpp:97
BasicPolicy()=default
Default constructor.
IPolicy class.
Definition: Policy.hpp:22
Game class.
Definition: Game.hpp:21
BasicPolicy class.
Definition: BasicPolicy.hpp:21
TaskMeta Require(Player &player, TaskID id) override
TaskMeta Next(const Game &game) override
~BasicPolicy()=default
Default destructor.
Player class.
Definition: Player.hpp:33
Definition: AccountInfo.hpp:14
void Notify(const TaskMeta &meta) override