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

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711
  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::GetGateProgress(int32_t cellX, int32_t cellY) const
  383. {
  384. return logic.GetGateProgress(cellX, cellY);
  385. }
  386. int32_t TrickerDebugAPI::GetGateProgress(int32_t cellX, int32_t cellY) const
  387. {
  388. return logic.GetGateProgress(cellX, cellY);
  389. }
  390. std::shared_ptr<const THUAI6::GameInfo> StudentDebugAPI::GetGameInfo() const
  391. {
  392. return logic.GetGameInfo();
  393. }
  394. std::shared_ptr<const THUAI6::GameInfo> TrickerDebugAPI::GetGameInfo() const
  395. {
  396. return logic.GetGameInfo();
  397. }
  398. std::vector<int64_t> StudentDebugAPI::GetPlayerGUIDs() const
  399. {
  400. return logic.GetPlayerGUIDs();
  401. }
  402. std::vector<int64_t> TrickerDebugAPI::GetPlayerGUIDs() const
  403. {
  404. return logic.GetPlayerGUIDs();
  405. }
  406. std::future<bool> StudentDebugAPI::StartLearning()
  407. {
  408. logger->info("StartLearning: called at {}ms", Time::TimeSinceStart(startPoint));
  409. return std::async(std::launch::async, [this]()
  410. { auto result = logic.StartLearning();
  411. if (!result)
  412. logger->warn("StartLearning: failed at {}ms", Time::TimeSinceStart(startPoint));
  413. return result; });
  414. }
  415. std::future<bool> StudentDebugAPI::StartRescueMate()
  416. {
  417. logger->info("StartRescueMate: called at {}ms", Time::TimeSinceStart(startPoint));
  418. return std::async(std::launch::async, [this]()
  419. { auto result = logic.StartRescueMate();
  420. if (!result)
  421. logger->warn("StartRescueMate: failed at {}ms", Time::TimeSinceStart(startPoint));
  422. return result; });
  423. }
  424. std::future<bool> StudentDebugAPI::StartTreatMate()
  425. {
  426. logger->info("StartTreatMate: called at {}ms", Time::TimeSinceStart(startPoint));
  427. return std::async(std::launch::async, [this]()
  428. { auto result = logic.StartTreatMate();
  429. if (!result)
  430. logger->warn("StartTreatMate: failed at {}ms", Time::TimeSinceStart(startPoint));
  431. return result; });
  432. }
  433. std::future<bool> StudentDebugAPI::Graduate()
  434. {
  435. logger->info("Graduate: called at {}ms", Time::TimeSinceStart(startPoint));
  436. return std::async(std::launch::async, [this]()
  437. { auto result = logic.Graduate();
  438. if (!result)
  439. logger->warn("Graduate: failed at {}ms", Time::TimeSinceStart(startPoint));
  440. return result; });
  441. }
  442. std::shared_ptr<const THUAI6::Student> StudentDebugAPI::GetSelfInfo() const
  443. {
  444. return logic.StudentGetSelfInfo();
  445. }
  446. std::future<bool> TrickerDebugAPI::Attack(double angleInRadian)
  447. {
  448. logger->info("Attack: angleInRadian = {}, called at {}ms", angleInRadian, Time::TimeSinceStart(startPoint));
  449. return std::async(std::launch::async, [=]()
  450. { auto result = logic.Attack(angleInRadian);
  451. if (!result)
  452. logger->warn("Attack: failed at {}ms", Time::TimeSinceStart(startPoint));
  453. return result; });
  454. }
  455. std::future<bool> StudentDebugAPI::Attack(double angleInRadian)
  456. {
  457. logger->info("Attack: angleInRadian = {}, called at {}ms", angleInRadian, Time::TimeSinceStart(startPoint));
  458. return std::async(std::launch::async, [=]()
  459. { auto result = logic.Attack(angleInRadian);
  460. if (!result)
  461. logger->warn("Attack: failed at {}ms", Time::TimeSinceStart(startPoint));
  462. return result; });
  463. }
  464. std::shared_ptr<const THUAI6::Tricker> TrickerDebugAPI::GetSelfInfo() const
  465. {
  466. return logic.TrickerGetSelfInfo();
  467. }
  468. void StudentDebugAPI::PrintStudent() const
  469. {
  470. for (const auto& student : logic.GetStudents())
  471. {
  472. logger->info("******Student Info******");
  473. logger->info("playerID={}, GUID={}, x={}, y={}", student->playerID, student->guid, student->x, student->y);
  474. logger->info("speed={}, view range={}, place={}", student->speed, student->viewRange, THUAI6::placeTypeDict[student->place]);
  475. logger->info("state={}, determination={}, addiction={}", THUAI6::playerStateDict[student->playerState], student->determination, student->addiction);
  476. std::string skillTime = "skill time=";
  477. for (const auto& time : student->timeUntilSkillAvailable)
  478. skillTime += std::to_string(time) + ", ";
  479. logger->info(skillTime);
  480. std::string studentBuff = "buff=";
  481. std::string studentProp = "prop=";
  482. for (const auto& buff : student->buff)
  483. studentBuff += THUAI6::studentBuffDict[buff] + ", ";
  484. for (const auto& prop : student->props)
  485. studentProp += THUAI6::propTypeDict[prop] + ", ";
  486. logger->info(studentBuff);
  487. logger->info(studentProp);
  488. logger->info("**********************");
  489. }
  490. }
  491. void TrickerDebugAPI::PrintStudent() const
  492. {
  493. for (const auto& student : logic.GetStudents())
  494. {
  495. logger->info("******Student Info******");
  496. logger->info("playerID={}, GUID={}, x={}, y={}", student->playerID, student->guid, student->x, student->y);
  497. logger->info("speed={}, view range={}, place={}", student->speed, student->viewRange, THUAI6::placeTypeDict[student->place]);
  498. logger->info("state={}, determination={}, addiction={}", THUAI6::playerStateDict[student->playerState], student->determination, student->addiction);
  499. std::string skillTime = "skill time=";
  500. for (const auto& time : student->timeUntilSkillAvailable)
  501. skillTime += std::to_string(time) + ", ";
  502. logger->info(skillTime);
  503. std::string studentBuff = "buff=";
  504. std::string studentProp = "prop=";
  505. for (const auto& buff : student->buff)
  506. studentBuff += THUAI6::studentBuffDict[buff] + ", ";
  507. for (const auto& prop : student->props)
  508. studentProp += THUAI6::propTypeDict[prop] + ", ";
  509. logger->info(studentBuff);
  510. logger->info(studentProp);
  511. logger->info("**********************");
  512. }
  513. }
  514. void StudentDebugAPI::PrintTricker() const
  515. {
  516. for (const auto& tricker : logic.GetTrickers())
  517. {
  518. logger->info("******Tricker Info******");
  519. logger->info("playerID={}, GUID={}, x={}, y={}", tricker->playerID, tricker->guid, tricker->x, tricker->y);
  520. logger->info("speed={}, view range={}, place={}", tricker->speed, tricker->viewRange, THUAI6::placeTypeDict[tricker->place]);
  521. logger->info("damage={}, state={}", tricker->damage, THUAI6::playerStateDict[tricker->playerState]);
  522. std::string skillTime = "skill time=";
  523. for (const auto& time : tricker->timeUntilSkillAvailable)
  524. skillTime += std::to_string(time) + ", ";
  525. logger->info(skillTime);
  526. std::string trickerBuff = "buff=";
  527. for (const auto& buff : tricker->buff)
  528. trickerBuff += THUAI6::trickerBuffDict[buff] + ", ";
  529. logger->info(trickerBuff);
  530. std::string trickerProp = "prop=";
  531. for (const auto& prop : tricker->props)
  532. trickerProp += THUAI6::propTypeDict[prop] + ", ";
  533. logger->info(trickerProp);
  534. logger->info("************************");
  535. }
  536. }
  537. void TrickerDebugAPI::PrintTricker() const
  538. {
  539. for (auto tricker : logic.GetTrickers())
  540. {
  541. logger->info("******Tricker Info******");
  542. logger->info("playerID={}, GUID={}, x={}, y={}", tricker->playerID, tricker->guid, tricker->x, tricker->y);
  543. logger->info("speed={}, view range={}, place={}", tricker->speed, tricker->viewRange, THUAI6::placeTypeDict[tricker->place]);
  544. logger->info("damage={}, state={}", tricker->damage, THUAI6::playerStateDict[tricker->playerState]);
  545. std::string skillTime = "skill time=";
  546. for (const auto& time : tricker->timeUntilSkillAvailable)
  547. skillTime += std::to_string(time) + ", ";
  548. logger->info(skillTime);
  549. std::string trickerBuff = "buff=";
  550. for (const auto& buff : tricker->buff)
  551. trickerBuff += THUAI6::trickerBuffDict[buff] + ", ";
  552. logger->info(trickerBuff);
  553. std::string trickerProp = "prop=";
  554. for (const auto& prop : tricker->props)
  555. trickerProp += THUAI6::propTypeDict[prop] + ", ";
  556. logger->info(trickerProp);
  557. logger->info("************************");
  558. }
  559. }
  560. void StudentDebugAPI::PrintProp() const
  561. {
  562. for (auto prop : logic.GetProps())
  563. {
  564. logger->info("******Prop Info******");
  565. logger->info("GUID={}, x={}, y={}, place={}, is moving={}", prop->guid, prop->x, prop->y, THUAI6::placeTypeDict[prop->place], prop->isMoving);
  566. logger->info("*********************");
  567. }
  568. }
  569. void TrickerDebugAPI::PrintProp() const
  570. {
  571. for (auto prop : logic.GetProps())
  572. {
  573. logger->info("******Prop Info******");
  574. logger->info("GUID={}, x={}, y={}, place={}, is moving={}", prop->guid, prop->x, prop->y, THUAI6::placeTypeDict[prop->place], prop->isMoving);
  575. logger->info("*********************");
  576. }
  577. }
  578. void StudentDebugAPI::PrintSelfInfo() const
  579. {
  580. auto self = logic.StudentGetSelfInfo();
  581. logger->info("******Self Info******");
  582. logger->info("playerID={}, GUID={}, x={}, y={}", self->playerID, self->guid, self->x, self->y);
  583. logger->info("speed={}, view range={}, place={}", self->speed, self->viewRange, THUAI6::placeTypeDict[self->place]);
  584. logger->info("state={}, determination={}, addiction", THUAI6::playerStateDict[self->playerState], self->determination, self->addiction);
  585. std::string skillTime = "skill time=";
  586. for (const auto& time : self->timeUntilSkillAvailable)
  587. skillTime += std::to_string(time) + ", ";
  588. logger->info(skillTime);
  589. std::string studentBuff = "buff=";
  590. for (const auto& buff : self->buff)
  591. studentBuff += THUAI6::studentBuffDict[buff] + ", ";
  592. logger->info(studentBuff);
  593. std::string studentProp = "prop=";
  594. for (const auto& prop : self->props)
  595. studentProp += THUAI6::propTypeDict[prop] + ", ";
  596. logger->info(studentProp);
  597. logger->info("*********************");
  598. }
  599. void TrickerDebugAPI::PrintSelfInfo() const
  600. {
  601. auto self = logic.TrickerGetSelfInfo();
  602. logger->info("******Self Info******");
  603. logger->info("playerID={}, GUID={}, x={}, y={}", self->playerID, self->guid, self->x, self->y);
  604. logger->info("speed={}, view range={}, place={}", self->speed, self->viewRange, THUAI6::placeTypeDict[self->place]);
  605. logger->info("damage={}, state={}", self->damage, THUAI6::playerStateDict[self->playerState]);
  606. std::string skillTime = "skill time=";
  607. for (const auto& time : self->timeUntilSkillAvailable)
  608. skillTime += std::to_string(time) + ", ";
  609. logger->info(skillTime);
  610. std::string trickerBuff = "buff=";
  611. for (const auto& buff : self->buff)
  612. trickerBuff += THUAI6::trickerBuffDict[buff] + ", ";
  613. logger->info(trickerBuff);
  614. std::string trickerProp = "prop=";
  615. for (const auto& prop : self->props)
  616. trickerProp += THUAI6::propTypeDict[prop] + ", ";
  617. logger->info(trickerProp);
  618. logger->info("*********************");
  619. }
  620. void StudentDebugAPI::Play(IAI& ai)
  621. {
  622. ai.play(*this);
  623. }
  624. void TrickerDebugAPI::Play(IAI& ai)
  625. {
  626. ai.play(*this);
  627. }