#include #include "AI.h" #include "API.h" #define PI 3.14159265358979323846 int StudentAPI::GetFrameCount() const { return logic.GetCounter(); } int TrickerAPI::GetFrameCount() const { return logic.GetCounter(); } std::future StudentAPI::Move(int64_t timeInMilliseconds, double angleInRadian) { return std::async(std::launch::async, [&]() { return logic.Move(timeInMilliseconds, angleInRadian); }); } std::future StudentAPI::MoveDown(int64_t timeInMilliseconds) { return Move(timeInMilliseconds, 0); } std::future StudentAPI::MoveRight(int64_t timeInMilliseconds) { return Move(timeInMilliseconds, PI * 0.5); } std::future StudentAPI::MoveUp(int64_t timeInMilliseconds) { return Move(timeInMilliseconds, PI); } std::future StudentAPI::MoveLeft(int64_t timeInMilliseconds) { return Move(timeInMilliseconds, PI * 1.5); } std::future TrickerAPI::Move(int64_t timeInMilliseconds, double angleInRadian) { return std::async(std::launch::async, [&]() { return logic.Move(timeInMilliseconds, angleInRadian); }); } std::future TrickerAPI::MoveDown(int64_t timeInMilliseconds) { return Move(timeInMilliseconds, 0); } std::future TrickerAPI::MoveRight(int64_t timeInMilliseconds) { return Move(timeInMilliseconds, PI * 0.5); } std::future TrickerAPI::MoveUp(int64_t timeInMilliseconds) { return Move(timeInMilliseconds, PI); } std::future TrickerAPI::MoveLeft(int64_t timeInMilliseconds) { return Move(timeInMilliseconds, PI * 1.5); } std::future StudentAPI::PickProp(THUAI6::PropType prop) { return std::async(std::launch::async, [&]() { return logic.PickProp(prop); }); } std::future StudentAPI::UseProp(THUAI6::PropType prop) { return std::async(std::launch::async, [=]() { return logic.UseProp(prop); }); } std::future TrickerAPI::PickProp(THUAI6::PropType prop) { return std::async(std::launch::async, [&]() { return logic.PickProp(prop); }); } std::future TrickerAPI::UseProp(THUAI6::PropType prop) { return std::async(std::launch::async, [=]() { return logic.UseProp(prop); }); } std::future StudentAPI::UseSkill(int32_t skillID) { return std::async(std::launch::async, [=]() { return logic.UseSkill(skillID); }); } std::future TrickerAPI::UseSkill(int32_t skillID) { return std::async(std::launch::async, [=]() { return logic.UseSkill(skillID); }); } std::future StudentAPI::SendMessage(int64_t toID, std::string message) { return std::async(std::launch::async, [&]() { return logic.SendMessage(toID, message); }); } std::future TrickerAPI::SendMessage(int64_t toID, std::string message) { return std::async(std::launch::async, [&]() { return logic.SendMessage(toID, message); }); } std::future StudentAPI::HaveMessage() { return std::async(std::launch::async, [&]() { return logic.HaveMessage(); }); } std::future TrickerAPI::HaveMessage() { return std::async(std::launch::async, [&]() { return logic.HaveMessage(); }); } std::future>> StudentAPI::GetMessage() { return std::async(std::launch::async, [&]() { return logic.GetMessage(); }); } std::future>> TrickerAPI::GetMessage() { return std::async(std::launch::async, [&]() { return logic.GetMessage(); }); } std::future StudentAPI::Wait() { if (logic.GetCounter() == -1) return std::async(std::launch::async, [&]() { return false; }); else return std::async(std::launch::async, [&]() { return logic.WaitThread(); }); } std::future TrickerAPI::Wait() { if (logic.GetCounter() == -1) return std::async(std::launch::async, [&]() { return false; }); else return std::async(std::launch::async, [&]() { return logic.WaitThread(); }); } std::vector> StudentAPI::GetTrickers() const { return logic.GetTrickers(); } std::vector> StudentAPI::GetStudents() const { return logic.GetStudents(); } std::vector> TrickerAPI::GetTrickers() const { return logic.GetTrickers(); } std::vector> TrickerAPI::GetStudents() const { return logic.GetStudents(); } std::vector> StudentAPI::GetProps() const { return logic.GetProps(); } std::vector> TrickerAPI::GetProps() const { return logic.GetProps(); } std::vector> StudentAPI::GetFullMap() const { return logic.GetFullMap(); } THUAI6::PlaceType StudentAPI::GetPlaceType(int32_t cellX, int32_t cellY) const { return logic.GetPlaceType(cellX, cellY); } THUAI6::PlaceType TrickerAPI::GetPlaceType(int32_t cellX, int32_t cellY) const { return logic.GetPlaceType(cellX, cellY); } std::vector> TrickerAPI::GetFullMap() const { return logic.GetFullMap(); } const std::vector StudentAPI::GetPlayerGUIDs() const { return logic.GetPlayerGUIDs(); } const std::vector TrickerAPI::GetPlayerGUIDs() const { return logic.GetPlayerGUIDs(); } std::future StudentAPI::StartLearning() { return std::async(std::launch::async, [&]() { return logic.StartLearning(); }); } std::future StudentAPI::StartTreatMate() { return std::async(std::launch::async, [&]() { return logic.StartTreatMate(); }); } std::future StudentAPI::StartRescueMate() { return std::async(std::launch::async, [&]() { return logic.StartRescueMate(); }); } std::future StudentAPI::Graduate() { return std::async(std::launch::async, [&]() { return logic.Graduate(); }); } std::shared_ptr StudentAPI::GetSelfInfo() const { return logic.StudentGetSelfInfo(); } std::future TrickerAPI::Attack(double angleInRadian) { return std::async(std::launch::async, [&]() { return logic.Attack(angleInRadian); }); } std::shared_ptr TrickerAPI::GetSelfInfo() const { return logic.TrickerGetSelfInfo(); } void StudentAPI::Play(IAI& ai) { ai.play(*this); } void TrickerAPI::Play(IAI& ai) { ai.play(*this); }