@supalosa/chronodivide-bot 0.3.1 → 0.5.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (149) hide show
  1. package/.env.template +5 -0
  2. package/README.md +57 -39
  3. package/dist/bot/bot.js +27 -37
  4. package/dist/bot/bot.js.map +1 -1
  5. package/dist/bot/logic/awareness.js +13 -8
  6. package/dist/bot/logic/awareness.js.map +1 -1
  7. package/dist/bot/logic/awarenessImpl.js +132 -0
  8. package/dist/bot/logic/awarenessImpl.js.map +1 -0
  9. package/dist/bot/logic/building/ArtilleryUnit.js +2 -29
  10. package/dist/bot/logic/building/ArtilleryUnit.js.map +1 -0
  11. package/dist/bot/logic/building/antiAirStaticDefence.js +43 -0
  12. package/dist/bot/logic/building/antiAirStaticDefence.js.map +1 -0
  13. package/dist/bot/logic/building/antiGroundStaticDefence.js +8 -5
  14. package/dist/bot/logic/building/antiGroundStaticDefence.js.map +1 -1
  15. package/dist/bot/logic/building/basicAirUnit.js +2 -23
  16. package/dist/bot/logic/building/basicAirUnit.js.map +1 -1
  17. package/dist/bot/logic/building/basicBuilding.js +3 -2
  18. package/dist/bot/logic/building/basicBuilding.js.map +1 -1
  19. package/dist/bot/logic/building/basicGroundUnit.js +2 -43
  20. package/dist/bot/logic/building/basicGroundUnit.js.map +1 -1
  21. package/dist/bot/logic/building/building.js +55 -11
  22. package/dist/bot/logic/building/building.js.map +1 -0
  23. package/dist/bot/logic/building/buildingRules.js +62 -50
  24. package/dist/bot/logic/building/buildingRules.js.map +1 -1
  25. package/dist/bot/logic/building/common.js +19 -0
  26. package/dist/bot/logic/building/common.js.map +1 -0
  27. package/dist/bot/logic/building/harvester.js +2 -1
  28. package/dist/bot/logic/building/harvester.js.map +1 -1
  29. package/dist/bot/logic/building/queueController.js +73 -41
  30. package/dist/bot/logic/building/queueController.js.map +1 -1
  31. package/dist/bot/logic/common/utils.js +35 -0
  32. package/dist/bot/logic/common/utils.js.map +1 -1
  33. package/dist/bot/logic/composition/alliedCompositions.js +13 -0
  34. package/dist/bot/logic/composition/alliedCompositions.js.map +1 -0
  35. package/dist/bot/logic/composition/common.js +2 -0
  36. package/dist/bot/logic/composition/common.js.map +1 -0
  37. package/dist/bot/logic/composition/sovietCompositions.js +13 -0
  38. package/dist/bot/logic/composition/sovietCompositions.js.map +1 -0
  39. package/dist/bot/logic/mission/actionBatcher.js +92 -0
  40. package/dist/bot/logic/mission/actionBatcher.js.map +1 -0
  41. package/dist/bot/logic/mission/behaviours/combatSquad.js +124 -0
  42. package/dist/bot/logic/mission/behaviours/combatSquad.js.map +1 -0
  43. package/dist/bot/logic/mission/behaviours/common.js +58 -0
  44. package/dist/bot/logic/mission/behaviours/common.js.map +1 -0
  45. package/dist/bot/logic/mission/behaviours/engineerSquad.js +39 -0
  46. package/dist/bot/logic/mission/behaviours/engineerSquad.js.map +1 -0
  47. package/dist/bot/logic/mission/behaviours/expansionSquad.js +46 -0
  48. package/dist/bot/logic/mission/behaviours/expansionSquad.js.map +1 -0
  49. package/dist/bot/logic/mission/behaviours/retreatSquad.js +31 -0
  50. package/dist/bot/logic/mission/behaviours/retreatSquad.js.map +1 -0
  51. package/{src/bot/logic/squad/behaviours/scoutingSquad.ts → dist/bot/logic/mission/behaviours/scoutingSquad.js} +29 -47
  52. package/dist/bot/logic/mission/behaviours/scoutingSquad.js.map +1 -0
  53. package/dist/bot/logic/mission/mission.js +91 -19
  54. package/dist/bot/logic/mission/mission.js.map +1 -1
  55. package/dist/bot/logic/mission/missionController.js +262 -21
  56. package/dist/bot/logic/mission/missionController.js.map +1 -1
  57. package/dist/bot/logic/mission/missions/attackMission.js +159 -52
  58. package/dist/bot/logic/mission/missions/attackMission.js.map +1 -1
  59. package/dist/bot/logic/mission/missions/basicMission.js +13 -0
  60. package/dist/bot/logic/mission/missions/basicMission.js.map +1 -0
  61. package/dist/bot/logic/mission/missions/defenceMission.js +43 -28
  62. package/dist/bot/logic/mission/missions/defenceMission.js.map +1 -1
  63. package/dist/bot/logic/mission/missions/engineerMission.js +37 -7
  64. package/dist/bot/logic/mission/missions/engineerMission.js.map +1 -1
  65. package/dist/bot/logic/mission/missions/expansionMission.js +42 -6
  66. package/dist/bot/logic/mission/missions/expansionMission.js.map +1 -1
  67. package/dist/bot/logic/mission/missions/missionBehaviour.js +2 -0
  68. package/dist/bot/logic/mission/missions/missionBehaviour.js.map +1 -0
  69. package/dist/bot/logic/mission/missions/retreatMission.js +31 -5
  70. package/dist/bot/logic/mission/missions/retreatMission.js.map +1 -1
  71. package/dist/bot/logic/mission/missions/scoutingMission.js +103 -6
  72. package/dist/bot/logic/mission/missions/scoutingMission.js.map +1 -1
  73. package/dist/bot/logic/mission/missions/squads/combatSquad.js +116 -0
  74. package/dist/bot/logic/mission/missions/squads/combatSquad.js.map +1 -0
  75. package/dist/bot/logic/mission/missions/squads/common.js +58 -0
  76. package/dist/bot/logic/mission/missions/squads/common.js.map +1 -0
  77. package/dist/bot/logic/mission/missions/squads/squad.js +2 -0
  78. package/dist/bot/logic/mission/missions/squads/squad.js.map +1 -0
  79. package/dist/bot/logic/squad/behaviours/attackSquad.js +63 -56
  80. package/dist/bot/logic/squad/behaviours/combatSquad.js +19 -18
  81. package/dist/bot/logic/squad/behaviours/combatSquad.js.map +1 -1
  82. package/dist/bot/logic/squad/behaviours/common.js +2 -19
  83. package/dist/bot/logic/squad/behaviours/common.js.map +1 -1
  84. package/dist/bot/logic/squad/behaviours/defenceSquad.js +15 -2
  85. package/dist/bot/logic/squad/behaviours/retreatSquad.js.map +1 -1
  86. package/dist/bot/logic/squad/behaviours/scoutingSquad.js +17 -21
  87. package/dist/bot/logic/squad/behaviours/scoutingSquad.js.map +1 -1
  88. package/dist/bot/logic/squad/squad.js +8 -5
  89. package/dist/bot/logic/squad/squad.js.map +1 -1
  90. package/dist/bot/logic/squad/squadBehaviour.js.map +1 -1
  91. package/dist/bot/logic/squad/squadController.js +3 -2
  92. package/dist/bot/logic/squad/squadController.js.map +1 -1
  93. package/dist/bot/logic/threat/threatCalculator.js +5 -5
  94. package/dist/bot/logic/threat/threatCalculator.js.map +1 -1
  95. package/dist/exampleBot.js +53 -16
  96. package/dist/exampleBot.js.map +1 -1
  97. package/package.json +5 -4
  98. package/src/bot/bot.ts +38 -53
  99. package/src/bot/logic/awareness.ts +34 -22
  100. package/src/bot/logic/building/antiAirStaticDefence.ts +64 -0
  101. package/src/bot/logic/building/antiGroundStaticDefence.ts +7 -20
  102. package/src/bot/logic/building/artilleryUnit.ts +2 -28
  103. package/src/bot/logic/building/basicAirUnit.ts +2 -33
  104. package/src/bot/logic/building/basicBuilding.ts +8 -6
  105. package/src/bot/logic/building/basicGroundUnit.ts +2 -46
  106. package/src/bot/logic/building/buildingRules.ts +73 -57
  107. package/src/bot/logic/building/common.ts +23 -0
  108. package/src/bot/logic/building/harvester.ts +2 -1
  109. package/src/bot/logic/building/queueController.ts +105 -42
  110. package/src/bot/logic/common/utils.ts +47 -0
  111. package/src/bot/logic/composition/alliedCompositions.ts +22 -0
  112. package/src/bot/logic/composition/common.ts +3 -0
  113. package/src/bot/logic/composition/sovietCompositions.ts +21 -0
  114. package/src/bot/logic/mission/actionBatcher.ts +124 -0
  115. package/src/bot/logic/mission/mission.ts +186 -37
  116. package/src/bot/logic/mission/missionController.ts +340 -31
  117. package/src/bot/logic/mission/missionFactories.ts +3 -3
  118. package/src/bot/logic/mission/missions/attackMission.ts +234 -56
  119. package/src/bot/logic/mission/missions/defenceMission.ts +72 -45
  120. package/src/bot/logic/mission/missions/engineerMission.ts +67 -15
  121. package/src/bot/logic/mission/missions/expansionMission.ts +67 -14
  122. package/src/bot/logic/mission/missions/retreatMission.ts +50 -6
  123. package/src/bot/logic/mission/missions/scoutingMission.ts +138 -14
  124. package/src/bot/logic/mission/missions/squads/combatSquad.ts +160 -0
  125. package/src/bot/logic/{squad/behaviours → mission/missions/squads}/common.ts +14 -20
  126. package/src/bot/logic/mission/missions/squads/squad.ts +19 -0
  127. package/src/bot/logic/threat/threat.ts +15 -15
  128. package/src/bot/logic/threat/threatCalculator.ts +10 -10
  129. package/src/exampleBot.ts +59 -19
  130. package/.prettierrc +0 -5
  131. package/TODO.md +0 -18
  132. package/dist/bot/logic/building/artilleryUnit.js.map +0 -1
  133. package/dist/bot/logic/building/massedAntiGroundUnit.js +0 -20
  134. package/dist/bot/logic/building/queues.js +0 -19
  135. package/dist/bot/logic/knowledge.js +0 -1
  136. package/dist/bot/logic/mission/basicMission.js +0 -26
  137. package/dist/bot/logic/mission/expansionMission.js +0 -32
  138. package/dist/bot/logic/squad/behaviours/squadExpansion.js +0 -31
  139. package/dist/bot/logic/squad/behaviours/squadScouters.js +0 -8
  140. package/rules.ini +0 -23126
  141. package/src/bot/logic/mission/missions/oneTimeMission.ts +0 -33
  142. package/src/bot/logic/squad/behaviours/combatSquad.ts +0 -127
  143. package/src/bot/logic/squad/behaviours/engineerSquad.ts +0 -53
  144. package/src/bot/logic/squad/behaviours/expansionSquad.ts +0 -59
  145. package/src/bot/logic/squad/behaviours/retreatSquad.ts +0 -44
  146. package/src/bot/logic/squad/squad.ts +0 -159
  147. package/src/bot/logic/squad/squadBehaviour.ts +0 -62
  148. package/src/bot/logic/squad/squadBehaviours.ts +0 -8
  149. package/src/bot/logic/squad/squadController.ts +0 -254
