@supalosa/chronodivide-bot 0.2.2 → 0.3.0

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 (108) hide show
  1. package/.prettierrc +5 -5
  2. package/TODO.md +18 -0
  3. package/dist/bot/bot.js +4 -4
  4. package/dist/bot/bot.js.map +1 -1
  5. package/dist/bot/logic/awareness.js +8 -8
  6. package/dist/bot/logic/awareness.js.map +1 -1
  7. package/dist/bot/logic/building/ArtilleryUnit.js +30 -9
  8. package/dist/bot/logic/building/antiGroundStaticDefence.js +2 -2
  9. package/dist/bot/logic/building/antiGroundStaticDefence.js.map +1 -1
  10. package/dist/bot/logic/building/artilleryUnit.js.map +1 -0
  11. package/dist/bot/logic/building/basicAirUnit.js +3 -2
  12. package/dist/bot/logic/building/basicAirUnit.js.map +1 -1
  13. package/dist/bot/logic/building/basicBuilding.js +1 -1
  14. package/dist/bot/logic/building/basicBuilding.js.map +1 -1
  15. package/dist/bot/logic/building/basicGroundUnit.js +4 -3
  16. package/dist/bot/logic/building/basicGroundUnit.js.map +1 -1
  17. package/dist/bot/logic/building/building.js +11 -55
  18. package/dist/bot/logic/building/buildingRules.js +162 -0
  19. package/dist/bot/logic/building/buildingRules.js.map +1 -0
  20. package/dist/bot/logic/building/harvester.js.map +1 -1
  21. package/dist/bot/logic/building/massedAntiGroundUnit.js +20 -0
  22. package/dist/bot/logic/building/powerPlant.js +1 -1
  23. package/dist/bot/logic/building/powerPlant.js.map +1 -1
  24. package/dist/bot/logic/building/queueController.js +1 -1
  25. package/dist/bot/logic/building/queueController.js.map +1 -1
  26. package/dist/bot/logic/building/queues.js +19 -0
  27. package/dist/bot/logic/building/resourceCollectionBuilding.js +5 -3
  28. package/dist/bot/logic/building/resourceCollectionBuilding.js.map +1 -1
  29. package/dist/bot/logic/common/scout.js +49 -32
  30. package/dist/bot/logic/common/scout.js.map +1 -1
  31. package/dist/bot/logic/common/utils.js +50 -1
  32. package/dist/bot/logic/common/utils.js.map +1 -1
  33. package/dist/bot/logic/knowledge.js +1 -0
  34. package/dist/bot/logic/map/map.js +17 -19
  35. package/dist/bot/logic/map/map.js.map +1 -1
  36. package/dist/bot/logic/map/sector.js +10 -13
  37. package/dist/bot/logic/map/sector.js.map +1 -1
  38. package/dist/bot/logic/mission/basicMission.js +26 -0
  39. package/dist/bot/logic/mission/expansionMission.js +32 -0
  40. package/dist/bot/logic/mission/missionFactories.js +2 -0
  41. package/dist/bot/logic/mission/missionFactories.js.map +1 -1
  42. package/dist/bot/logic/mission/missions/attackMission.js +4 -4
  43. package/dist/bot/logic/mission/missions/attackMission.js.map +1 -1
  44. package/dist/bot/logic/mission/missions/defenceMission.js +2 -1
  45. package/dist/bot/logic/mission/missions/defenceMission.js.map +1 -1
  46. package/dist/bot/logic/mission/missions/engineerMission.js +34 -0
  47. package/dist/bot/logic/mission/missions/engineerMission.js.map +1 -0
  48. package/dist/bot/logic/mission/missions/retreatMission.js.map +1 -1
  49. package/dist/bot/logic/squad/behaviours/attackSquad.js +56 -63
  50. package/dist/bot/logic/squad/behaviours/combatSquad.js +18 -19
  51. package/dist/bot/logic/squad/behaviours/combatSquad.js.map +1 -1
  52. package/dist/bot/logic/squad/behaviours/common.js +19 -2
  53. package/dist/bot/logic/squad/behaviours/common.js.map +1 -1
  54. package/dist/bot/logic/squad/behaviours/defenceSquad.js +2 -15
  55. package/dist/bot/logic/squad/behaviours/engineerSquad.js +36 -0
  56. package/dist/bot/logic/squad/behaviours/engineerSquad.js.map +1 -0
  57. package/dist/bot/logic/squad/behaviours/retreatSquad.js.map +1 -1
  58. package/dist/bot/logic/squad/behaviours/scoutingSquad.js +22 -18
  59. package/dist/bot/logic/squad/behaviours/scoutingSquad.js.map +1 -1
  60. package/dist/bot/logic/squad/behaviours/squadExpansion.js +31 -0
  61. package/dist/bot/logic/squad/behaviours/squadScouters.js +8 -0
  62. package/dist/bot/logic/squad/squad.js +5 -8
  63. package/dist/bot/logic/squad/squad.js.map +1 -1
  64. package/dist/bot/logic/squad/squadBehaviour.js.map +1 -1
  65. package/dist/bot/logic/squad/squadController.js +37 -25
  66. package/dist/bot/logic/squad/squadController.js.map +1 -1
  67. package/dist/bot/logic/threat/threatCalculator.js +4 -3
  68. package/dist/bot/logic/threat/threatCalculator.js.map +1 -1
  69. package/dist/exampleBot.js +6 -6
  70. package/dist/exampleBot.js.map +1 -1
  71. package/package.json +5 -9
  72. package/src/bot/bot.ts +8 -10
  73. package/src/bot/logic/awareness.ts +13 -17
  74. package/src/bot/logic/building/antiGroundStaticDefence.ts +13 -9
  75. package/src/bot/logic/building/artilleryUnit.ts +65 -0
  76. package/src/bot/logic/building/basicAirUnit.ts +10 -8
  77. package/src/bot/logic/building/basicBuilding.ts +1 -1
  78. package/src/bot/logic/building/basicGroundUnit.ts +4 -4
  79. package/src/bot/logic/building/{building.ts → buildingRules.ts} +94 -48
  80. package/src/bot/logic/building/harvester.ts +7 -4
  81. package/src/bot/logic/building/powerPlant.ts +1 -1
  82. package/src/bot/logic/building/queueController.ts +1 -1
  83. package/src/bot/logic/building/resourceCollectionBuilding.ts +8 -12
  84. package/src/bot/logic/common/scout.ts +83 -38
  85. package/src/bot/logic/common/utils.ts +65 -1
  86. package/src/bot/logic/map/map.ts +27 -31
  87. package/src/bot/logic/map/sector.ts +17 -21
  88. package/src/bot/logic/mission/missionFactories.ts +2 -0
  89. package/src/bot/logic/mission/missions/attackMission.ts +27 -27
  90. package/src/bot/logic/mission/missions/defenceMission.ts +3 -3
  91. package/src/bot/logic/mission/missions/engineerMission.ts +61 -0
  92. package/src/bot/logic/mission/missions/retreatMission.ts +2 -2
  93. package/src/bot/logic/squad/behaviours/combatSquad.ts +24 -26
  94. package/src/bot/logic/squad/behaviours/common.ts +33 -3
  95. package/src/bot/logic/squad/behaviours/engineerSquad.ts +53 -0
  96. package/src/bot/logic/squad/behaviours/retreatSquad.ts +2 -2
  97. package/src/bot/logic/squad/behaviours/scoutingSquad.ts +26 -28
  98. package/src/bot/logic/squad/squad.ts +8 -13
  99. package/src/bot/logic/squad/squadBehaviour.ts +9 -10
  100. package/src/bot/logic/squad/squadController.ts +2 -5
  101. package/src/bot/logic/threat/threat.ts +15 -15
  102. package/src/bot/logic/threat/threatCalculator.ts +4 -3
  103. package/src/exampleBot.ts +6 -6
  104. package/dist/bot/logic/awarenessImpl.js +0 -132
  105. package/dist/bot/logic/awarenessImpl.js.map +0 -1
  106. package/dist/bot/logic/building/ArtilleryUnit.js.map +0 -1
  107. package/dist/bot/logic/building/building.js.map +0 -1
  108. package/src/bot/logic/building/ArtilleryUnit.ts +0 -43
