Tasks.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_TASKS_HPP
8 #define ROSETTASTONE_TASKS_HPP
9 
13 
14 namespace RosettaStone
15 {
22 class ITask
23 {
24  public:
25  template <typename T>
26  static inline constexpr bool isTask =
27  std::is_convertible_v<std::decay_t<T>, ITask>;
28 
30  ITask() = default;
31 
34  ITask(EntityType entityType);
35 
39  ITask(Entity* source, Entity* target);
40 
45  ITask(EntityType entityType, Entity* source, Entity* target);
46 
48  virtual ~ITask() = default;
49 
51  ITask(const ITask& task) = default;
52 
54  ITask(ITask&& task) = default;
55 
57  ITask& operator=(const ITask& task) = default;
58 
60  ITask& operator=(ITask&& task) = default;
61 
64  EntityType GetEntityType() const;
65 
68  void SetSource(Entity* source);
69 
72  void SetTarget(Entity* target);
73 
77  TaskStatus Run(Player& player);
78 
81  virtual TaskID GetTaskID() const = 0;
82 
83  protected:
84  EntityType m_entityType = EntityType::EMPTY;
85  Entity* m_source = nullptr;
86  Entity* m_target = nullptr;
87 
88  private:
92  virtual TaskStatus Impl(Player& player) = 0;
93 };
94 
95 namespace Task
96 {
101 inline TaskStatus Run(Player& player, ITask&& task)
102 {
103  return task.Run(player);
104 }
105 
109 template <typename... TaskType>
110 std::vector<TaskStatus> RunMulti(Player& player, TaskType&&... task)
111 {
112  std::vector<TaskStatus> metas;
113  metas.reserve(sizeof...(task));
114 
115  (..., metas.push_back(task.Run(player)));
116  return metas;
117 }
118 } // namespace Task
119 } // namespace RosettaStone
120 
121 #endif // ROSETTASTONE_TASKS_HPP
void SetSource(Entity *source)
EntityType GetEntityType() const
ITask()=default
Default constructor.
TaskStatus
Meta data to represent the result of the task.
Definition: TaskStatus.hpp:15
virtual ~ITask()=default
Default destructor.
virtual TaskID GetTaskID() const =0
EntityType m_entityType
Definition: Tasks.hpp:84
ITask & operator=(const ITask &task)=default
Default copy assignment operator.
static constexpr bool isTask
Definition: Tasks.hpp:26
Abstract entity structure that stores card data.
Definition: Entity.hpp:28
TaskStatus Run(Player &player)
std::vector< TaskStatus > RunMulti(Player &player, TaskType &&... task)
Definition: Tasks.hpp:110
void SetTarget(Entity *target)
TaskStatus Run(Player &player, ITask &&task)
Definition: Tasks.hpp:101
Player class.
Definition: Player.hpp:33
Definition: AccountInfo.hpp:14
Entity * m_target
Definition: Tasks.hpp:86
ITask class.
Definition: Tasks.hpp:22
Entity * m_source
Definition: Tasks.hpp:85