@@ -0,0 +1,39 @@
1
+ import { OrderType } from "@chronodivide/game-api";
2
+ import { disbandMission, noop, requestUnits } from "../mission.js";
3
+ const CAPTURE_COOLDOWN_TICKS = 30;
4
+ // Capture squad
5
+ export class EngineerSquad {
6
+ /**
7
+ * @param captureTarget ID of the target to try and capture/send engineer into.
8
+ */
9
+ constructor(captureTarget, priority) {
10
+ this.captureTarget = captureTarget;
11
+ this.priority = priority;
12
+ this.hasAttemptedCaptureWith = null;
13
+ }
14
+ onAiUpdate(gameApi, actionsApi, actionBatcher, playerData, mission, matchAwareness) {
15
+ const engineerTypes = ["ENGINEER", "SENGINEER"];
16
+ const engineers = mission.getUnitsOfTypes(gameApi, ...engineerTypes);
17
+ if (engineers.length === 0) {
18
+ // Perhaps we deployed already (or the unit was destroyed), end the mission.
19
+ if (this.hasAttemptedCaptureWith !== null) {
20
+ return disbandMission();
21
+ }
22
+ return requestUnits(engineerTypes, this.priority);
23
+ }
24
+ else if (!this.hasAttemptedCaptureWith ||
25
+ gameApi.getCurrentTick() > this.hasAttemptedCaptureWith.gameTick + CAPTURE_COOLDOWN_TICKS) {
26
+ actionsApi.orderUnits(engineers.map((engineer) => engineer.id), OrderType.Capture, this.captureTarget);
27
+ // Add a cooldown to deploy attempts.
28
+ this.hasAttemptedCaptureWith = {
29
+ unitId: engineers[0].id,
30
+ gameTick: gameApi.getCurrentTick(),
31
+ };
32
+ }
33
+ return noop();
34
+ }
35
+ getGlobalDebugText() {
36
+ return undefined;
37
+ }
38
+ }
39
+ //# sourceMappingURL=engineerSquad.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"engineerSquad.js","sourceRoot":"","sources":["../../../../../src/bot/logic/mission/behaviours/engineerSquad.ts"],"names":[],"mappings":"AAAA,OAAO,EAAuB,SAAS,EAAwB,MAAM,wBAAwB,CAAC;AAI9F,OAAO,EAA0B,cAAc,EAAE,IAAI,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAE3F,MAAM,sBAAsB,GAAG,EAAE,CAAC;AAElC,gBAAgB;AAChB,MAAM,OAAO,aAAa;IAMtB;;OAEG;IACH,YACY,aAAqB,EACrB,QAAgB;QADhB,kBAAa,GAAb,aAAa,CAAQ;QACrB,aAAQ,GAAR,QAAQ,CAAQ;QAVpB,4BAAuB,GAGpB,IAAI,CAAC;IAQb,CAAC;IAEG,UAAU,CACb,OAAgB,EAChB,UAAsB,EACtB,aAA4B,EAC5B,UAAsB,EACtB,OAA+B,EAC/B,cAA8B;QAE9B,MAAM,aAAa,GAAG,CAAC,UAAU,EAAE,WAAW,CAAC,CAAC;QAChD,MAAM,SAAS,GAAG,OAAO,CAAC,eAAe,CAAC,OAAO,EAAE,GAAG,aAAa,CAAC,CAAC;QACrE,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE;YACxB,4EAA4E;YAC5E,IAAI,IAAI,CAAC,uBAAuB,KAAK,IAAI,EAAE;gBACvC,OAAO,cAAc,EAAE,CAAC;aAC3B;YACD,OAAO,YAAY,CAAC,aAAa,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;SACrD;aAAM,IACH,CAAC,IAAI,CAAC,uBAAuB;YAC7B,OAAO,CAAC,cAAc,EAAE,GAAG,IAAI,CAAC,uBAAuB,CAAC,QAAQ,GAAG,sBAAsB,EAC3F;YACE,UAAU,CAAC,UAAU,CACjB,SAAS,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,EACxC,SAAS,CAAC,OAAO,EACjB,IAAI,CAAC,aAAa,CACrB,CAAC;YACF,qCAAqC;YACrC,IAAI,CAAC,uBAAuB,GAAG;gBAC3B,MAAM,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC,EAAE;gBACvB,QAAQ,EAAE,OAAO,CAAC,cAAc,EAAE;aACrC,CAAC;SACL;QACD,OAAO,IAAI,EAAE,CAAC;IAClB,CAAC;IAEM,kBAAkB;QACrB,OAAO,SAAS,CAAC;IACrB,CAAC;CACJ"}
@@ -0,0 +1,46 @@
1
+ import { OrderType } from "@chronodivide/game-api";
2
+ import { disbandMission, noop, requestSpecificUnits, requestUnits } from "../mission.js";
3
+ const DEPLOY_COOLDOWN_TICKS = 30;
4
+ // Expansion or initial base.
5
+ export class ExpansionSquad {
6
+ /**
7
+ * @param selectedMcv ID of the MCV to try to expand with. If that unit dies, the squad will disband. If no value is provided,
8
+ * the mission requests an MCV.
9
+ */
10
+ constructor(selectedMcv, priority) {
11
+ this.selectedMcv = selectedMcv;
12
+ this.priority = priority;
13
+ this.hasAttemptedDeployWith = null;
14
+ }
15
+ onAiUpdate(gameApi, actionsApi, actionBatcher, playerData, mission, matchAwareness) {
16
+ const mcvTypes = ["AMCV", "SMCV"];
17
+ const mcvs = mission.getUnitsOfTypes(gameApi, ...mcvTypes);
18
+ if (mcvs.length === 0) {
19
+ // Perhaps we deployed already (or the unit was destroyed), end the mission.
20
+ if (this.hasAttemptedDeployWith !== null) {
21
+ return disbandMission();
22
+ }
23
+ // We need an mcv!
24
+ if (this.selectedMcv) {
25
+ return requestSpecificUnits([this.selectedMcv], this.priority);
26
+ }
27
+ else {
28
+ return requestUnits(mcvTypes, this.priority);
29
+ }
30
+ }
31
+ else if (!this.hasAttemptedDeployWith ||
32
+ gameApi.getCurrentTick() > this.hasAttemptedDeployWith.gameTick + DEPLOY_COOLDOWN_TICKS) {
33
+ actionsApi.orderUnits(mcvs.map((mcv) => mcv.id), OrderType.DeploySelected);
34
+ // Add a cooldown to deploy attempts.
35
+ this.hasAttemptedDeployWith = {
36
+ unitId: mcvs[0].id,
37
+ gameTick: gameApi.getCurrentTick(),
38
+ };
39
+ }
40
+ return noop();
41
+ }
42
+ getGlobalDebugText() {
43
+ return undefined;
44
+ }
45
+ }
46
+ //# sourceMappingURL=expansionSquad.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"expansionSquad.js","sourceRoot":"","sources":["../../../../../src/bot/logic/mission/behaviours/expansionSquad.ts"],"names":[],"mappings":"AAAA,OAAO,EAAuB,SAAS,EAAc,MAAM,wBAAwB,CAAC;AAIpF,OAAO,EAA0B,cAAc,EAAE,IAAI,EAAE,oBAAoB,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAEjH,MAAM,qBAAqB,GAAG,EAAE,CAAC;AAEjC,6BAA6B;AAC7B,MAAM,OAAO,cAAc;IAMvB;;;OAGG;IACH,YACY,WAA0B,EAC1B,QAAgB;QADhB,gBAAW,GAAX,WAAW,CAAe;QAC1B,aAAQ,GAAR,QAAQ,CAAQ;QAXpB,2BAAsB,GAGnB,IAAI,CAAC;IASb,CAAC;IAEG,UAAU,CACb,OAAgB,EAChB,UAAsB,EACtB,aAA4B,EAC5B,UAAsB,EACtB,OAAgC,EAChC,cAA8B;QAE9B,MAAM,QAAQ,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QAClC,MAAM,IAAI,GAAG,OAAO,CAAC,eAAe,CAAC,OAAO,EAAE,GAAG,QAAQ,CAAC,CAAC;QAC3D,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE;YACnB,4EAA4E;YAC5E,IAAI,IAAI,CAAC,sBAAsB,KAAK,IAAI,EAAE;gBACtC,OAAO,cAAc,EAAE,CAAC;aAC3B;YACD,kBAAkB;YAClB,IAAI,IAAI,CAAC,WAAW,EAAE;gBAClB,OAAO,oBAAoB,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;aAClE;iBAAM;gBACH,OAAO,YAAY,CAAC,QAAQ,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;aAChD;SACJ;aAAM,IACH,CAAC,IAAI,CAAC,sBAAsB;YAC5B,OAAO,CAAC,cAAc,EAAE,GAAG,IAAI,CAAC,sBAAsB,CAAC,QAAQ,GAAG,qBAAqB,EACzF;YACE,UAAU,CAAC,UAAU,CACjB,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EACzB,SAAS,CAAC,cAAc,CAC3B,CAAC;YACF,qCAAqC;YACrC,IAAI,CAAC,sBAAsB,GAAG;gBAC1B,MAAM,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE;gBAClB,QAAQ,EAAE,OAAO,CAAC,cAAc,EAAE;aACrC,CAAC;SACL;QACD,OAAO,IAAI,EAAE,CAAC;IAClB,CAAC;IAEM,kBAAkB;QACrB,OAAO,SAAS,CAAC;IACrB,CAAC;CACJ"}
@@ -0,0 +1,31 @@
1
+ import { OrderType } from "@chronodivide/game-api";
2
+ import { disbandMission, requestSpecificUnits } from "../mission.js";
3
+ const SCOUT_MOVE_COOLDOWN_TICKS = 30;
4
+ export class RetreatSquad {
5
+ constructor(unitIds, retreatToPoint) {
6
+ this.unitIds = unitIds;
7
+ this.retreatToPoint = retreatToPoint;
8
+ this.createdAt = null;
9
+ }
10
+ onAiUpdate(gameApi, actionsApi, actionBatcher, playerData, mission, matchAwareness) {
11
+ if (!this.createdAt) {
12
+ this.createdAt = gameApi.getCurrentTick();
13
+ }
14
+ if (mission.getUnitIds().length > 0) {
15
+ // Only send the order once we have managed to claim some units.
16
+ actionsApi.orderUnits(mission.getUnitIds(), OrderType.AttackMove, this.retreatToPoint.x, this.retreatToPoint.y);
17
+ return disbandMission();
18
+ }
19
+ if (this.createdAt && gameApi.getCurrentTick() > this.createdAt + 240) {
20
+ // Disband automatically after 240 ticks in case we couldn't actually claim any units.
21
+ return disbandMission();
22
+ }
23
+ else {
24
+ return requestSpecificUnits(this.unitIds, 1000);
25
+ }
26
+ }
27
+ getGlobalDebugText() {
28
+ return undefined;
29
+ }
30
+ }
31
+ //# sourceMappingURL=retreatSquad.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"retreatSquad.js","sourceRoot":"","sources":["../../../../../src/bot/logic/mission/behaviours/retreatSquad.ts"],"names":[],"mappings":"AAAA,OAAO,EAAuB,SAAS,EAAuB,MAAM,wBAAwB,CAAC;AAI7F,OAAO,EAA0B,cAAc,EAAE,oBAAoB,EAAE,MAAM,eAAe,CAAC;AAE7F,MAAM,yBAAyB,GAAG,EAAE,CAAC;AAErC,MAAM,OAAO,YAAY;IAGrB,YACY,OAAiB,EACjB,cAAuB;QADvB,YAAO,GAAP,OAAO,CAAU;QACjB,mBAAc,GAAd,cAAc,CAAS;QAJ3B,cAAS,GAAkB,IAAI,CAAC;IAKrC,CAAC;IAEG,UAAU,CACb,OAAgB,EAChB,UAAsB,EACtB,aAA4B,EAC5B,UAAsB,EACtB,OAA8B,EAC9B,cAA8B;QAE9B,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE;YACjB,IAAI,CAAC,SAAS,GAAG,OAAO,CAAC,cAAc,EAAE,CAAC;SAC7C;QACD,IAAI,OAAO,CAAC,UAAU,EAAE,CAAC,MAAM,GAAG,CAAC,EAAE;YACjC,gEAAgE;YAChE,UAAU,CAAC,UAAU,CACjB,OAAO,CAAC,UAAU,EAAE,EACpB,SAAS,CAAC,UAAU,EACpB,IAAI,CAAC,cAAc,CAAC,CAAC,EACrB,IAAI,CAAC,cAAc,CAAC,CAAC,CACxB,CAAC;YACF,OAAO,cAAc,EAAE,CAAC;SAC3B;QACD,IAAI,IAAI,CAAC,SAAS,IAAI,OAAO,CAAC,cAAc,EAAE,GAAG,IAAI,CAAC,SAAS,GAAG,GAAG,EAAE;YACnE,sFAAsF;YACtF,OAAO,cAAc,EAAE,CAAC;SAC3B;aAAM;YACH,OAAO,oBAAoB,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;SACnD;IACL,CAAC;IAEM,kBAAkB;QACrB,OAAO,SAAS,CAAC;IACrB,CAAC;CACJ"}
@@ -1,61 +1,41 @@
1
- import { ActionsApi, GameApi, OrderType, PlayerData, Vector2 } from "@chronodivide/game-api";
2
- import { Squad } from "../squad.js";
3
- import { SquadAction, SquadBehaviour, disband, noop, requestUnits } from "../squadBehaviour.js";
4
- import { MatchAwareness } from "../../awareness.js";
5
- import { DebugLogger } from "../../common/utils.js";
1
+ import { OrderType } from "@chronodivide/game-api";
6
2
  import { getDistanceBetweenTileAndPoint } from "../../map/map.js";