@@ -0,0 +1,32 @@
1
+ import { Mission, disbandMission, noop } from "./mission.js";
2
+ import { SquadExpansion } from "../squad/behaviours/expansionSquad.js";
3
+ import { Squad } from "../squad/squad.js";
4
+ /**
5
+ * A mission that tries to create an MCV (if it doesn't exist) and deploy it somewhere it can be deployed.
6
+ */
7
+ export class ExpansionMission extends Mission {
8
+ constructor(uniqueName, priority) {
9
+ super(uniqueName, priority);
10
+ this.hadSquad = false;
11
+ }
12
+ onAiUpdate(gameApi, playerData, threatData) {
13
+ if (this.getSquad() === null) {
14
+ if (!this.hadSquad) {
15
+ this.hadSquad = true;
16
+ return this.setSquad(new Squad(this.getUniqueName(), new SquadExpansion(), this));
17
+ }
18
+ else {
19
+ return disbandMission();
20
+ }
21
+ }
22
+ else {
23
+ return noop();
24
+ }
25
+ }
26
+ }
27
+ export class ExpansionMissionFactory {
28
+ maybeCreateMission(gameApi, playerData, threatData, existingMissions) {
29
+ // No auto-expansion missions.
30
+ return null;
31
+ }
32
+ }
@@ -2,10 +2,12 @@ import { ExpansionMissionFactory } from "./missions/expansionMission.js";
2
2
  import { ScoutingMissionFactory } from "./missions/scoutingMission.js";
3
3
  import { AttackMissionFactory } from "./missions/attackMission.js";
4
4
  import { DefenceMissionFactory } from "./missions/defenceMission.js";
5
+ import { EngineerMissionFactory } from "./missions/engineerMission.js";
5
6
  export const createMissionFactories = () => [
6
7
  new ExpansionMissionFactory(),
7
8
  new ScoutingMissionFactory(),
8
9
  new AttackMissionFactory(),
9
10
  new DefenceMissionFactory(),
11
+ new EngineerMissionFactory(),
10
12
  ];
11
13
  //# sourceMappingURL=missionFactories.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"missionFactories.js","sourceRoot":"","sources":["../../../../src/bot/logic/mission/missionFactories.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,uBAAuB,EAAE,MAAM,gCAAgC,CAAC;AAGzE,OAAO,EAAE,sBAAsB,EAAE,MAAM,+BAA+B,CAAC;AACvE,OAAO,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAC;AAEnE,OAAO,EAAE,qBAAqB,EAAE,MAAM,8BAA8B,CAAC;AAoCrE,MAAM,CAAC,MAAM,sBAAsB,GAAG,GAAG,EAAE,CAAC;IACxC,IAAI,uBAAuB,EAAE;IAC7B,IAAI,sBAAsB,EAAE;IAC5B,IAAI,oBAAoB,EAAE;IAC1B,IAAI,qBAAqB,EAAE;CAC9B,CAAC"}
