#include #include "AI.h" #include "API.h" #undef GetMessage #undef SendMessage #undef PeekMessage #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::ThrowProp(THUAI6::PropType prop) { return std::async(std::launch::async, [=]() { return logic.ThrowProp(prop); }); } std::future TrickerAPI::ThrowProp(THUAI6::PropType prop) { return std::async(std::launch::async, [=]() { return logic.ThrowProp(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::OpenDoor() { return std::async(std::launch::async, [this]() { return logic.OpenDoor(); }); } std::future TrickerAPI::OpenDoor() { return std::async(std::launch::async, [this]() { return logic.OpenDoor(); }); } std::future StudentAPI::CloseDoor() { return std::async(std::launch::async, [this]() { return logic.CloseDoor(); }); } std::future TrickerAPI::CloseDoor() { return std::async(std::launch::async, [this]() { return logic.CloseDoor(); }); } std::future StudentAPI::SkipWindow() { return std::async(std::launch::async, [this]() { return logic.SkipWindow(); }); } std::future TrickerAPI::SkipWindow() { return std::async(std::launch::async, [this]() { return logic.SkipWindow(); }); } std::future StudentAPI::StartOpenGate() { return std::async(std::launch::async, [this]() { return logic.StartOpenGate(); }); } std::future TrickerAPI::StartOpenGate() { return std::async(std::launch::async, [this]() { return logic.StartOpenGate(); }); } std::future StudentAPI::StartOpenChest() { return std::async(std::launch::async, [this]() { return logic.StartOpenChest(); }); } std::future TrickerAPI::StartOpenChest() { return std::async(std::launch::async, [this]() { return logic.StartOpenChest(); }); } std::future StudentAPI::EndAllAction() { return std::async(std::launch::async, [this]() { return logic.EndAllAction(); }); } std::future TrickerAPI::EndAllAction() { return std::async(std::launch::async, [this]() { return logic.EndAllAction(); }); } std::future StudentAPI::SendTextMessage(int64_t toID, std::string message) { return std::async(std::launch::async, [=]() { return logic.SendMessage(toID, message, false); }); } std::future TrickerAPI::SendTextMessage(int64_t toID, std::string message) { return std::async(std::launch::async, [=]() { return logic.SendMessage(toID, message, false); }); } std::future StudentAPI::SendBinaryMessage(int64_t toID, std::string message) { return std::async(std::launch::async, [=]() { return logic.SendMessage(toID, message, false); }); } std::future TrickerAPI::SendBinaryMessage(int64_t toID, std::string message) { return std::async(std::launch::async, [=]() { return logic.SendMessage(toID, message, false); }); } bool StudentAPI::HaveMessage() { return logic.HaveMessage(); } bool TrickerAPI::HaveMessage() { return logic.HaveMessage(); } std::pair StudentAPI::GetMessage() { return logic.GetMessage(); } std::pair TrickerAPI::GetMessage() { return logic.GetMessage(); } bool StudentAPI::Wait() { if (logic.GetCounter() == -1) return false; else return logic.WaitThread(); } bool TrickerAPI::Wait() { if (logic.GetCounter() == -1) return false; else 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::GetBullets() const { return logic.GetBullets(); } std::vector> TrickerAPI::GetBullets() const { return logic.GetBullets(); } 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(); } bool StudentAPI::IsDoorOpen(int32_t cellX, int32_t cellY) const { return logic.IsDoorOpen(cellX, cellY); } bool TrickerAPI::IsDoorOpen(int32_t cellX, int32_t cellY) const { return logic.IsDoorOpen(cellX, cellY); } int32_t StudentAPI::GetClassroomProgress(int32_t cellX, int32_t cellY) const { return logic.GetClassroomProgress(cellX, cellY); } int32_t TrickerAPI::GetClassroomProgress(int32_t cellX, int32_t cellY) const { return logic.GetClassroomProgress(cellX, cellY); } int32_t StudentAPI::GetChestProgress(int32_t cellX, int32_t cellY) const { return logic.GetChestProgress(cellX, cellY); } int32_t TrickerAPI::GetChestProgress(int32_t cellX, int32_t cellY) const { return logic.GetChestProgress(cellX, cellY); } int32_t StudentAPI::GetGateProgress(int32_t cellX, int32_t cellY) const { return logic.GetGateProgress(cellX, cellY); } int32_t TrickerAPI::GetGateProgress(int32_t cellX, int32_t cellY) const { return logic.GetGateProgress(cellX, cellY); } int32_t StudentAPI::GetDoorProgress(int32_t cellX, int32_t cellY) const { return logic.GetDoorProgress(cellX, cellY); } int32_t TrickerAPI::GetDoorProgress(int32_t cellX, int32_t cellY) const { return logic.GetDoorProgress(cellX, cellY); } THUAI6::HiddenGateState StudentAPI::GetHiddenGateState(int32_t cellX, int32_t cellY) const { return logic.GetHiddenGateState(cellX, cellY); } THUAI6::HiddenGateState TrickerAPI::GetHiddenGateState(int32_t cellX, int32_t cellY) const { return logic.GetHiddenGateState(cellX, cellY); } std::shared_ptr StudentAPI::GetGameInfo() const { return logic.GetGameInfo(); } std::shared_ptr TrickerAPI::GetGameInfo() const { return logic.GetGameInfo(); } std::vector StudentAPI::GetPlayerGUIDs() const { return logic.GetPlayerGUIDs(); } std::vector TrickerAPI::GetPlayerGUIDs() const { return logic.GetPlayerGUIDs(); } std::future StudentAPI::StartLearning() { return std::async(std::launch::async, [this]() { return logic.StartLearning(); }); } std::future StudentAPI::StartEncourageMate(int64_t mateID) { return std::async(std::launch::async, [=]() { return logic.StartEncourageMate(mateID); }); } std::future StudentAPI::StartRouseMate(int64_t mateID) { return std::async(std::launch::async, [=]() { return logic.StartRouseMate(mateID); }); } std::future StudentAPI::Graduate() { return std::async(std::launch::async, [this]() { 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::future StudentAPI::Attack(double angleInRadian) { return std::async(std::launch::async, [=]() { return logic.Attack(angleInRadian); }); } std::shared_ptr TrickerAPI::GetSelfInfo() const { return logic.TrickerGetSelfInfo(); } bool StudentAPI::HaveView(int gridX, int gridY) const { auto selfInfo = GetSelfInfo(); return logic.HaveView(gridX, gridY, selfInfo->x, selfInfo->y, selfInfo->viewRange); } bool TrickerAPI::HaveView(int gridX, int gridY) const { auto selfInfo = GetSelfInfo(); return logic.HaveView(gridX, gridY, selfInfo->x, selfInfo->y, selfInfo->viewRange); } void StudentAPI::Play(IAI& ai) { ai.play(*this); } void TrickerAPI::Play(IAI& ai) { ai.play(*this); }