You can not select more than 25 topics Topics must start with a chinese character,a letter or number, can include dashes ('-') and can be up to 35 characters long.

DebugAPI.cpp 27 kB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731
  1. #include <optional>
  2. #include <string>
  3. #include "AI.h"
  4. #include "API.h"
  5. #include "utils.hpp"
  6. #include "structures.h"
  7. #define PI 3.14159265358979323846
  8. StudentDebugAPI::StudentDebugAPI(ILogic& logic, bool file, bool print, bool warnOnly, int64_t playerID) :
  9. logic(logic)
  10. {
  11. std::string fileName = "logs/api-" + std::to_string(playerID) + "-log.txt";
  12. auto fileLogger = std::make_shared<spdlog::sinks::basic_file_sink_mt>(fileName, true);
  13. auto printLogger = std::make_shared<spdlog::sinks::stdout_color_sink_mt>();
  14. std::string pattern = "[api " + std::to_string(playerID) + "] [%H:%M:%S.%e] [%l] %v";
  15. fileLogger->set_pattern(pattern);
  16. printLogger->set_pattern(pattern);
  17. if (file)
  18. fileLogger->set_level(spdlog::level::trace);
  19. else
  20. fileLogger->set_level(spdlog::level::off);
  21. if (print)
  22. printLogger->set_level(spdlog::level::info);
  23. else
  24. printLogger->set_level(spdlog::level::off);
  25. if (warnOnly)
  26. printLogger->set_level(spdlog::level::warn);
  27. logger = std::make_unique<spdlog::logger>("apiLogger", spdlog::sinks_init_list{fileLogger, printLogger});
  28. }
  29. TrickerDebugAPI::TrickerDebugAPI(ILogic& logic, bool file, bool print, bool warnOnly, int64_t playerID) :
  30. logic(logic)
  31. {
  32. std::string fileName = "logs/api-" + std::to_string(playerID) + "-log.txt";
  33. auto fileLogger = std::make_shared<spdlog::sinks::basic_file_sink_mt>(fileName, true);
  34. auto printLogger = std::make_shared<spdlog::sinks::stdout_color_sink_mt>();
  35. std::string pattern = "[api" + std::to_string(playerID) + "] [%H:%M:%S.%e] [%l] %v";
  36. fileLogger->set_pattern(pattern);
  37. printLogger->set_pattern(pattern);
  38. if (file)
  39. fileLogger->set_level(spdlog::level::trace);
  40. else
  41. fileLogger->set_level(spdlog::level::off);
  42. if (print)
  43. printLogger->set_level(spdlog::level::info);
  44. else
  45. printLogger->set_level(spdlog::level::off);
  46. if (warnOnly)
  47. printLogger->set_level(spdlog::level::warn);
  48. logger = std::make_unique<spdlog::logger>("apiLogger", spdlog::sinks_init_list{fileLogger, printLogger});
  49. }
  50. void StudentDebugAPI::StartTimer()
  51. {
  52. startPoint = std::chrono::system_clock::now();
  53. std::time_t t = std::chrono::system_clock::to_time_t(startPoint);
  54. logger->info("=== AI.play() ===");
  55. logger->info("StartTimer: {}", std::ctime(&t));
  56. }
  57. void TrickerDebugAPI::StartTimer()
  58. {
  59. startPoint = std::chrono::system_clock::now();
  60. std::time_t t = std::chrono::system_clock::to_time_t(startPoint);
  61. logger->info("=== AI.play() ===");
  62. logger->info("StartTimer: {}", std::ctime(&t));
  63. }
  64. void StudentDebugAPI::EndTimer()
  65. {
  66. logger->info("Time elapsed: {}ms", Time::TimeSinceStart(startPoint));
  67. }
  68. void TrickerDebugAPI::EndTimer()
  69. {
  70. logger->info("Time elapsed: {}ms", Time::TimeSinceStart(startPoint));
  71. }
  72. int StudentDebugAPI::GetFrameCount() const
  73. {
  74. return logic.GetCounter();
  75. }
  76. int TrickerDebugAPI::GetFrameCount() const
  77. {
  78. return logic.GetCounter();
  79. }
  80. std::future<bool> StudentDebugAPI::Move(int64_t timeInMilliseconds, double angleInRadian)
  81. {
  82. logger->info("Move: timeInMilliseconds = {}, angleInRadian = {}, called at {}ms", timeInMilliseconds, angleInRadian, Time::TimeSinceStart(startPoint));
  83. return std::async(std::launch::async, [=]()
  84. { auto result = logic.Move(timeInMilliseconds, angleInRadian);
  85. if (!result)
  86. logger->warn("Move: failed at {}ms", Time::TimeSinceStart(startPoint));
  87. return result; });
  88. }
  89. std::future<bool> StudentDebugAPI::MoveDown(int64_t timeInMilliseconds)
  90. {
  91. return Move(timeInMilliseconds, 0);
  92. }
  93. std::future<bool> StudentDebugAPI::MoveRight(int64_t timeInMilliseconds)
  94. {
  95. return Move(timeInMilliseconds, PI * 0.5);
  96. }
  97. std::future<bool> StudentDebugAPI::MoveUp(int64_t timeInMilliseconds)
  98. {
  99. return Move(timeInMilliseconds, PI);
  100. }
  101. std::future<bool> StudentDebugAPI::MoveLeft(int64_t timeInMilliseconds)
  102. {
  103. return Move(timeInMilliseconds, PI * 1.5);
  104. }
  105. std::future<bool> TrickerDebugAPI::Move(int64_t timeInMilliseconds, double angleInRadian)
  106. {
  107. logger->info("Move: timeInMilliseconds = {}, angleInRadian = {}, called at {}ms", timeInMilliseconds, angleInRadian, Time::TimeSinceStart(startPoint));
  108. return std::async(std::launch::async, [=]()
  109. { auto result = logic.Move(timeInMilliseconds, angleInRadian);
  110. if (!result)
  111. logger->warn("Move: failed at {}ms", Time::TimeSinceStart(startPoint));
  112. return result; });
  113. }
  114. std::future<bool> TrickerDebugAPI::MoveDown(int64_t timeInMilliseconds)
  115. {
  116. return Move(timeInMilliseconds, 0);
  117. }
  118. std::future<bool> TrickerDebugAPI::MoveRight(int64_t timeInMilliseconds)
  119. {
  120. return Move(timeInMilliseconds, PI * 0.5);
  121. }
  122. std::future<bool> TrickerDebugAPI::MoveUp(int64_t timeInMilliseconds)
  123. {
  124. return Move(timeInMilliseconds, PI);
  125. }
  126. std::future<bool> TrickerDebugAPI::MoveLeft(int64_t timeInMilliseconds)
  127. {
  128. return Move(timeInMilliseconds, PI * 1.5);
  129. }
  130. std::future<bool> StudentDebugAPI::PickProp(THUAI6::PropType prop)
  131. {
  132. logger->info("PickProp: prop = {}, called at {}ms", THUAI6::propTypeDict[prop], Time::TimeSinceStart(startPoint));
  133. return std::async(std::launch::async, [=]()
  134. { auto result = logic.PickProp(prop);
  135. if (!result)
  136. logger->warn("PickProp: failed at {}ms", Time::TimeSinceStart(startPoint));
  137. return result; });
  138. }
  139. std::future<bool> StudentDebugAPI::UseProp(THUAI6::PropType prop)
  140. {
  141. logger->info("UseProp: prop={}, called at {}ms", THUAI6::propTypeDict[prop], Time::TimeSinceStart(startPoint));
  142. return std::async(std::launch::async, [=]()
  143. { auto result = logic.UseProp(prop);
  144. if (!result)
  145. logger->warn("UseProp: failed at {}ms", Time::TimeSinceStart(startPoint));
  146. return result; });
  147. }
  148. std::future<bool> TrickerDebugAPI::PickProp(THUAI6::PropType prop)
  149. {
  150. logger->info("PickProp: prop = {}, called at {}ms", THUAI6::propTypeDict[prop], Time::TimeSinceStart(startPoint));
  151. return std::async(std::launch::async, [=]()
  152. { auto result = logic.PickProp(prop);
  153. if (!result)
  154. logger->warn("PickProp: failed at {}ms", Time::TimeSinceStart(startPoint));
  155. return result; });
  156. }
  157. std::future<bool> TrickerDebugAPI::UseProp(THUAI6::PropType prop)
  158. {
  159. logger->info("UseProp: prop={}, called at {}ms", THUAI6::propTypeDict[prop], Time::TimeSinceStart(startPoint));
  160. return std::async(std::launch::async, [=]()
  161. { auto result = logic.UseProp(prop);
  162. if (!result)
  163. logger->warn("UseProp: failed at {}ms", Time::TimeSinceStart(startPoint));
  164. return result; });
  165. }
  166. std::future<bool> StudentDebugAPI::UseSkill(int32_t skillID)
  167. {
  168. logger->info("UseSkill: skillID={}, called at {}ms", skillID, Time::TimeSinceStart(startPoint));
  169. return std::async(std::launch::async, [=]()
  170. { auto result = logic.UseSkill(skillID);
  171. if (!result)
  172. logger->warn("UseSkill: failed at {}ms", Time::TimeSinceStart(startPoint));
  173. return result; });
  174. }
  175. std::future<bool> TrickerDebugAPI::UseSkill(int32_t skillID)
  176. {
  177. logger->info("UseSkill: skillID={}, called at {}ms", skillID, Time::TimeSinceStart(startPoint));
  178. return std::async(std::launch::async, [=]()
  179. { auto result = logic.UseSkill(skillID);
  180. if (!result)
  181. logger->warn("UseSkill: failed at {}ms", Time::TimeSinceStart(startPoint));
  182. return result; });
  183. }
  184. std::future<bool> StudentDebugAPI::OpenDoor()
  185. {
  186. return std::async(std::launch::async, [&]()
  187. { return logic.OpenDoor(); });
  188. }
  189. std::future<bool> TrickerDebugAPI::OpenDoor()
  190. {
  191. return std::async(std::launch::async, [&]()
  192. { return logic.OpenDoor(); });
  193. }
  194. std::future<bool> StudentDebugAPI::CloseDoor()
  195. {
  196. return std::async(std::launch::async, [&]()
  197. { return logic.CloseDoor(); });
  198. }
  199. std::future<bool> TrickerDebugAPI::CloseDoor()
  200. {
  201. return std::async(std::launch::async, [&]()
  202. { return logic.CloseDoor(); });
  203. }
  204. std::future<bool> StudentDebugAPI::SkipWindow()
  205. {
  206. return std::async(std::launch::async, [&]()
  207. { return logic.SkipWindow(); });
  208. }
  209. std::future<bool> TrickerDebugAPI::SkipWindow()
  210. {
  211. return std::async(std::launch::async, [&]()
  212. { return logic.SkipWindow(); });
  213. }
  214. std::future<bool> StudentDebugAPI::StartOpenGate()
  215. {
  216. return std::async(std::launch::async, [&]()
  217. { return logic.StartOpenGate(); });
  218. }
  219. std::future<bool> TrickerDebugAPI::StartOpenGate()
  220. {
  221. return std::async(std::launch::async, [&]()
  222. { return logic.StartOpenGate(); });
  223. }
  224. std::future<bool> StudentDebugAPI::StartOpenChest()
  225. {
  226. return std::async(std::launch::async, [&]()
  227. { return logic.StartOpenChest(); });
  228. }
  229. std::future<bool> TrickerDebugAPI::StartOpenChest()
  230. {
  231. return std::async(std::launch::async, [&]()
  232. { return logic.StartOpenChest(); });
  233. }
  234. std::future<bool> StudentDebugAPI::EndAllAction()
  235. {
  236. return std::async(std::launch::async, [&]()
  237. { return logic.EndAllAction(); });
  238. }
  239. std::future<bool> TrickerDebugAPI::EndAllAction()
  240. {
  241. return std::async(std::launch::async, [&]()
  242. { return logic.EndAllAction(); });
  243. }
  244. std::future<bool> StudentDebugAPI::SendMessage(int64_t toID, std::string message)
  245. {
  246. logger->info("SendMessage: toID = {}, message = {}, called at {}ms", toID, message, Time::TimeSinceStart(startPoint));
  247. return std::async(std::launch::async, [=]()
  248. { auto result = logic.SendMessage(toID, message);
  249. if (!result)
  250. logger->warn("SendMessage: failed at {}ms", Time::TimeSinceStart(startPoint));
  251. return result; });
  252. }
  253. std::future<bool> TrickerDebugAPI::SendMessage(int64_t toID, std::string message)
  254. {
  255. logger->info("SendMessage: toID = {}, message = {}, called at {}ms", toID, message, Time::TimeSinceStart(startPoint));
  256. return std::async(std::launch::async, [=]()
  257. { auto result = logic.SendMessage(toID, message);
  258. if (!result)
  259. logger->warn("SendMessage: failed at {}ms", Time::TimeSinceStart(startPoint));
  260. return result; });
  261. }
  262. std::future<bool> StudentDebugAPI::HaveMessage()
  263. {
  264. logger->info("HaveMessage: called at {}ms", Time::TimeSinceStart(startPoint));
  265. return std::async(std::launch::async, [this]()
  266. { auto result = logic.HaveMessage();
  267. if (!result)
  268. logger->warn("HaveMessage: failed at {}ms", Time::TimeSinceStart(startPoint));
  269. return result; });
  270. }
  271. std::future<bool> TrickerDebugAPI::HaveMessage()
  272. {
  273. logger->info("HaveMessage: called at {}ms", Time::TimeSinceStart(startPoint));
  274. return std::async(std::launch::async, [this]()
  275. { auto result = logic.HaveMessage();
  276. if (!result)
  277. logger->warn("HaveMessage: failed at {}ms", Time::TimeSinceStart(startPoint));
  278. return result; });
  279. }
  280. std::future<std::optional<std::pair<int64_t, std::string>>> StudentDebugAPI::GetMessage()
  281. {
  282. logger->info("GetMessage: called at {}ms", Time::TimeSinceStart(startPoint));
  283. return std::async(std::launch::async, [this]()
  284. { auto result = logic.GetMessage();
  285. if (result == std::nullopt)
  286. logger->warn("GetMessage: failed at {}ms", Time::TimeSinceStart(startPoint));
  287. return result; });
  288. }
  289. std::future<std::optional<std::pair<int64_t, std::string>>> TrickerDebugAPI::GetMessage()
  290. {
  291. logger->info("GetMessage: called at {}ms", Time::TimeSinceStart(startPoint));
  292. return std::async(std::launch::async, [this]()
  293. { auto result = logic.GetMessage();
  294. if (result == std::nullopt)
  295. logger->warn("GetMessage: failed at {}ms", Time::TimeSinceStart(startPoint));
  296. return result; });
  297. }
  298. std::future<bool> StudentDebugAPI::Wait()
  299. {
  300. logger->info("Wait: called at {}ms", Time::TimeSinceStart(startPoint));
  301. if (logic.GetCounter() == -1)
  302. return std::async(std::launch::async, []()
  303. { return false; });
  304. else
  305. return std::async(std::launch::async, [this]()
  306. { return logic.WaitThread(); });
  307. }
  308. std::future<bool> TrickerDebugAPI::Wait()
  309. {
  310. logger->info("Wait: called at {}ms", Time::TimeSinceStart(startPoint));
  311. if (logic.GetCounter() == -1)
  312. return std::async(std::launch::async, []()
  313. { return false; });
  314. else
  315. return std::async(std::launch::async, [this]()
  316. { return logic.WaitThread(); });
  317. }
  318. std::vector<std::shared_ptr<const THUAI6::Tricker>> StudentDebugAPI::GetTrickers() const
  319. {
  320. return logic.GetTrickers();
  321. }
  322. std::vector<std::shared_ptr<const THUAI6::Student>> StudentDebugAPI::GetStudents() const
  323. {
  324. return logic.GetStudents();
  325. }
  326. std::vector<std::shared_ptr<const THUAI6::Tricker>> TrickerDebugAPI::GetTrickers() const
  327. {
  328. return logic.GetTrickers();
  329. }
  330. std::vector<std::shared_ptr<const THUAI6::Student>> TrickerDebugAPI::GetStudents() const
  331. {
  332. return logic.GetStudents();
  333. }
  334. std::vector<std::shared_ptr<const THUAI6::Prop>> StudentDebugAPI::GetProps() const
  335. {
  336. return logic.GetProps();
  337. }
  338. std::vector<std::shared_ptr<const THUAI6::Prop>> TrickerDebugAPI::GetProps() const
  339. {
  340. return logic.GetProps();
  341. }
  342. std::vector<std::vector<THUAI6::PlaceType>> StudentDebugAPI::GetFullMap() const
  343. {
  344. return logic.GetFullMap();
  345. }
  346. THUAI6::PlaceType StudentDebugAPI::GetPlaceType(int32_t cellX, int32_t cellY) const
  347. {
  348. return logic.GetPlaceType(cellX, cellY);
  349. }
  350. THUAI6::PlaceType TrickerDebugAPI::GetPlaceType(int32_t cellX, int32_t cellY) const
  351. {
  352. return logic.GetPlaceType(cellX, cellY);
  353. }
  354. std::vector<std::vector<THUAI6::PlaceType>> TrickerDebugAPI::GetFullMap() const
  355. {
  356. return logic.GetFullMap();
  357. }
  358. bool StudentDebugAPI::IsDoorOpen(int32_t cellX, int32_t cellY) const
  359. {
  360. return logic.IsDoorOpen(cellX, cellY);
  361. }
  362. bool TrickerDebugAPI::IsDoorOpen(int32_t cellX, int32_t cellY) const
  363. {
  364. return logic.IsDoorOpen(cellX, cellY);
  365. }
  366. int32_t StudentDebugAPI::GetClassroomProgress(int32_t cellX, int32_t cellY) const
  367. {
  368. return logic.GetClassroomProgress(cellX, cellY);
  369. }
  370. int32_t TrickerDebugAPI::GetClassroomProgress(int32_t cellX, int32_t cellY) const
  371. {
  372. return logic.GetClassroomProgress(cellX, cellY);
  373. }
  374. int32_t StudentDebugAPI::GetChestProgress(int32_t cellX, int32_t cellY) const
  375. {
  376. return logic.GetChestProgress(cellX, cellY);
  377. }
  378. int32_t TrickerDebugAPI::GetChestProgress(int32_t cellX, int32_t cellY) const
  379. {
  380. return logic.GetChestProgress(cellX, cellY);
  381. }
  382. int32_t StudentDebugAPI::GetDoorProgress(int32_t cellX, int32_t cellY) const
  383. {
  384. return logic.GetDoorProgress(cellX, cellY);
  385. }
  386. int32_t TrickerDebugAPI::GetDoorProgress(int32_t cellX, int32_t cellY) const
  387. {
  388. return logic.GetDoorProgress(cellX, cellY);
  389. }
  390. THUAI6::HiddenGateState StudentDebugAPI::GetHiddenGateState(int32_t cellX, int32_t cellY) const
  391. {
  392. return logic.GetHiddenGateState(cellX, cellY);
  393. }
  394. THUAI6::HiddenGateState TrickerDebugAPI::GetHiddenGateState(int32_t cellX, int32_t cellY) const
  395. {
  396. return logic.GetHiddenGateState(cellX, cellY);
  397. }
  398. int32_t StudentDebugAPI::GetGateProgress(int32_t cellX, int32_t cellY) const
  399. {
  400. return logic.GetGateProgress(cellX, cellY);
  401. }
  402. int32_t TrickerDebugAPI::GetGateProgress(int32_t cellX, int32_t cellY) const
  403. {
  404. return logic.GetGateProgress(cellX, cellY);
  405. }
  406. std::shared_ptr<const THUAI6::GameInfo> StudentDebugAPI::GetGameInfo() const
  407. {
  408. return logic.GetGameInfo();
  409. }
  410. std::shared_ptr<const THUAI6::GameInfo> TrickerDebugAPI::GetGameInfo() const
  411. {
  412. return logic.GetGameInfo();
  413. }
  414. std::vector<int64_t> StudentDebugAPI::GetPlayerGUIDs() const
  415. {
  416. return logic.GetPlayerGUIDs();
  417. }
  418. std::vector<int64_t> TrickerDebugAPI::GetPlayerGUIDs() const
  419. {
  420. return logic.GetPlayerGUIDs();
  421. }
  422. std::future<bool> StudentDebugAPI::StartLearning()
  423. {
  424. logger->info("StartLearning: called at {}ms", Time::TimeSinceStart(startPoint));
  425. return std::async(std::launch::async, [this]()
  426. { auto result = logic.StartLearning();
  427. if (!result)
  428. logger->warn("StartLearning: failed at {}ms", Time::TimeSinceStart(startPoint));
  429. return result; });
  430. }
  431. std::future<bool> StudentDebugAPI::StartRescueMate()
  432. {
  433. logger->info("StartRescueMate: called at {}ms", Time::TimeSinceStart(startPoint));
  434. return std::async(std::launch::async, [this]()
  435. { auto result = logic.StartRescueMate();
  436. if (!result)
  437. logger->warn("StartRescueMate: failed at {}ms", Time::TimeSinceStart(startPoint));
  438. return result; });
  439. }
  440. std::future<bool> StudentDebugAPI::StartTreatMate()
  441. {
  442. logger->info("StartTreatMate: called at {}ms", Time::TimeSinceStart(startPoint));
  443. return std::async(std::launch::async, [this]()
  444. { auto result = logic.StartTreatMate();
  445. if (!result)
  446. logger->warn("StartTreatMate: failed at {}ms", Time::TimeSinceStart(startPoint));
  447. return result; });
  448. }
  449. std::future<bool> StudentDebugAPI::Graduate()
  450. {
  451. logger->info("Graduate: called at {}ms", Time::TimeSinceStart(startPoint));
  452. return std::async(std::launch::async, [this]()
  453. { auto result = logic.Graduate();
  454. if (!result)
  455. logger->warn("Graduate: failed at {}ms", Time::TimeSinceStart(startPoint));
  456. return result; });
  457. }
  458. std::shared_ptr<const THUAI6::Student> StudentDebugAPI::GetSelfInfo() const
  459. {
  460. return logic.StudentGetSelfInfo();
  461. }
  462. std::future<bool> TrickerDebugAPI::Attack(double angleInRadian)
  463. {
  464. logger->info("Attack: angleInRadian = {}, called at {}ms", angleInRadian, Time::TimeSinceStart(startPoint));
  465. return std::async(std::launch::async, [=]()
  466. { auto result = logic.Attack(angleInRadian);
  467. if (!result)
  468. logger->warn("Attack: failed at {}ms", Time::TimeSinceStart(startPoint));
  469. return result; });
  470. }
  471. std::future<bool> StudentDebugAPI::Attack(double angleInRadian)
  472. {
  473. logger->info("Attack: angleInRadian = {}, called at {}ms", angleInRadian, Time::TimeSinceStart(startPoint));
  474. return std::async(std::launch::async, [=]()
  475. { auto result = logic.Attack(angleInRadian);
  476. if (!result)
  477. logger->warn("Attack: failed at {}ms", Time::TimeSinceStart(startPoint));
  478. return result; });
  479. }
  480. std::shared_ptr<const THUAI6::Tricker> TrickerDebugAPI::GetSelfInfo() const
  481. {
  482. return logic.TrickerGetSelfInfo();
  483. }
  484. void StudentDebugAPI::PrintStudent() const
  485. {
  486. for (const auto& student : logic.GetStudents())
  487. {
  488. logger->info("******Student Info******");
  489. logger->info("playerID={}, GUID={}, x={}, y={}", student->playerID, student->guid, student->x, student->y);
  490. logger->info("speed={}, view range={}, place={}", student->speed, student->viewRange, THUAI6::placeTypeDict[student->place]);
  491. logger->info("state={}, determination={}, addiction={}", THUAI6::playerStateDict[student->playerState], student->determination, student->addiction);
  492. std::string skillTime = "skill time=";
  493. for (const auto& time : student->timeUntilSkillAvailable)
  494. skillTime += std::to_string(time) + ", ";
  495. logger->info(skillTime);
  496. std::string studentBuff = "buff=";
  497. std::string studentProp = "prop=";
  498. for (const auto& buff : student->buff)
  499. studentBuff += THUAI6::studentBuffDict[buff] + ", ";
  500. for (const auto& prop : student->props)
  501. studentProp += THUAI6::propTypeDict[prop] + ", ";
  502. logger->info(studentBuff);
  503. logger->info(studentProp);
  504. logger->info("**********************");
  505. }
  506. }
  507. void TrickerDebugAPI::PrintStudent() const
  508. {
  509. for (const auto& student : logic.GetStudents())
  510. {
  511. logger->info("******Student Info******");
  512. logger->info("playerID={}, GUID={}, x={}, y={}", student->playerID, student->guid, student->x, student->y);
  513. logger->info("speed={}, view range={}, place={}", student->speed, student->viewRange, THUAI6::placeTypeDict[student->place]);
  514. logger->info("state={}, determination={}, addiction={}", THUAI6::playerStateDict[student->playerState], student->determination, student->addiction);
  515. std::string skillTime = "skill time=";
  516. for (const auto& time : student->timeUntilSkillAvailable)
  517. skillTime += std::to_string(time) + ", ";
  518. logger->info(skillTime);
  519. std::string studentBuff = "buff=";
  520. std::string studentProp = "prop=";
  521. for (const auto& buff : student->buff)
  522. studentBuff += THUAI6::studentBuffDict[buff] + ", ";
  523. for (const auto& prop : student->props)
  524. studentProp += THUAI6::propTypeDict[prop] + ", ";
  525. logger->info(studentBuff);
  526. logger->info(studentProp);
  527. logger->info("**********************");
  528. }
  529. }
  530. void StudentDebugAPI::PrintTricker() const
  531. {
  532. for (const auto& tricker : logic.GetTrickers())
  533. {
  534. logger->info("******Tricker Info******");
  535. logger->info("playerID={}, GUID={}, x={}, y={}", tricker->playerID, tricker->guid, tricker->x, tricker->y);
  536. logger->info("speed={}, view range={}, place={}", tricker->speed, tricker->viewRange, THUAI6::placeTypeDict[tricker->place]);
  537. logger->info("state={}", THUAI6::playerStateDict[tricker->playerState]);
  538. std::string skillTime = "skill time=";
  539. for (const auto& time : tricker->timeUntilSkillAvailable)
  540. skillTime += std::to_string(time) + ", ";
  541. logger->info(skillTime);
  542. std::string trickerBuff = "buff=";
  543. for (const auto& buff : tricker->buff)
  544. trickerBuff += THUAI6::trickerBuffDict[buff] + ", ";
  545. logger->info(trickerBuff);
  546. std::string trickerProp = "prop=";
  547. for (const auto& prop : tricker->props)
  548. trickerProp += THUAI6::propTypeDict[prop] + ", ";
  549. logger->info(trickerProp);
  550. logger->info("************************");
  551. }
  552. }
  553. void TrickerDebugAPI::PrintTricker() const
  554. {
  555. for (auto tricker : logic.GetTrickers())
  556. {
  557. logger->info("******Tricker Info******");
  558. logger->info("playerID={}, GUID={}, x={}, y={}", tricker->playerID, tricker->guid, tricker->x, tricker->y);
  559. logger->info("speed={}, view range={}, place={}", tricker->speed, tricker->viewRange, THUAI6::placeTypeDict[tricker->place]);
  560. logger->info("state={}", THUAI6::playerStateDict[tricker->playerState]);
  561. std::string skillTime = "skill time=";
  562. for (const auto& time : tricker->timeUntilSkillAvailable)
  563. skillTime += std::to_string(time) + ", ";
  564. logger->info(skillTime);
  565. std::string trickerBuff = "buff=";
  566. for (const auto& buff : tricker->buff)
  567. trickerBuff += THUAI6::trickerBuffDict[buff] + ", ";
  568. logger->info(trickerBuff);
  569. std::string trickerProp = "prop=";
  570. for (const auto& prop : tricker->props)
  571. trickerProp += THUAI6::propTypeDict[prop] + ", ";
  572. logger->info(trickerProp);
  573. logger->info("************************");
  574. }
  575. }
  576. void StudentDebugAPI::PrintProp() const
  577. {
  578. for (auto prop : logic.GetProps())
  579. {
  580. logger->info("******Prop Info******");
  581. logger->info("GUID={}, x={}, y={}, place={}", prop->guid, prop->x, prop->y, THUAI6::placeTypeDict[prop->place]);
  582. logger->info("*********************");
  583. }
  584. }
  585. void TrickerDebugAPI::PrintProp() const
  586. {
  587. for (auto prop : logic.GetProps())
  588. {
  589. logger->info("******Prop Info******");
  590. logger->info("GUID={}, x={}, y={}, place={}", prop->guid, prop->x, prop->y, THUAI6::placeTypeDict[prop->place]);
  591. logger->info("*********************");
  592. }
  593. }
  594. void StudentDebugAPI::PrintSelfInfo() const
  595. {
  596. auto self = logic.StudentGetSelfInfo();
  597. logger->info("******Self Info******");
  598. logger->info("playerID={}, GUID={}, x={}, y={}", self->playerID, self->guid, self->x, self->y);
  599. logger->info("speed={}, view range={}, place={}", self->speed, self->viewRange, THUAI6::placeTypeDict[self->place]);
  600. logger->info("state={}, determination={}, addiction", THUAI6::playerStateDict[self->playerState], self->determination, self->addiction);
  601. std::string skillTime = "skill time=";
  602. for (const auto& time : self->timeUntilSkillAvailable)
  603. skillTime += std::to_string(time) + ", ";
  604. logger->info(skillTime);
  605. std::string studentBuff = "buff=";
  606. for (const auto& buff : self->buff)
  607. studentBuff += THUAI6::studentBuffDict[buff] + ", ";
  608. logger->info(studentBuff);
  609. std::string studentProp = "prop=";
  610. for (const auto& prop : self->props)
  611. studentProp += THUAI6::propTypeDict[prop] + ", ";
  612. logger->info(studentProp);
  613. logger->info("*********************");
  614. }
  615. void TrickerDebugAPI::PrintSelfInfo() const
  616. {
  617. auto self = logic.TrickerGetSelfInfo();
  618. logger->info("******Self Info******");
  619. logger->info("playerID={}, GUID={}, x={}, y={}", self->playerID, self->guid, self->x, self->y);
  620. logger->info("speed={}, view range={}, place={}", self->speed, self->viewRange, THUAI6::placeTypeDict[self->place]);
  621. logger->info("state={}", THUAI6::playerStateDict[self->playerState]);
  622. std::string skillTime = "skill time=";
  623. for (const auto& time : self->timeUntilSkillAvailable)
  624. skillTime += std::to_string(time) + ", ";
  625. logger->info(skillTime);
  626. std::string trickerBuff = "buff=";
  627. for (const auto& buff : self->buff)
  628. trickerBuff += THUAI6::trickerBuffDict[buff] + ", ";
  629. logger->info(trickerBuff);
  630. std::string trickerProp = "prop=";
  631. for (const auto& prop : self->props)
  632. trickerProp += THUAI6::propTypeDict[prop] + ", ";
  633. logger->info(trickerProp);
  634. logger->info("*********************");
  635. }
  636. void StudentDebugAPI::Play(IAI& ai)
  637. {
  638. ai.play(*this);
  639. }
  640. void TrickerDebugAPI::Play(IAI& ai)
  641. {
  642. ai.play(*this);
  643. }