1
+ {"version":3,"file":"missionFactories.js","sourceRoot":"","sources":["../../../../src/bot/logic/mission/missionFactories.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,uBAAuB,EAAE,MAAM,gCAAgC,CAAC;AAGzE,OAAO,EAAE,sBAAsB,EAAE,MAAM,+BAA+B,CAAC;AACvE,OAAO,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAC;AAEnE,OAAO,EAAE,qBAAqB,EAAE,MAAM,8BAA8B,CAAC;AAErE,OAAO,EAAE,sBAAsB,EAAE,MAAM,+BAA+B,CAAC;AAmCvE,MAAM,CAAC,MAAM,sBAAsB,GAAG,GAAG,EAAE,CAAC;IACxC,IAAI,uBAAuB,EAAE;IAC7B,IAAI,sBAAsB,EAAE;IAC5B,IAAI,oBAAoB,EAAE;IAC1B,IAAI,qBAAqB,EAAE;IAC3B,IAAI,sBAAsB,EAAE;CAC/B,CAAC"}
@@ -1,9 +1,9 @@
1
- import { ObjectType } from "@chronodivide/game-api";
1
+ import { ObjectType, Vector2 } from "@chronodivide/game-api";
2
2
  import { CombatSquad } from "../../squad/behaviours/combatSquad.js";
3
3
  import { Mission, disbandMission, noop } from "../mission.js";
4
4
  import { Squad } from "../../squad/squad.js";
5
5
  import { RetreatMission } from "./retreatMission.js";
6
- import _ from "lodash";
6
+ import { maxBy } from "../../common/utils.js";
7
7
  export var AttackFailReason;
8
8
  (function (AttackFailReason) {
9
9
  AttackFailReason[AttackFailReason["NoTargets"] = 0] = "NoTargets";
@@ -70,9 +70,9 @@ export class AttackMissionFactory {
70
70
  .getVisibleUnits(playerData.name, "hostile")
71
71
  .map((unitId) => gameApi.getUnitData(unitId))
72
72
  .filter((u) => !!u && gameApi.getPlayerData(u.owner).isCombatant);
73
- const maxUnit = _.maxBy(enemyUnits, (u) => getTargetWeight(u, tryFocusHarvester));
73
+ const maxUnit = maxBy(enemyUnits, (u) => getTargetWeight(u, tryFocusHarvester));
74
74
  if (maxUnit) {
75
- return { x: maxUnit.tile.rx, y: maxUnit.tile.ry };
75
+ return new Vector2(maxUnit.tile.rx, maxUnit.tile.ry);
76
76
  }
77
77
  }
78
78
  catch (err) {
@@ -1 +1 @@
1
- {"version":3,"file":"attackMission.js","sourceRoot":"","sources":["../../../../../src/bot/logic/mission/missions/attackMission.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"attackMission.js","sourceRoot":"","sources":["../../../../../src/bot/logic/mission/missions/attackMission.ts"],"names":[],"mappings":"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"}
@@ -1,3 +1,4 @@
1
+ import { Vector2 } from "@chronodivide/game-api";
1
2
  import { Mission, disbandMission, noop } from "../mission.js";
2
3
  import { Squad } from "../../squad/squad.js";
3
4
  import { CombatSquad } from "../../squad/behaviours/combatSquad.js";
@@ -30,7 +31,7 @@ export class DefenceMission extends Mission {
30
31
  else {
31
32
  const targetUnit = gameApi.getUnitData(foundTargets[0].unitId);
32
33
  this.logger(`(Defence Mission ${this.getUniqueName()}): Focused on target ${targetUnit?.name} (${foundTargets.length} found in area ${this.radius})`);
33
- this.combatSquad?.setAttackArea({ x: foundTargets[0].x, y: foundTargets[0].y });
34
+ this.combatSquad?.setAttackArea(new Vector2(foundTargets[0].x, foundTargets[0].y));
34
35
  }
35
36
  }
36
37
  return noop();
@@ -1 +1 @@
1
- {"version":3,"file":"defenceMission.js","sourceRoot":"","sources":["../../../../../src/bot/logic/mission/missions/defenceMission.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"defenceMission.js","sourceRoot":"","sources":["../../../../../src/bot/logic/mission/missions/defenceMission.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,34 @@
1
+ import { OneTimeMission } from "./oneTimeMission.js";
2
+ import { EngineerSquad } from "../../squad/behaviours/engineerSquad.js";
3
+ /**
4
+ * A mission that tries to send an engineer into a building (e.g. to capture tech building or repair bridge)
5
+ */
6
+ export class EngineerMission extends OneTimeMission {
7
+ constructor(uniqueName, priority, selectedTechBuilding, logger) {
8
+ super(uniqueName, priority, () => new EngineerSquad(selectedTechBuilding), logger);
9
+ }
10
+ }
11
+ // Only try to capture tech buildings within this radius of the starting point.
12
+ const MAX_TECH_CAPTURE_RADIUS = 50;
13
+ const TECH_CHECK_INTERVAL_TICKS = 300;
14
+ export class EngineerMissionFactory {
15
+ constructor() {
16
+ this.lastCheckAt = 0;
17
+ }
18
+ getName() {
19
+ return "EngineerMissionFactory";
20
+ }
21
+ maybeCreateMissions(gameApi, playerData, matchAwareness, missionController, logger) {
22
+ if (!(gameApi.getCurrentTick() > this.lastCheckAt + TECH_CHECK_INTERVAL_TICKS)) {
23
+ return;
24
+ }
25
+ this.lastCheckAt = gameApi.getCurrentTick();
26
+ const eligibleTechBuildings = gameApi.getVisibleUnits(playerData.name, "hostile", (r) => r.capturable && r.produceCashAmount > 0);
27
+ eligibleTechBuildings.forEach((techBuildingId) => {
28
+ missionController.addMission(new EngineerMission("capture-" + techBuildingId, 100, techBuildingId, logger));
29
+ });
30
+ }
31
+ onMissionFailed(gameApi, playerData, matchAwareness, failedMission, failureReason, missionController) {
32
+ }
33
+ }
34
+ //# sourceMappingURL=engineerMission.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"engineerMission.js","sourceRoot":"","sources":["../../../../../src/bot/logic/mission/missions/engineerMission.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAIrD,OAAO,EAAE,aAAa,EAAE,MAAM,yCAAyC,CAAC;AAExE;;GAEG;AACH,MAAM,OAAO,eAAgB,SAAQ,cAAc;IAC/C,YAAY,UAAkB,EAAE,QAAgB,EAAE,oBAA4B,EAC1E,MAAmB;QACnB,KAAK,CAAC,UAAU,EAAE,QAAQ,EAAE,GAAG,EAAE,CAAC,IAAI,aAAa,CAAC,oBAAoB,CAAC,EAAE,MAAM,CAAC,CAAC;IACvF,CAAC;CACJ;AAED,+EAA+E;AAC/E,MAAM,uBAAuB,GAAG,EAAE,CAAC;AAEnC,MAAM,yBAAyB,GAAG,GAAG,CAAC;AAEtC,MAAM,OAAO,sBAAsB;IAAnC;QACY,gBAAW,GAAG,CAAC,CAAC;IAiC5B,CAAC;IA/BG,OAAO;QACH,OAAO,wBAAwB,CAAC;IACpC,CAAC;IAED,mBAAmB,CACf,OAAgB,EAChB,UAAsB,EACtB,cAA8B,EAC9B,iBAAoC,EACpC,MAAmB;QAEnB,IAAI,CAAC,CAAC,OAAO,CAAC,cAAc,EAAE,GAAG,IAAI,CAAC,WAAW,GAAG,yBAAyB,CAAC,EAAE;YAC5E,OAAO;SACV;QACD,IAAI,CAAC,WAAW,GAAG,OAAO,CAAC,cAAc,EAAE,CAAC;QAC5C,MAAM,qBAAqB,GAAG,OAAO,CAAC,eAAe,CAAC,UAAU,CAAC,IAAI,EAAE,SAAS,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU,IAAI,CAAC,CAAC,iBAAiB,GAAG,CAAC,CAAC,CAAC;QAElI,qBAAqB,CAAC,OAAO,CAAC,CAAC,cAAc,EAAE,EAAE;YAC7C,iBAAiB,CAAC,UAAU,CAAC,IAAI,eAAe,CAAC,UAAU,GAAG,cAAc,EAAE,GAAG,EAAE,cAAc,EAAE,MAAM,CAAC,CAAC,CAAC;QAChH,CAAC,CAAC,CAAC;IACP,CAAC;IAED,eAAe,CACX,OAAgB,EAChB,UAAsB,EACtB,cAA8B,EAC9B,aAAsB,EACtB,aAAwB,EACxB,iBAAoC;IAExC,CAAC;CACJ"}
@@ -1 +1 @@
1
- {"version":3,"file":"retreatMission.js","sourceRoot":"","sources":["../../../../../src/bot/logic/mission/missions/retreatMission.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACrD,OAAO,EAAE,YAAY,EAAE,MAAM,wCAAwC,CAAC;AAGtE,MAAM,OAAO,cAAe,SAAQ,cAAc;IAC9C,YAAY,UAAkB,EAAE,QAAgB,EAAE,cAAuB,EAAE,OAAiB,EAAE,MAAmB;QAC7G,KAAK,CAAC,UAAU,EAAE,QAAQ,EAAE,GAAG,EAAE,CAAC,IAAI,YAAY,CAAC,OAAO,EAAE,cAAc,CAAC,EAAE,MAAM,CAAC,CAAC;IACzF,CAAC;CACJ"}
1
+ {"version":3,"file":"retreatMission.js","sourceRoot":"","sources":["../../../../../src/bot/logic/mission/missions/retreatMission.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACrD,OAAO,EAAE,YAAY,EAAE,MAAM,wCAAwC,CAAC;AAItE,MAAM,OAAO,cAAe,SAAQ,cAAc;IAC9C,YAAY,UAAkB,EAAE,QAAgB,EAAE,cAAuB,EAAE,OAAiB,EAAE,MAAmB;QAC7G,KAAK,CAAC,UAAU,EAAE,QAAQ,EAAE,GAAG,EAAE,CAAC,IAAI,YAAY,CAAC,OAAO,EAAE,cAAc,CAAC,EAAE,MAAM,CAAC,CAAC;IACzF,CAAC;CACJ"}
@@ -1,45 +1,75 @@
1
1
  import _ from "lodash";
2
- import { ObjectType, OrderType, } from "@chronodivide/game-api";
2
+ import { MovementZone } from "@chronodivide/game-api";
3
3
  import { grabCombatants, noop } from "../squadBehaviour.js";
4
- import { getDistanceBetweenPoints, getDistanceBetweenUnits } from "../../map/map.js";
5
- // If no enemies are seen in a circle IDLE_CHECK_RADIUS*radius for IDLE_COOLDOWN_TICKS ticks, the mission is disbanded.
6
- const IDLE_CHECK_RADIUS_RATIO = 2;
7
- const IDLE_COOLDOWN_TICKS = 15 * 30;
8
- const TARGET_UPDATE_INTERVAL_TICKS = 4;
4
+ import { getDistanceBetweenPoints } from "../../map/map.js";
5
+ import { manageAttackMicro, manageMoveMicro } from "./common.js";
6
+ const TARGET_UPDATE_INTERVAL_TICKS = 10;
9
7
  const GRAB_INTERVAL_TICKS = 10;
10
8
  const GRAB_RADIUS = 30;
11
- export class AttackSquad {
12
- constructor(rallyArea, attackArea, radius) {
9
+ // Units must be in a certain radius of the center of mass before attacking.
10
+ // This scales for number of units in the squad though.
11
+ const MIN_GATHER_RADIUS = 5;
12
+ const GATHER_RATIO = 10;
13
+ var SquadState;
14
+ (function (SquadState) {
15
+ SquadState[SquadState["Gathering"] = 0] = "Gathering";
16
+ SquadState[SquadState["Attacking"] = 1] = "Attacking";
17
+ })(SquadState || (SquadState = {}));
18
+ export class AttackOrDefenceSquad {
19
+ constructor(rallyArea, targetArea, radius) {
13
20
  this.rallyArea = rallyArea;
14
- this.attackArea = attackArea;
21
+ this.targetArea = targetArea;
15
22
  this.radius = radius;
16
- this.lastIdleCheck = null;
17
23
  this.lastGrab = null;
18
24
  this.lastCommand = null;
25
+ this.state = SquadState.Gathering;
19
26
  }
20
- setAttackArea(attackArea) {
21
- this.attackArea = attackArea;
27
+ setAttackArea(targetArea) {
28
+ this.targetArea = targetArea;
22
29
  }
23
30
  onAiUpdate(gameApi, actionsApi, playerData, squad, matchAwareness) {
24
31
  if (!this.lastCommand || gameApi.getCurrentTick() > this.lastCommand + TARGET_UPDATE_INTERVAL_TICKS) {
32
+ this.lastCommand = gameApi.getCurrentTick();
33
+ const centerOfMass = squad.getCenterOfMass();
34
+ const maxDistance = squad.getMaxDistanceToCenterOfMass();
25
35
  const units = squad.getUnitsMatching(gameApi, (r) => r.rules.isSelectableCombatant);
26
- const attackPoint = this.attackArea || playerData.startLocation;
27
- for (const attacker of units) {
28
- if (attacker.isIdle) {
29
- const { rx: x, ry: y } = attacker.tile;
30
- const range = attacker.primaryWeapon?.maxRange ?? attacker.secondaryWeapon?.maxRange ?? 5;
31
- const nearbyHostiles = matchAwareness.getHostilesInRadius2(x, y, range * 2);
32
- const closest = _.minBy(nearbyHostiles, ({ x: hX, y: hY }) => getDistanceBetweenPoints({ x, y }, { x: hX, y: hY }));
33
- const closestUnit = closest ? gameApi.getUnitData(closest.unitId) ?? null : null;
34
- if (closestUnit) {
35
- this.manageAttackMicro(actionsApi, attacker, closestUnit);
36
- }
37
- else {
38
- this.manageMoveMicro(actionsApi, attacker, attackPoint);
36
+ if (this.state === SquadState.Gathering) {
37
+ // Only use ground units for center of mass.
38
+ const groundUnits = squad.getUnitsMatching(gameApi, (r) => r.rules.isSelectableCombatant &&
39
+ (r.rules.movementZone === MovementZone.Infantry ||
40
+ r.rules.movementZone === MovementZone.Normal ||
41
+ r.rules.movementZone === MovementZone.InfantryDestroyer));
42
+ const requiredGatherRadius = Math.sqrt(groundUnits.length) * GATHER_RATIO + MIN_GATHER_RADIUS;
43
+ if (centerOfMass &&
44
+ maxDistance &&
45
+ gameApi.mapApi.getTile(centerOfMass.x, centerOfMass.y) !== undefined &&
46
+ maxDistance > requiredGatherRadius) {
47
+ units.forEach((unit) => {
48
+ manageMoveMicro(actionsApi, unit, centerOfMass);
49
+ });
50
+ }
51
+ else {
52
+ this.state = SquadState.Attacking;
53
+ }
54
+ }
55
+ else {
56
+ const targetPoint = this.targetArea || playerData.startLocation;
57
+ for (const unit of units) {
58
+ if (unit.isIdle) {
59
+ const { rx: x, ry: y } = unit.tile;
60
+ const range = unit.primaryWeapon?.maxRange ?? unit.secondaryWeapon?.maxRange ?? 5;
61
+ const nearbyHostiles = matchAwareness.getHostilesNearPoint(x, y, range * 2);
62
+ const closest = _.minBy(nearbyHostiles, ({ x: hX, y: hY }) => getDistanceBetweenPoints({ x, y }, { x: hX, y: hY }));
63
+ const closestUnit = closest ? gameApi.getUnitData(closest.unitId) ?? null : null;
64
+ if (closestUnit) {
65
+ manageAttackMicro(actionsApi, unit, closestUnit);
66
+ }
67
+ else {
68
+ manageMoveMicro(actionsApi, unit, targetPoint);
69
+ }
39
70
  }
40
71
  }
41
72
  }
42
- this.lastCommand = gameApi.getCurrentTick();
43
73
  }
44
74
  if (!this.lastGrab || gameApi.getCurrentTick() > this.lastGrab + GRAB_INTERVAL_TICKS) {
45
75
  this.lastGrab = gameApi.getCurrentTick();
@@ -49,41 +79,4 @@ export class AttackSquad {
49
79
  return noop();
50
80
  }
51
81
  }
52
- // Micro methods
53
- manageMoveMicro(actionsApi, attacker, attackPoint) {
54
- if (attacker.name === "E1") {
55
- if (attacker.canMove === false) {
56
- actionsApi.orderUnits([attacker.id], OrderType.DeploySelected);
57
- }
58
- }
59
- actionsApi.orderUnits([attacker.id], OrderType.AttackMove, attackPoint.x, attackPoint.y);
60
- }
61
- manageAttackMicro(actionsApi, attacker, target) {
62
- const distance = getDistanceBetweenUnits(attacker, target);
63
- if (attacker.name === "E1") {
64
- // Para (deployed weapon) range is 5.
65
- const deployedWeaponRange = attacker.secondaryWeapon?.maxRange || 5;
66
- actionsApi.orderUnits([attacker.id], OrderType.DeploySelected);
67
- //console.dir({distance, attacker: attacker.name, canMove: attacker.canMove, primaryMaxRange: attacker.primaryWeapon?.maxRange, secondaryMaxRange: attacker.secondaryWeapon?.maxRange})
68
- if (attacker.canMove && distance <= deployedWeaponRange * 0.8) {
69
- actionsApi.orderUnits([attacker.id], OrderType.DeploySelected);
70
- return;
71
- }
72
- else if (!attacker.canMove && distance > deployedWeaponRange) {
73
- actionsApi.orderUnits([attacker.id], OrderType.DeploySelected);
74
- return;
75
- }
76
- }
77
- let targetData = target;
78
- let orderType = OrderType.AttackMove;
79
- const primaryWeaponRange = attacker.primaryWeapon?.maxRange || 5;
80
- if (targetData?.type == ObjectType.Building && distance < primaryWeaponRange * 0.8) {
81
- orderType = OrderType.Attack;
82
- }
83
- else if (targetData?.rules.canDisguise) {
84
- // Special case for mirage tank/spy as otherwise they just sit next to it.
85
- orderType = OrderType.Attack;
86
- }
87
- actionsApi.orderUnits([attacker.id], orderType, target.id);
88
- }
89
82
  }
@@ -1,8 +1,7 @@
1
- import _ from "lodash";
2
- import { MovementZone } from "@chronodivide/game-api";
1
+ import { GameMath, MovementZone } from "@chronodivide/game-api";
3
2
  import { grabCombatants, noop } from "../squadBehaviour.js";
4
- import { getDistanceBetweenPoints } from "../../map/map.js";
5
- import { manageAttackMicro, manageMoveMicro } from "./common.js";
3
+ import { getAttackWeight, manageAttackMicro, manageMoveMicro } from "./common.js";
4
+ import { maxBy } from "../../common/utils.js";
6
5
  const TARGET_UPDATE_INTERVAL_TICKS = 10;
7
6
  const GRAB_INTERVAL_TICKS = 10;
8
7
  const GRAB_RADIUS = 20;
@@ -36,7 +35,8 @@ export class CombatSquad {
36
35
  this.targetArea = targetArea;
37
36
  }
38
37
  onAiUpdate(gameApi, actionsApi, playerData, squad, matchAwareness, logger) {
39
- if (squad.getUnitIds().length > 0 && (!this.lastCommand || gameApi.getCurrentTick() > this.lastCommand + TARGET_UPDATE_INTERVAL_TICKS)) {
38
+ if (squad.getUnitIds().length > 0 &&
39
+ (!this.lastCommand || gameApi.getCurrentTick() > this.lastCommand + TARGET_UPDATE_INTERVAL_TICKS)) {
40
40
  this.lastCommand = gameApi.getCurrentTick();
41
41
  const centerOfMass = squad.getCenterOfMass();
42
42
  const maxDistance = squad.getMaxDistanceToCenterOfMass();
@@ -47,7 +47,7 @@ export class CombatSquad {
47
47
  r.rules.movementZone === MovementZone.Normal ||
48
48
  r.rules.movementZone === MovementZone.InfantryDestroyer));
49
49
  if (this.state === SquadState.Gathering) {
50
- const requiredGatherRadius = Math.sqrt(groundUnits.length) * GATHER_RATIO + MIN_GATHER_RADIUS;
50
+ const requiredGatherRadius = GameMath.sqrt(groundUnits.length) * GATHER_RATIO + MIN_GATHER_RADIUS;
51
51
  if (centerOfMass &&
52
52
  maxDistance &&
53
53
  gameApi.mapApi.getTile(centerOfMass.x, centerOfMass.y) !== undefined &&
@@ -63,7 +63,7 @@ export class CombatSquad {
63
63
  }
64
64
  else {
65
65
  const targetPoint = this.targetArea || playerData.startLocation;
66
- const requiredGatherRadius = Math.sqrt(groundUnits.length) * GATHER_RATIO + MAX_GATHER_RADIUS;
66
+ const requiredGatherRadius = GameMath.sqrt(groundUnits.length) * GATHER_RATIO + MAX_GATHER_RADIUS;
67
67
  if (centerOfMass &&
68
68
  maxDistance &&
69
69
  gameApi.mapApi.getTile(centerOfMass.x, centerOfMass.y) !== undefined &&
@@ -74,18 +74,17 @@ export class CombatSquad {
74
74
  return noop();
75
75
  }
76
76
  for (const unit of units) {
77
- if (unit.isIdle) {
78
- const { rx: x, ry: y } = unit.tile;
79
- const range = unit.primaryWeapon?.maxRange ?? unit.secondaryWeapon?.maxRange ?? 5;
80
- const nearbyHostiles = matchAwareness.getHostilesNearPoint(x, y, range * 2);
81
- const closest = _.minBy(nearbyHostiles, ({ x: hX, y: hY }) => getDistanceBetweenPoints({ x, y }, { x: hX, y: hY }));
82
- const closestUnit = closest ? gameApi.getUnitData(closest.unitId) ?? null : null;
83
- if (closestUnit) {
84
- manageAttackMicro(actionsApi, unit, closestUnit);
85
- }
86
- else {
87
- manageMoveMicro(actionsApi, unit, targetPoint);
88
- }
77
+ const { rx: x, ry: y } = unit.tile;
78
+ const range = unit.primaryWeapon?.maxRange ?? unit.secondaryWeapon?.maxRange ?? 5;
79
+ const nearbyHostiles = matchAwareness
80
+ .getHostilesNearPoint(x, y, range * 2)
81
+ .map(({ unitId }) => gameApi.getUnitData(unitId));
82
+ const bestUnit = maxBy(nearbyHostiles, (target) => getAttackWeight(unit, target));
83
+ if (bestUnit) {
84
+ manageAttackMicro(actionsApi, unit, bestUnit);
85
+ }
86
+ else {
87
+ manageMoveMicro(actionsApi, unit, targetPoint);
89
88
  }
90
89
  }
91
90
  }
@@ -1 +1 @@
1
- {"version":3,"file":"combatSquad.js","sourceRoot":"","sources":["../../../../../src/bot/logic/squad/behaviours/combatSquad.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"combatSquad.js","sourceRoot":"","sources":["../../../../../src/bot/logic/squad/behaviours/combatSquad.ts"],"names":[],"mappings":"AAAA,OAAO,EAAuB,QAAQ,EAAE,YAAY,EAAiC,MAAM,wBAAwB,CAAC;AAEpH,OAAO,EAA+B,cAAc,EAAE,IAAI,EAAE,MAAM,sBAAsB,CAAC;AAEzF,OAAO,EAAE,eAAe,EAAE,iBAAiB,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAClF,OAAO,EAAe,KAAK,EAAE,MAAM,uBAAuB,CAAC;AAE3D,MAAM,4BAA4B,GAAG,EAAE,CAAC;AACxC,MAAM,mBAAmB,GAAG,EAAE,CAAC;AAE/B,MAAM,WAAW,GAAG,EAAE,CAAC;AAEvB,4EAA4E;AAC5E,uDAAuD;AACvD,MAAM,iBAAiB,GAAG,CAAC,CAAC;AAE5B,yFAAyF;AACzF,MAAM,iBAAiB,GAAG,EAAE,CAAC;AAE7B,MAAM,YAAY,GAAG,EAAE,CAAC;AAExB,IAAK,UAGJ;AAHD,WAAK,UAAU;IACX,qDAAS,CAAA;IACT,qDAAS,CAAA;AACb,CAAC,EAHI,UAAU,KAAV,UAAU,QAGd;AAED,MAAM,OAAO,WAAW;IAKpB;;;;;OAKG;IACH,YACY,SAAkB,EAClB,UAAmB,EACnB,MAAc;QAFd,cAAS,GAAT,SAAS,CAAS;QAClB,eAAU,GAAV,UAAU,CAAS;QACnB,WAAM,GAAN,MAAM,CAAQ;QAblB,aAAQ,GAAkB,IAAI,CAAC;QAC/B,gBAAW,GAAkB,IAAI,CAAC;QAClC,UAAK,GAAG,UAAU,CAAC,SAAS,CAAC;IAYlC,CAAC;IAEG,aAAa,CAAC,UAAmB;QACpC,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;IACjC,CAAC;IAEM,UAAU,CACb,OAAgB,EAChB,UAAsB,EACtB,UAAsB,EACtB,KAAY,EACZ,cAA8B,EAC9B,MAAmB;QAEnB,IACI,KAAK,CAAC,UAAU,EAAE,CAAC,MAAM,GAAG,CAAC;YAC7B,CAAC,CAAC,IAAI,CAAC,WAAW,IAAI,OAAO,CAAC,cAAc,EAAE,GAAG,IAAI,CAAC,WAAW,GAAG,4BAA4B,CAAC,EACnG;YACE,IAAI,CAAC,WAAW,GAAG,OAAO,CAAC,cAAc,EAAE,CAAC;YAC5C,MAAM,YAAY,GAAG,KAAK,CAAC,eAAe,EAAE,CAAC;YAC7C,MAAM,WAAW,GAAG,KAAK,CAAC,4BAA4B,EAAE,CAAC;YACzD,MAAM,KAAK,GAAG,KAAK,CAAC,gBAAgB,CAAC,OAAO,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,qBAAqB,CAAC,CAAC;YAEpF,4CAA4C;YAC5C,MAAM,WAAW,GAAG,KAAK,CAAC,gBAAgB,CACtC,OAAO,EACP,CAAC,CAAC,EAAE,EAAE,CACF,CAAC,CAAC,KAAK,CAAC,qBAAqB;gBAC7B,CAAC,CAAC,CAAC,KAAK,CAAC,YAAY,KAAK,YAAY,CAAC,QAAQ;oBAC3C,CAAC,CAAC,KAAK,CAAC,YAAY,KAAK,YAAY,CAAC,MAAM;oBAC5C,CAAC,CAAC,KAAK,CAAC,YAAY,KAAK,YAAY,CAAC,iBAAiB,CAAC,CACnE,CAAC;YAEF,IAAI,IAAI,CAAC,KAAK,KAAK,UAAU,CAAC,SAAS,EAAE;gBACrC,MAAM,oBAAoB,GAAG,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,GAAG,YAAY,GAAG,iBAAiB,CAAC;gBAClG,IACI,YAAY;oBACZ,WAAW;oBACX,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC,EAAE,YAAY,CAAC,CAAC,CAAC,KAAK,SAAS;oBACpE,WAAW,GAAG,oBAAoB,EACpC;oBACE,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE;wBACnB,eAAe,CAAC,UAAU,EAAE,IAAI,EAAE,YAAY,CAAC,CAAC;oBACpD,CAAC,CAAC,CAAC;iBACN;qBAAM;oBACH,MAAM,CAAC,eAAe,KAAK,CAAC,OAAO,EAAE,mCAAmC,WAAW,GAAG,CAAC,CAAC;oBACxF,IAAI,CAAC,KAAK,GAAG,UAAU,CAAC,SAAS,CAAC;iBACrC;aACJ;iBAAM;gBACH,MAAM,WAAW,GAAG,IAAI,CAAC,UAAU,IAAI,UAAU,CAAC,aAAa,CAAC;gBAChE,MAAM,oBAAoB,GAAG,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,GAAG,YAAY,GAAG,iBAAiB,CAAC;gBAClG,IACI,YAAY;oBACZ,WAAW;oBACX,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC,EAAE,YAAY,CAAC,CAAC,CAAC,KAAK,SAAS;oBACpE,WAAW,GAAG,oBAAoB,EACpC;oBACE,6BAA6B;oBAC7B,MAAM,CAAC,eAAe,KAAK,CAAC,OAAO,EAAE,8BAA8B,WAAW,GAAG,CAAC,CAAC;oBACnF,IAAI,CAAC,KAAK,GAAG,UAAU,CAAC,SAAS,CAAC;oBAClC,OAAO,IAAI,EAAE,CAAC;iBACjB;gBACD,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE;oBACtB,MAAM,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC;oBACnC,MAAM,KAAK,GAAG,IAAI,CAAC,aAAa,EAAE,QAAQ,IAAI,IAAI,CAAC,eAAe,EAAE,QAAQ,IAAI,CAAC,CAAC;oBAClF,MAAM,cAAc,GAAG,cAAc;yBAChC,oBAAoB,CAAC,CAAC,EAAE,CAAC,EAAE,KAAK,GAAG,CAAC,CAAC;yBACrC,GAAG,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC,OAAO,CAAC,WAAW,CAAC,MAAM,CAAC,CAAe,CAAC;oBACpE,MAAM,QAAQ,GAAG,KAAK,CAAC,cAAc,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,eAAe,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC;oBAClF,IAAI,QAAQ,EAAE;wBACV,iBAAiB,CAAC,UAAU,EAAE,IAAI,EAAE,QAAQ,CAAC,CAAC;qBACjD;yBAAM;wBACH,eAAe,CAAC,UAAU,EAAE,IAAI,EAAE,WAAW,CAAC,CAAC;qBAClD;iBACJ;aACJ;SACJ;QAED,IAAI,CAAC,IAAI,CAAC,QAAQ,IAAI,OAAO,CAAC,cAAc,EAAE,GAAG,IAAI,CAAC,QAAQ,GAAG,mBAAmB,EAAE;YAClF,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC,cAAc,EAAE,CAAC;YACzC,OAAO,cAAc,CAAC,KAAK,CAAC,eAAe,EAAE,IAAI,IAAI,CAAC,SAAS,EAAE,WAAW,CAAC,CAAC;SACjF;aAAM;YACH,OAAO,IAAI,EAAE,CAAC;SACjB;IACL,CAAC;CACJ"}
@@ -1,5 +1,5 @@
1
- import { AttackState, ObjectType, OrderType, StanceType } from "@chronodivide/game-api";
2
- import { getDistanceBetweenUnits } from "../../map/map.js";
1
+ import { AttackState, ObjectType, OrderType, StanceType, Vector2, ZoneType, } from "@chronodivide/game-api";
2
+ import { getDistanceBetweenPoints, getDistanceBetweenUnits } from "../../map/map.js";
3
3
  // Micro methods
4
4
  export function manageMoveMicro(actionsApi, attacker, attackPoint) {
5
5
  if (attacker.name === "E1") {
@@ -37,4 +37,21 @@ export function manageAttackMicro(actionsApi, attacker, target) {
37
37
  }
38
38
  actionsApi.orderUnits([attacker.id], orderType, target.id);
39
39
  }
40
+ /**
41
+ *
42
+ * @param attacker
43
+ * @param target
44
+ * @returns A number describing the weight of the given target for the attacker, or null if it should not attack it.
45
+ */
46
+ export function getAttackWeight(attacker, target) {
47
+ const { rx: x, ry: y } = attacker.tile;
48
+ const { rx: hX, ry: hY } = target.tile;
49
+ if (!attacker.primaryWeapon?.projectileRules.isAntiAir && target.zone === ZoneType.Air) {
50
+ return null;
51
+ }
52
+ if (!attacker.primaryWeapon?.projectileRules.isAntiGround && target.zone === ZoneType.Ground) {
53
+ return null;
54
+ }
55
+ return 1000000 - getDistanceBetweenPoints(new Vector2(x, y), new Vector2(hX, hY));
56
+ }
40
57
  //# sourceMappingURL=common.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"common.js","sourceRoot":"","sources":["../../../../../src/bot/logic/squad/behaviours/common.ts"],"names":[],"mappings":"AAAA,OAAO,EAAc,WAAW,EAAE,UAAU,EAAE,SAAS,EAAW,UAAU,EAAY,MAAM,wBAAwB,CAAC;AACvH,OAAO,EAAE,uBAAuB,EAAE,MAAM,kBAAkB,CAAC;AAE3D,gBAAgB;AAChB,MAAM,UAAU,eAAe,CAAC,UAAsB,EAAE,QAAkB,EAAE,WAAoB;IAC5F,IAAI,QAAQ,CAAC,IAAI,KAAK,IAAI,EAAE;QACxB,MAAM,UAAU,GAAG,QAAQ,CAAC,MAAM,KAAK,UAAU,CAAC,QAAQ,CAAC;QAC3D,IAAI,UAAU,EAAE;YACZ,UAAU,CAAC,UAAU,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,EAAE,SAAS,CAAC,cAAc,CAAC,CAAC;SAClE;KACJ;IACD,UAAU,CAAC,UAAU,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,EAAE,SAAS,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC,EAAE,WAAW,CAAC,CAAC,CAAC,CAAC;AACvF,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,UAAsB,EAAE,QAAkB,EAAE,MAAgB;IAC1F,MAAM,QAAQ,GAAG,uBAAuB,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;IAC3D,IAAI,QAAQ,CAAC,IAAI,KAAK,IAAI,EAAE;QACxB,qCAAqC;QACrC,MAAM,mBAAmB,GAAG,QAAQ,CAAC,eAAe,EAAE,QAAQ,IAAI,CAAC,CAAC;QACpE,MAAM,UAAU,GAAG,QAAQ,CAAC,MAAM,KAAK,UAAU,CAAC,QAAQ,CAAC;QAC3D,IAAI,CAAC,UAAU,IAAI,CAAC,QAAQ,IAAI,mBAAmB,IAAI,QAAQ,CAAC,WAAW,KAAK,WAAW,CAAC,SAAS,CAAC,EAAE;YACpG,UAAU,CAAC,UAAU,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,EAAE,SAAS,CAAC,cAAc,CAAC,CAAC;YAC/D,OAAO;SACV;aAAM,IAAI,UAAU,IAAI,QAAQ,GAAG,mBAAmB,EAAE;YACrD,UAAU,CAAC,UAAU,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,EAAE,SAAS,CAAC,cAAc,CAAC,CAAC;YAC/D,OAAO;SACV;KACJ;IACD,IAAI,UAAU,GAAG,MAAM,CAAC;IACxB,IAAI,SAAS,GAAc,SAAS,CAAC,MAAM,CAAC;IAC5C,MAAM,kBAAkB,GAAG,QAAQ,CAAC,aAAa,EAAE,QAAQ,IAAI,CAAC,CAAC;IACjE,IAAI,UAAU,EAAE,IAAI,IAAI,UAAU,CAAC,QAAQ,IAAI,QAAQ,GAAG,kBAAkB,GAAG,GAAG,EAAE;QAChF,SAAS,GAAG,SAAS,CAAC,MAAM,CAAC;KAChC;SAAM,IAAI,UAAU,EAAE,KAAK,CAAC,WAAW,EAAE;QACtC,0EAA0E;QAC1E,SAAS,GAAG,SAAS,CAAC,MAAM,CAAC;KAChC;IACD,UAAU,CAAC,UAAU,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,EAAE,SAAS,EAAE,MAAM,CAAC,EAAE,CAAC,CAAC;AAC/D,CAAC"}
1
+ {"version":3,"file":"common.js","sourceRoot":"","sources":["../../../../../src/bot/logic/squad/behaviours/common.ts"],"names":[],"mappings":"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"}
@@ -1,7 +1,7 @@
1
1
  import _ from "lodash";
2
- import { OrderType, } from "@chronodivide/game-api";
3
2
  import { disband, grabCombatants } from "../squadBehaviour.js";
4
3
  import { getDistanceBetween, getDistanceBetweenUnits } from "../../map/map.js";
4
+ import { manageAttackMicro } from "./common.js";
5
5
  // If no enemies are seen in a circle IDLE_CHECK_RADIUS*radius for IDLE_COOLDOWN_TICKS ticks, the mission is disbanded.
6
6
  const IDLE_CHECK_RADIUS_RATIO = 2;
7
7
  const IDLE_COOLDOWN_TICKS = 15 * 30;
@@ -39,23 +39,10 @@ export class DefenceSquad {
39
39
  distance: getDistanceBetweenUnits(defender, enemy),
40
40
  })), "distance");
41
41
  if (closestEnemy) {
42
- this.manageMicro(actionsApi, defender, closestEnemy.enemy, closestEnemy.distance);
42
+ manageAttackMicro(actionsApi, defender, closestEnemy.enemy);
43
43
  }
44
44
  }
45
45
  });
46
46
  return grabCombatants(this.defenceArea, this.radius * GRAB_RADIUS);
47
47
  }
48
- // Micro methods
49
- manageMicro(actionsApi, defender, closestEnemy, distance) {
50
- if (defender.name === "E1") {
51
- // Para (deployed weapon) range is 5.
52
- if (defender.canMove && distance <= 4) {
53
- actionsApi.orderUnits([defender.id], OrderType.DeploySelected);
54
- }
55
- else if (!defender.canMove && distance >= 5) {
56
- actionsApi.orderUnits([defender.id], OrderType.DeploySelected);
57
- }
58
- }
59
- actionsApi.orderUnits([defender.id], OrderType.AttackMove, closestEnemy.tile.rx, closestEnemy.tile.ry);
60
- }
61
48
  }
@@ -0,0 +1,36 @@
1
+ import { OrderType } from "@chronodivide/game-api";
2
+ import { disband, noop, requestUnits } from "../squadBehaviour.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) {
10
+ this.captureTarget = captureTarget;
11
+ this.hasAttemptedCaptureWith = null;
12
+ }
13
+ ;
14
+ onAiUpdate(gameApi, actionsApi, playerData, squad, matchAwareness) {
15
+ const engineerTypes = ["ENGINEER", "SENGINEER"];
16
+ const engineers = squad.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 disband();
21
+ }
22
+ return requestUnits(engineerTypes, 100);
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
+ }
36
+ //# sourceMappingURL=engineerSquad.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"engineerSquad.js","sourceRoot":"","sources":["../../../../../src/bot/logic/squad/behaviours/engineerSquad.ts"],"names":[],"mappings":"AAAA,OAAO,EAAuB,SAAS,EAAwB,MAAM,wBAAwB,CAAC;AAE9F,OAAO,EAA+B,OAAO,EAAE,IAAI,EAAwB,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAGtH,MAAM,sBAAsB,GAAG,EAAE,CAAC;AAElC,gBAAgB;AAChB,MAAM,OAAO,aAAa;IAMtB;;OAEG;IACH,YAAoB,aAAqB;QAArB,kBAAa,GAAb,aAAa,CAAQ;QARjC,4BAAuB,GAGpB,IAAI,CAAC;IAMhB,CAAC;IAAA,CAAC;IAEK,UAAU,CACb,OAAgB,EAChB,UAAsB,EACtB,UAAsB,EACtB,KAAY,EACZ,cAA8B;QAE9B,MAAM,aAAa,GAAG,CAAC,UAAU,EAAE,WAAW,CAAC,CAAC;QAChD,MAAM,SAAS,GAAG,KAAK,CAAC,eAAe,CAAC,OAAO,EAAE,GAAG,aAAa,CAAC,CAAC;QACnE,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE;YACxB,4EAA4E;YAC5E,IAAI,IAAI,CAAC,uBAAuB,KAAK,IAAI,EAAE;gBACvC,OAAO,OAAO,EAAE,CAAC;aACpB;YACD,OAAO,YAAY,CAAC,aAAa,EAAE,GAAG,CAAC,CAAC;SAC3C;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;CACJ"}
@@ -1 +1 @@
1
- {"version":3,"file":"retreatSquad.js","sourceRoot":"","sources":["../../../../../src/bot/logic/squad/behaviours/retreatSquad.ts"],"names":[],"mappings":"AAAA,OAAO,EAAuB,SAAS,EAAiC,MAAM,wBAAwB,CAAC;AAGvG,OAAO,EAA+B,OAAO,EAAQ,oBAAoB,EAAgB,MAAM,sBAAsB,CAAC;AAGtH,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,UAAsB,EACtB,KAAY,EACZ,cAA8B;QAE9B,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE;YACjB,IAAI,CAAC,SAAS,GAAG,OAAO,CAAC,cAAc,EAAE,CAAC;SAC7C;QACD,IAAI,KAAK,CAAC,UAAU,EAAE,CAAC,MAAM,GAAG,CAAC,EAAE;YAC/B,gEAAgE;YAChE,UAAU,CAAC,UAAU,CACjB,KAAK,CAAC,UAAU,EAAE,EAClB,SAAS,CAAC,UAAU,EACpB,IAAI,CAAC,cAAc,CAAC,CAAC,EACrB,IAAI,CAAC,cAAc,CAAC,CAAC,CACxB,CAAC;YACF,OAAO,OAAO,EAAE,CAAC;SACpB;QACD,IAAI,IAAI,CAAC,SAAS,IAAI,OAAO,CAAC,cAAc,EAAE,GAAG,IAAI,CAAC,SAAS,GAAG,GAAG,EAAE;YACnE,sFAAsF;YACtF,OAAO,OAAO,EAAE,CAAC;SACpB;aAAM;YACH,OAAO,oBAAoB,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;SACnD;IACL,CAAC;CACJ"}
1
+ {"version":3,"file":"retreatSquad.js","sourceRoot":"","sources":["../../../../../src/bot/logic/squad/behaviours/retreatSquad.ts"],"names":[],"mappings":"AAAA,OAAO,EAAuB,SAAS,EAAuB,MAAM,wBAAwB,CAAC;AAG7F,OAAO,EAA+B,OAAO,EAAQ,oBAAoB,EAAgB,MAAM,sBAAsB,CAAC;AAGtH,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,UAAsB,EACtB,KAAY,EACZ,cAA8B;QAE9B,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE;YACjB,IAAI,CAAC,SAAS,GAAG,OAAO,CAAC,cAAc,EAAE,CAAC;SAC7C;QACD,IAAI,KAAK,CAAC,UAAU,EAAE,CAAC,MAAM,GAAG,CAAC,EAAE;YAC/B,gEAAgE;YAChE,UAAU,CAAC,UAAU,CACjB,KAAK,CAAC,UAAU,EAAE,EAClB,SAAS,CAAC,UAAU,EACpB,IAAI,CAAC,cAAc,CAAC,CAAC,EACrB,IAAI,CAAC,cAAc,CAAC,CAAC,CACxB,CAAC;YACF,OAAO,OAAO,EAAE,CAAC;SACpB;QACD,IAAI,IAAI,CAAC,SAAS,IAAI,OAAO,CAAC,cAAc,EAAE,GAAG,IAAI,CAAC,SAAS,GAAG,GAAG,EAAE;YACnE,sFAAsF;YACtF,OAAO,OAAO,EAAE,CAAC;SACpB;aAAM;YACH,OAAO,oBAAoB,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;SACnD;IACL,CAAC;CACJ"}