7
- import { PrioritisedScoutTarget } from "../../common/scout.js";
8
-
3
+ import { disbandMission, noop, requestUnits } from "../mission.js";
9
4
  const SCOUT_MOVE_COOLDOWN_TICKS = 30;
10
-
11
5
  // Max units to spend on a particular scout target.
12
6
  const MAX_ATTEMPTS_PER_TARGET = 5;
13
-
14
7
  // Maximum ticks to spend trying to scout a target *without making progress towards it*.
15
8
  // Every time a unit gets closer to the target, the timer refreshes.
16
9
  const MAX_TICKS_PER_TARGET = 600;
17
-
18
- export class ScoutingSquad implements SquadBehaviour {
19
- private scoutTarget: Vector2 | null = null;
20
- private attemptsOnCurrentTarget: number = 0;
21
- private scoutTargetRefreshedAt: number = 0;
22
- private lastMoveCommandTick: number = 0;
23
- private scoutTargetIsPermanent: boolean = false;
24
-
25
- // Minimum distance from a scout to the target.
26
- private scoutMinDistance?: number;
27
-
28
- private hadUnit: boolean = false;
29
-
30
- public onAiUpdate(
31
- gameApi: GameApi,
32
- actionsApi: ActionsApi,
33
- playerData: PlayerData,
34
- squad: Squad,
35
- matchAwareness: MatchAwareness,
36
- logger: DebugLogger,
37
- ): SquadAction {
10
+ export class ScoutingSquad {
11
+ constructor(priority) {
12
+ this.priority = priority;
13
+ this.scoutTarget = null;
14
+ this.attemptsOnCurrentTarget = 0;
15
+ this.scoutTargetRefreshedAt = 0;
16
+ this.lastMoveCommandTick = 0;
17
+ this.scoutTargetIsPermanent = false;
18
+ this.hadUnit = false;
19
+ }
20
+ onAiUpdate(gameApi, actionsApi, actionBatcher, playerData, mission, matchAwareness, logger) {
38
21
  const scoutNames = ["ADOG", "DOG", "E1", "E2", "FV", "HTK"];
39
- const scouts = squad.getUnitsOfTypes(gameApi, ...scoutNames);
40
-
22
+ const scouts = mission.getUnitsOfTypes(gameApi, ...scoutNames);
41
23
  if ((matchAwareness.getSectorCache().getOverallVisibility() || 0) > 0.9) {
42
- return disband();
24
+ return disbandMission();
43
25
  }
44
-
45
26
  if (scouts.length === 0) {
46
27
  // Count the number of times the scout dies trying to uncover the current scoutTarget.
47
28
  if (this.scoutTarget && this.hadUnit) {
48
29
  this.attemptsOnCurrentTarget++;
49
30
  this.hadUnit = false;
50
31
  }
51
- return requestUnits(scoutNames, 100);
52
- } else if (this.scoutTarget) {
32
+ return requestUnits(scoutNames, this.priority);
33
+ }
34
+ else if (this.scoutTarget) {
53
35
  this.hadUnit = true;
54
36
  if (!this.scoutTargetIsPermanent) {
55
37
  if (this.attemptsOnCurrentTarget > MAX_ATTEMPTS_PER_TARGET) {
56
- logger(
57
- `Scout target ${this.scoutTarget.x},${this.scoutTarget.y} took too many attempts, moving to next`,
58
- );
38
+ logger(`Scout target ${this.scoutTarget.x},${this.scoutTarget.y} took too many attempts, moving to next`);
59
39
  this.setScoutTarget(null, 0);
60
40
  return noop();
61
41
  }
@@ -77,12 +57,10 @@ export class ScoutingSquad implements SquadBehaviour {
77
57
  }
78
58
  });
79
59
  // Check that a scout is actually moving closer to the target.
80
- const distances = scouts.map((unit) => getDistanceBetweenTileAndPoint(unit.tile, this.scoutTarget!));
60
+ const distances = scouts.map((unit) => getDistanceBetweenTileAndPoint(unit.tile, this.scoutTarget));
81
61
  const newMinDistance = Math.min(...distances);
82
62
  if (!this.scoutMinDistance || newMinDistance < this.scoutMinDistance) {
83
- logger(
84
- `Scout timeout refreshed because unit moved closer to point (${newMinDistance} < ${this.scoutMinDistance})`,
85
- );
63
+ logger(`Scout timeout refreshed because unit moved closer to point (${newMinDistance} < ${this.scoutMinDistance})`);
86
64
  this.scoutTargetRefreshedAt = gameApi.getCurrentTick();
87
65
  this.scoutMinDistance = newMinDistance;
88
66
  }
@@ -91,22 +69,26 @@ export class ScoutingSquad implements SquadBehaviour {
91
69
  logger(`Scout target ${this.scoutTarget.x},${this.scoutTarget.y} successfully scouted, moving to next`);
92
70
  this.setScoutTarget(null, gameApi.getCurrentTick());
93
71
  }
94
- } else {
72
+ }
73
+ else {
95
74
  const nextScoutTarget = matchAwareness.getScoutingManager().getNewScoutTarget();
96
75
  if (!nextScoutTarget) {
97
76
  logger(`No more scouting targets available, disbanding.`);
98
- return disband();
77
+ return disbandMission();
99
78
  }
100
79
  this.setScoutTarget(nextScoutTarget, gameApi.getCurrentTick());
101
80
  }
102
81
  return noop();
103
82
  }
104
-
105
- setScoutTarget(target: PrioritisedScoutTarget | null, currentTick: number) {
83
+ setScoutTarget(target, currentTick) {
106
84
  this.attemptsOnCurrentTarget = 0;
107
85
  this.scoutTargetRefreshedAt = currentTick;
108
86
  this.scoutTarget = target?.asVector2() ?? null;
109
87
  this.scoutMinDistance = undefined;
110
88
  this.scoutTargetIsPermanent = target?.isPermanent ?? false;
111
89
  }
90
+ getGlobalDebugText() {
91
+ return undefined;
92
+ }
112
93
  }
94
+ //# sourceMappingURL=scoutingSquad.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scoutingSquad.js","sourceRoot":"","sources":["../../../../../src/bot/logic/mission/behaviours/scoutingSquad.ts"],"names":[],"mappings":"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"}
@@ -1,35 +1,96 @@
1
- // AI starts Missions based on heuristics, which have one or more squads.
2
- // Missions can create squads (but squads will disband themselves).
1
+ import { Vector2 } from "@chronodivide/game-api";
2
+ import { getDistanceBetweenTileAndPoint } from "../map/map.js";
3
+ const calculateCenterOfMass = (unitTiles) => {
4
+ if (unitTiles.length === 0) {
5
+ return null;
6
+ }
7
+ // TODO: use median here
8
+ const sums = unitTiles.reduce(({ x, y }, tile) => {
9
+ return {
10
+ x: x + (tile?.rx || 0),
11
+ y: y + (tile?.ry || 0),
12
+ };
13
+ }, { x: 0, y: 0 });
14
+ const centerOfMass = new Vector2(Math.round(sums.x / unitTiles.length), Math.round(sums.y / unitTiles.length));
15
+ // max distance of units to the center of mass
16
+ const distances = unitTiles.map((tile) => getDistanceBetweenTileAndPoint(tile, centerOfMass));
17
+ const maxDistance = Math.max(...distances);
18
+ return { centerOfMass, maxDistance };
19
+ };
20
+ // AI starts Missions based on heuristics.
3
21
  export class Mission {
4
- constructor(uniqueName, priority, logger) {
22
+ constructor(uniqueName, logger) {
5
23
  this.uniqueName = uniqueName;
6
- this.priority = priority;
7
24
  this.logger = logger;
8
- this.squad = null;
9
25
  this.active = true;
26
+ this.unitIds = [];
27
+ this.centerOfMass = null;
28
+ this.maxDistanceToCenterOfMass = null;
10
29
  this.onFinish = () => { };
11
30
  }
31
+ // TODO call this
32
+ updateCenterOfMass(gameApi) {
33
+ const movableUnitTiles = this.unitIds
34
+ .map((unitId) => gameApi.getUnitData(unitId))
35
+ .filter((unit) => unit?.canMove)
36
+ .map((unit) => unit?.tile)
37
+ .filter((tile) => !!tile);
38
+ const tileMetrics = calculateCenterOfMass(movableUnitTiles);
39
+ if (tileMetrics) {
40
+ this.centerOfMass = tileMetrics.centerOfMass;
41
+ this.maxDistanceToCenterOfMass = tileMetrics.maxDistance;
42
+ }
43
+ else {
44
+ this.centerOfMass = null;
45
+ this.maxDistanceToCenterOfMass = null;
46
+ }
47
+ }
48
+ onAiUpdate(gameApi, actionsApi, playerData, matchAwareness, actionBatcher) {
49
+ this.updateCenterOfMass(gameApi);
50
+ return this._onAiUpdate(gameApi, actionsApi, playerData, matchAwareness, actionBatcher);
51
+ }
12
52
  isActive() {
13
53
  return this.active;
14
54
  }
15
- setSquad(squad) {
16
- this.squad = squad;
17
- return registerSquad(squad);
55
+ getUnitIds() {
56
+ return this.unitIds;
57
+ }
58
+ removeUnit(unitIdToRemove) {
59
+ this.unitIds = this.unitIds.filter((unitId) => unitId != unitIdToRemove);
60
+ }
61
+ addUnit(unitIdToAdd) {
62
+ this.unitIds.push(unitIdToAdd);
63
+ }
64
+ getUnits(gameApi) {
65
+ return this.unitIds
66
+ .map((unitId) => gameApi.getUnitData(unitId))
67
+ .filter((unit) => unit != null)
68
+ .map((unit) => unit);
18
69
  }
19
- getSquad() {
20
- return this.squad;
70
+ getUnitsOfTypes(gameApi, ...names) {
71
+ return this.unitIds
72
+ .map((unitId) => gameApi.getUnitData(unitId))
73
+ .filter((unit) => !!unit && names.includes(unit.name))
74
+ .map((unit) => unit);
21
75
  }
22
- removeSquad() {
23
- // The squad was removed from this mission.
24
- this.squad = null;
76
+ getUnitsMatching(gameApi, filter) {
77
+ return this.unitIds
78
+ .map((unitId) => gameApi.getUnitData(unitId))
79
+ .filter((unit) => !!unit && filter(unit))
80
+ .map((unit) => unit);
81
+ }
82
+ getCenterOfMass() {
83
+ return this.centerOfMass;
84
+ }
85
+ getMaxDistanceToCenterOfMass() {
86
+ return this.maxDistanceToCenterOfMass;
25
87
  }
26
88
  getUniqueName() {
27
89
  return this.uniqueName;
28
90
  }
29
91
  // Don't call this from the mission itself
30
92
  endMission(reason) {
31
- this.onFinish(reason, this.squad);
32
- this.squad = null;
93
+ this.onFinish(this.unitIds, reason);
33
94
  this.active = false;
34
95
  }
35
96
  /**
@@ -39,13 +100,24 @@ export class Mission {
39
100
  this.onFinish = onFinish;
40
101
  return this;
41
102
  }
103
+ /**
104
+ * Determines whether units can be stolen from this mission by other missions with higher priority.
105
+ */
106
+ isUnitsLocked() {
107
+ return true;
108
+ }
42
109
  }
43
110
  export const noop = () => ({
44
111
  type: "noop",
45
112
  });
46
- export const registerSquad = (squad) => ({
47
- type: "registerSquad",
48
- squad,
49
- });
50
113
  export const disbandMission = (reason) => ({ type: "disband", reason });
114
+ export const isDisbandMission = (a) => a.action.type === "disband";
115
+ export const requestUnits = (unitNames, priority) => ({ type: "request", unitNames, priority });
116
+ export const isRequestUnits = (a) => a.action.type === "request";
117
+ export const requestSpecificUnits = (unitIds, priority) => ({ type: "requestSpecific", unitIds, priority });
118
+ export const isRequestSpecificUnits = (a) => a.action.type === "requestSpecific";
119
+ export const grabCombatants = (point, radius) => ({ type: "requestCombatants", point, radius });
120
+ export const isGrabCombatants = (a) => a.action.type === "requestCombatants";
121
+ export const releaseUnits = (unitIds) => ({ type: "releaseUnits", unitIds });
122
+ export const isReleaseUnits = (a) => a.action.type === "releaseUnits";
51
123
  //# sourceMappingURL=mission.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"mission.js","sourceRoot":"","sources":["../../../../src/bot/logic/mission/mission.ts"],"names":[],"mappings":"AAKA,yEAAyE;AACzE,mEAAmE;AACnE,MAAM,OAAgB,OAAO;IAMzB,YAAoB,UAAkB,EAAU,QAAgB,EAAY,MAAmB;QAA3E,eAAU,GAAV,UAAU,CAAQ;QAAU,aAAQ,GAAR,QAAQ,CAAQ;QAAY,WAAM,GAAN,MAAM,CAAa;QALvF,UAAK,GAAiB,IAAI,CAAC;QAC3B,WAAM,GAAG,IAAI,CAAC;QAEd,aAAQ,GAA0D,GAAG,EAAE,GAAE,CAAC,CAAC;IAEe,CAAC;IAInG,QAAQ;QACJ,OAAO,IAAI,CAAC,MAAM,CAAC;IACvB,CAAC;IAES,QAAQ,CAAC,KAAY;QAC3B,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;QACnB,OAAO,aAAa,CAAC,KAAK,CAAC,CAAC;IAChC,CAAC;IAED,QAAQ;QACJ,OAAO,IAAI,CAAC,KAAK,CAAC;IACtB,CAAC;IAED,WAAW;QACP,2CAA2C;QAC3C,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;IACtB,CAAC;IAED,aAAa;QACT,OAAO,IAAI,CAAC,UAAU,CAAC;IAC3B,CAAC;IAED,0CAA0C;IAC1C,UAAU,CAAC,MAAsB;QAC7B,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;QAClC,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;QAClB,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC;IACxB,CAAC;IAED;;OAEG;IACH,IAAI,CAAC,QAA+D;QAChE,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;QACzB,OAAO,IAAI,CAAC;IAChB,CAAC;CACJ;AAgBD,MAAM,CAAC,MAAM,IAAI,GAAG,GAAG,EAAE,CACrB,CAAC;IACG,IAAI,EAAE,MAAM;CACO,CAAA,CAAC;AAE5B,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,KAAY,EAAE,EAAE,CAC1C,CAAC;IACG,IAAI,EAAE,eAAe;IACrB,KAAK;CACuB,CAAA,CAAC;AAErC,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,MAAY,EAAE,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,EAA2B,CAAA,CAAC"}
1
+ {"version":3,"file":"mission.js","sourceRoot":"","sources":["../../../../src/bot/logic/mission/mission.ts"],"names":[],"mappings":"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"}