@supalosa/chronodivide-bot 0.2.1 → 0.2.2

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 (118) hide show
  1. package/.prettierrc +5 -5
  2. package/README.md +3 -3
  3. package/dist/bot/bot.js +5 -1
  4. package/dist/bot/bot.js.map +1 -0
  5. package/dist/bot/logic/awareness.js +12 -2
  6. package/dist/bot/logic/awareness.js.map +1 -0
  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 +1 -0
  10. package/dist/bot/logic/building/ArtilleryUnit.js.map +1 -0
  11. package/dist/bot/logic/building/antiGroundStaticDefence.js +1 -0
  12. package/dist/bot/logic/building/antiGroundStaticDefence.js.map +1 -0
  13. package/dist/bot/logic/building/basicAirUnit.js +1 -0
  14. package/dist/bot/logic/building/basicAirUnit.js.map +1 -0
  15. package/dist/bot/logic/building/basicBuilding.js +1 -0
  16. package/dist/bot/logic/building/basicBuilding.js.map +1 -0
  17. package/dist/bot/logic/building/basicGroundUnit.js +1 -0
  18. package/dist/bot/logic/building/basicGroundUnit.js.map +1 -0
  19. package/dist/bot/logic/building/building.js +55 -11
  20. package/dist/bot/logic/building/building.js.map +1 -0
  21. package/dist/bot/logic/building/harvester.js +1 -0
  22. package/dist/bot/logic/building/harvester.js.map +1 -0
  23. package/dist/bot/logic/building/powerPlant.js +1 -0
  24. package/dist/bot/logic/building/powerPlant.js.map +1 -0
  25. package/dist/bot/logic/building/queueController.js +1 -0
  26. package/dist/bot/logic/building/queueController.js.map +1 -0
  27. package/dist/bot/logic/building/resourceCollectionBuilding.js +1 -0
  28. package/dist/bot/logic/building/resourceCollectionBuilding.js.map +1 -0
  29. package/dist/bot/logic/common/scout.js +100 -0
  30. package/dist/bot/logic/common/scout.js.map +1 -0
  31. package/dist/bot/logic/common/utils.js +2 -0
  32. package/dist/bot/logic/common/utils.js.map +1 -0
  33. package/dist/bot/logic/map/map.js +9 -25
  34. package/dist/bot/logic/map/map.js.map +1 -0
  35. package/dist/bot/logic/map/sector.js +33 -1
  36. package/dist/bot/logic/map/sector.js.map +1 -0
  37. package/dist/bot/logic/mission/mission.js +3 -1
  38. package/dist/bot/logic/mission/mission.js.map +1 -0
  39. package/dist/bot/logic/mission/missionController.js +3 -2
  40. package/dist/bot/logic/mission/missionController.js.map +1 -0
  41. package/dist/bot/logic/mission/missionFactories.js +1 -0
  42. package/dist/bot/logic/mission/missionFactories.js.map +1 -0
  43. package/dist/bot/logic/mission/missions/attackMission.js +6 -5
  44. package/dist/bot/logic/mission/missions/attackMission.js.map +1 -0
  45. package/dist/bot/logic/mission/missions/defenceMission.js +11 -6
  46. package/dist/bot/logic/mission/missions/defenceMission.js.map +1 -0
  47. package/dist/bot/logic/mission/missions/expansionMission.js +5 -4
  48. package/dist/bot/logic/mission/missions/expansionMission.js.map +1 -0
  49. package/dist/bot/logic/mission/missions/oneTimeMission.js +3 -2
  50. package/dist/bot/logic/mission/missions/oneTimeMission.js.map +1 -0
  51. package/dist/bot/logic/mission/missions/retreatMission.js +3 -2
  52. package/dist/bot/logic/mission/missions/retreatMission.js.map +1 -0
  53. package/dist/bot/logic/mission/missions/scoutingMission.js +8 -9
  54. package/dist/bot/logic/mission/missions/scoutingMission.js.map +1 -0
  55. package/dist/bot/logic/squad/behaviours/attackSquad.js +63 -56
  56. package/dist/bot/logic/squad/behaviours/combatSquad.js +5 -2
  57. package/dist/bot/logic/squad/behaviours/combatSquad.js.map +1 -0
  58. package/dist/bot/logic/squad/behaviours/common.js +1 -0
  59. package/dist/bot/logic/squad/behaviours/common.js.map +1 -0
  60. package/dist/bot/logic/squad/behaviours/defenceSquad.js +15 -2
  61. package/dist/bot/logic/squad/behaviours/expansionSquad.js +1 -0
  62. package/dist/bot/logic/squad/behaviours/expansionSquad.js.map +1 -0
  63. package/dist/bot/logic/squad/behaviours/retreatSquad.js +1 -0
  64. package/dist/bot/logic/squad/behaviours/retreatSquad.js.map +1 -0
  65. package/dist/bot/logic/squad/behaviours/scoutingSquad.js +66 -18
  66. package/dist/bot/logic/squad/behaviours/scoutingSquad.js.map +1 -0
  67. package/dist/bot/logic/squad/squad.js +3 -3
  68. package/dist/bot/logic/squad/squad.js.map +1 -0
  69. package/dist/bot/logic/squad/squadBehaviour.js +1 -0
  70. package/dist/bot/logic/squad/squadBehaviour.js.map +1 -0
  71. package/dist/bot/logic/squad/squadBehaviours.js +1 -0
  72. package/dist/bot/logic/squad/squadBehaviours.js.map +1 -0
  73. package/dist/bot/logic/squad/squadController.js +56 -16
  74. package/dist/bot/logic/squad/squadController.js.map +1 -0
  75. package/dist/bot/logic/threat/threat.js +1 -0
  76. package/dist/bot/logic/threat/threat.js.map +1 -0
  77. package/dist/bot/logic/threat/threatCalculator.js +1 -0
  78. package/dist/bot/logic/threat/threatCalculator.js.map +1 -0
  79. package/dist/exampleBot.js +1 -0
  80. package/dist/exampleBot.js.map +1 -0
  81. package/package.json +9 -6
  82. package/src/bot/bot.ts +6 -2
  83. package/src/bot/logic/awareness.ts +21 -4
  84. package/src/bot/logic/building/ArtilleryUnit.ts +43 -43
  85. package/src/bot/logic/building/antiGroundStaticDefence.ts +60 -60
  86. package/src/bot/logic/building/basicAirUnit.ts +68 -68
  87. package/src/bot/logic/building/basicBuilding.ts +47 -47
  88. package/src/bot/logic/building/building.ts +70 -12
  89. package/src/bot/logic/building/powerPlant.ts +32 -32
  90. package/src/bot/logic/building/resourceCollectionBuilding.ts +56 -56
  91. package/src/bot/logic/common/scout.ts +127 -1
  92. package/src/bot/logic/common/utils.ts +1 -0
  93. package/src/bot/logic/map/map.ts +70 -84
  94. package/src/bot/logic/map/sector.ts +46 -4
  95. package/src/bot/logic/mission/mission.ts +2 -2
  96. package/src/bot/logic/mission/missionController.ts +2 -3
  97. package/src/bot/logic/mission/missionFactories.ts +3 -0
  98. package/src/bot/logic/mission/missions/attackMission.ts +6 -2
  99. package/src/bot/logic/mission/missions/defenceMission.ts +34 -14
  100. package/src/bot/logic/mission/missions/expansionMission.ts +6 -4
  101. package/src/bot/logic/mission/missions/oneTimeMission.ts +3 -2
  102. package/src/bot/logic/mission/missions/retreatMission.ts +3 -2
  103. package/src/bot/logic/mission/missions/scoutingMission.ts +9 -6
  104. package/src/bot/logic/squad/behaviours/combatSquad.ts +5 -1
  105. package/src/bot/logic/squad/behaviours/scoutingSquad.ts +81 -23
  106. package/src/bot/logic/squad/squad.ts +3 -2
  107. package/src/bot/logic/squad/squadBehaviour.ts +3 -1
  108. package/src/bot/logic/squad/squadController.ts +88 -41
  109. package/src/bot/logic/threat/threat.ts +15 -15
  110. package/src/bot/logic/threat/threatCalculator.ts +99 -99
  111. package/tsconfig.json +73 -73
  112. package/dist/bot/logic/building/massedAntiGroundUnit.js +0 -20
  113. package/dist/bot/logic/building/queues.js +0 -19
  114. package/dist/bot/logic/knowledge.js +0 -1
  115. package/dist/bot/logic/mission/basicMission.js +0 -26
  116. package/dist/bot/logic/mission/expansionMission.js +0 -32
  117. package/dist/bot/logic/squad/behaviours/squadExpansion.js +0 -31
  118. package/dist/bot/logic/squad/behaviours/squadScouters.js +0 -8
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../../src/bot/logic/common/utils.ts"],"names":[],"mappings":""}
@@ -1,31 +1,14 @@
1
+ import _ from "lodash";
2
+ const MAX_WIDTH_AND_HEIGHT = 500;
1
3
  // Expensive one-time call to determine the size of the map.
2
4
  // The result is a point just outside the bounds of the map.
3
5
  export function determineMapBounds(mapApi) {
4
- // TODO Binary Search this.
5
- // Start from the last spawn positions to save time.
6
- let maxX = 0;
7
- let maxY = 0;
8
- mapApi.getStartingLocations().forEach((point) => {
9
- if (point.x > maxX) {
10
- maxX = point.x;
11
- }
12
- if (point.y > maxY) {
13
- maxY = point.y;
14
- }
15
- });
16
- // Expand outwards until we find the bounds.
17
- for (let testX = maxX; testX < 10000; ++testX) {
18
- if (mapApi.getTile(testX, 0) == undefined) {
19
- maxX = testX;
20
- break;
21
- }
22
- }
23
- for (let testY = maxY; testY < 10000; ++testY) {
24
- if (mapApi.getTile(testY, 0) == undefined) {
25
- maxY = testY;
26
- break;
27
- }
28
- }
6
+ // Probably want to ask for an API change to get this.
7
+ // Note that the maps is not always a rectangle!
8
+ const zeroTile = { rx: 0, ry: 0 };
9
+ const allTiles = mapApi.getTilesInRect(zeroTile, { width: MAX_WIDTH_AND_HEIGHT, height: MAX_WIDTH_AND_HEIGHT });
10
+ const maxX = _.maxBy(allTiles, (tile) => tile.rx)?.rx;
11
+ const maxY = _.maxBy(allTiles, (tile) => tile.ry)?.ry;
29
12
  return { x: maxX, y: maxY };
30
13
  }
31
14
  export function calculateAreaVisibility(mapApi, playerData, startPoint, endPoint) {
@@ -61,3 +44,4 @@ export function getDistanceBetweenUnits(unit1, unit2) {
61
44
  export function getDistanceBetween(unit, point) {
62
45
  return getDistanceBetweenPoints({ x: unit.tile.rx, y: unit.tile.ry }, point);
63
46
  }
47
+ //# sourceMappingURL=map.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"map.js","sourceRoot":"","sources":["../../../../src/bot/logic/map/map.ts"],"names":[],"mappings":"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"}
@@ -7,6 +7,21 @@ export class Sector {
7
7
  this.sectorStartTile = sectorStartTile;
8
8
  this.sectorVisibilityPct = sectorVisibilityPct;
9
9
  this.sectorVisibilityLastCheckTick = sectorVisibilityLastCheckTick;
10
+ this.sectorExploreAttempts = 0;
11
+ }
12
+ onExploreAttempted(currentTick) {
13
+ this.sectorExploreAttempts++;
14
+ this.sectorLastExploredAt = currentTick;
15
+ }
16
+ // Whether we should attempt to explore this sector, given the cooldown and limit of attempts.
17
+ shouldAttemptExploration(currentTick, cooldown, limit) {
18
+ if (limit >= this.sectorExploreAttempts) {
19
+ return false;
20
+ }
21
+ if (this.sectorLastExploredAt && currentTick < this.sectorLastExploredAt + cooldown) {
22
+ return false;
23
+ }
24
+ return true;
10
25
  }
11
26
  }
12
27
  export class SectorCache {
@@ -100,10 +115,27 @@ export class SectorCache {
100
115
  }
101
116
  return this.sectors[sectorX][sectorY];
102
117
  }
103
- getSectorForWorldPosition(x, y) {
118
+ getSectorBounds() {
119
+ return {
120
+ x: this.sectorsX,
121
+ y: this.sectorsY,
122
+ };
123
+ }
124
+ getSectorCoordinatesForWorldPosition(x, y) {
104
125
  if (x < 0 || x >= this.mapBounds.x || y < 0 || y >= this.mapBounds.y) {
105
126
  return undefined;
106
127
  }
128
+ return {
129
+ sectorX: Math.floor(x / SECTOR_SIZE),
130
+ sectorY: Math.floor(y / SECTOR_SIZE)
131
+ };
132
+ }
133
+ getSectorForWorldPosition(x, y) {
134
+ const sectorCoordinates = this.getSectorCoordinatesForWorldPosition(x, y);
135
+ if (!sectorCoordinates) {
136
+ return undefined;
137
+ }
107
138
  return this.sectors[Math.floor(x / SECTOR_SIZE)][Math.floor(y / SECTOR_SIZE)];
108
139
  }
109
140
  }
141
+ //# sourceMappingURL=sector.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sector.js","sourceRoot":"","sources":["../../../../src/bot/logic/map/sector.ts"],"names":[],"mappings":"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"}
@@ -1,9 +1,10 @@
1
1
  // AI starts Missions based on heuristics, which have one or more squads.
2
2
  // Missions can create squads (but squads will disband themselves).
3
3
  export class Mission {
4
- constructor(uniqueName, priority = 1) {
4
+ constructor(uniqueName, priority, logger) {
5
5
  this.uniqueName = uniqueName;
6
6
  this.priority = priority;
7
+ this.logger = logger;
7
8
  this.squad = null;
8
9
  this.active = true;
9
10
  this.onFinish = () => { };
@@ -47,3 +48,4 @@ export const registerSquad = (squad) => ({
47
48
  squad,
48
49
  });
49
50
  export const disbandMission = (reason) => ({ type: "disband", reason });
51
+ //# sourceMappingURL=mission.js.map
@@ -0,0 +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"}
@@ -48,9 +48,9 @@ export class MissionController {
48
48
  });
49
49
  // Create dynamic missions.
50
50
  this.missionFactories.forEach((missionFactory) => {
51
- missionFactory.maybeCreateMissions(gameApi, playerData, matchAwareness, this);
51
+ missionFactory.maybeCreateMissions(gameApi, playerData, matchAwareness, this, this.logger);
52
52
  disbandedMissionsArray.forEach(({ reason, mission }) => {
53
- missionFactory.onMissionFailed(gameApi, playerData, matchAwareness, mission, reason, this);
53
+ missionFactory.onMissionFailed(gameApi, playerData, matchAwareness, mission, reason, this, this.logger);
54
54
  });
55
55
  });
56
56
  }
@@ -78,3 +78,4 @@ export class MissionController {
78
78
  this.logger(`Missions (${this.missions.length}): ${this.missions.map((m) => m.getUniqueName()).join(", ")}`);
79
79
  }
80
80
  }
81
+ //# sourceMappingURL=missionController.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"missionController.js","sourceRoot":"","sources":["../../../../src/bot/logic/mission/missionController.ts"],"names":[],"mappings":"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"}
@@ -8,3 +8,4 @@ export const createMissionFactories = () => [
8
8
  new AttackMissionFactory(),
9
9
  new DefenceMissionFactory(),
10
10
  ];
11
+ //# sourceMappingURL=missionFactories.js.map
@@ -0,0 +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"}
@@ -14,8 +14,8 @@ const NO_TARGET_IDLE_TIMEOUT_TICKS = 60;
14
14
  * A mission that tries to attack a certain area.
15
15
  */
16
16
  export class AttackMission extends Mission {
17
- constructor(uniqueName, priority, rallyArea, attackArea, radius) {
18
- super(uniqueName, priority);
17
+ constructor(uniqueName, priority, rallyArea, attackArea, radius, logger) {
18
+ super(uniqueName, priority, logger);
19
19
  this.rallyArea = rallyArea;
20
20
  this.attackArea = attackArea;
21
21
  this.radius = radius;
@@ -81,7 +81,7 @@ export class AttackMissionFactory {
81
81
  }
82
82
  return null;
83
83
  }
84
- maybeCreateMissions(gameApi, playerData, matchAwareness, missionController) {
84
+ maybeCreateMissions(gameApi, playerData, matchAwareness, missionController, logger) {
85
85
  if (!matchAwareness.shouldAttack()) {
86
86
  return;
87
87
  }
@@ -96,8 +96,8 @@ export class AttackMissionFactory {
96
96
  }
97
97
  // TODO: not using a fixed value here. But performance slows to a crawl when this is unique.
98
98
  const squadName = "globalAttack";
99
- const tryAttack = missionController.addMission(new AttackMission(squadName, 100, matchAwareness.getMainRallyPoint(), attackArea, attackRadius).then((reason, squad) => {
100
- missionController.addMission(new RetreatMission("retreat-from-" + squadName + gameApi.getCurrentTick(), 100, matchAwareness.getMainRallyPoint(), squad?.getUnitIds() ?? []));
99
+ const tryAttack = missionController.addMission(new AttackMission(squadName, 100, matchAwareness.getMainRallyPoint(), attackArea, attackRadius, logger).then((reason, squad) => {
100
+ missionController.addMission(new RetreatMission("retreat-from-" + squadName + gameApi.getCurrentTick(), 100, matchAwareness.getMainRallyPoint(), squad?.getUnitIds() ?? [], logger));
101
101
  }));
102
102
  if (tryAttack) {
103
103
  this.lastAttackAt = gameApi.getCurrentTick();
@@ -105,3 +105,4 @@ export class AttackMissionFactory {
105
105
  }
106
106
  onMissionFailed(gameApi, playerData, matchAwareness, failedMission, failureReason, missionController) { }
107
107
  }
108
+ //# sourceMappingURL=attackMission.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"attackMission.js","sourceRoot":"","sources":["../../../../../src/bot/logic/mission/missions/attackMission.ts"],"names":[],"mappings":"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"}
@@ -10,8 +10,8 @@ export var DefenceFailReason;
10
10
  * A mission that tries to defend a certain area.
11
11
  */
12
12
  export class DefenceMission extends Mission {
13
- constructor(uniqueName, priority, defenceArea, radius) {
14
- super(uniqueName, priority);
13
+ constructor(uniqueName, priority, defenceArea, radius, logger) {
14
+ super(uniqueName, priority, logger);
15
15
  this.defenceArea = defenceArea;
16
16
  this.radius = radius;
17
17
  }
@@ -24,9 +24,12 @@ export class DefenceMission extends Mission {
24
24
  // Dispatch missions.
25
25
  const foundTargets = matchAwareness.getHostilesNearPoint2d(this.defenceArea, this.radius);
26
26
  if (foundTargets.length === 0) {
27
+ this.logger(`(Defence Mission ${this.getUniqueName()}): No targets found, disbanding.`);
27
28
  return disbandMission(DefenceFailReason.NoTargets);
28
29
  }
29
30
  else {
31
+ const targetUnit = gameApi.getUnitData(foundTargets[0].unitId);
32
+ this.logger(`(Defence Mission ${this.getUniqueName()}): Focused on target ${targetUnit?.name} (${foundTargets.length} found in area ${this.radius})`);
30
33
  this.combatSquad?.setAttackArea({ x: foundTargets[0].x, y: foundTargets[0].y });
31
34
  }
32
35
  }
@@ -37,7 +40,7 @@ const DEFENCE_CHECK_TICKS = 30;
37
40
  // Starting radius around the player's base to trigger defense.
38
41
  const DEFENCE_STARTING_RADIUS = 10;
39
42
  // Every game tick, we increase the defendable area by this amount.
40
- const DEFENCE_RADIUS_INCREASE_PER_GAME_TICK = 0.005;
43
+ const DEFENCE_RADIUS_INCREASE_PER_GAME_TICK = 0.001;
41
44
  export class DefenceMissionFactory {
42
45
  constructor() {
43
46
  this.lastDefenceCheckAt = 0;
@@ -45,7 +48,7 @@ export class DefenceMissionFactory {
45
48
  getName() {
46
49
  return "DefenceMissionFactory";
47
50
  }
48
- maybeCreateMissions(gameApi, playerData, matchAwareness, missionController) {
51
+ maybeCreateMissions(gameApi, playerData, matchAwareness, missionController, logger) {
49
52
  if (gameApi.getCurrentTick() < this.lastDefenceCheckAt + DEFENCE_CHECK_TICKS) {
50
53
  return;
51
54
  }
@@ -53,10 +56,12 @@ export class DefenceMissionFactory {
53
56
  const defendableRadius = DEFENCE_STARTING_RADIUS + DEFENCE_RADIUS_INCREASE_PER_GAME_TICK * gameApi.getCurrentTick();
54
57
  const enemiesNearSpawn = matchAwareness.getHostilesNearPoint2d(playerData.startLocation, defendableRadius);
55
58
  if (enemiesNearSpawn.length > 0) {
56
- missionController.addMission(new DefenceMission("globalDefence", 1000, playerData.startLocation, defendableRadius * 1.2).then((reason, squad) => {
57
- missionController.addMission(new RetreatMission("retreat-from-globalDefence" + gameApi.getCurrentTick(), 100, matchAwareness.getMainRallyPoint(), squad?.getUnitIds() ?? []));
59
+ logger(`Starting defence mission, ${enemiesNearSpawn.length} found in radius ${defendableRadius} (tick ${gameApi.getCurrentTick()})`);
60
+ missionController.addMission(new DefenceMission("globalDefence", 1000, playerData.startLocation, defendableRadius * 1.2, logger).then((reason, squad) => {
61
+ missionController.addMission(new RetreatMission("retreat-from-globalDefence" + gameApi.getCurrentTick(), 100, matchAwareness.getMainRallyPoint(), squad?.getUnitIds() ?? [], logger));
58
62
  }));
59
63
  }
60
64
  }
61
65
  onMissionFailed(gameApi, playerData, matchAwareness, failedMission, failureReason, missionController) { }
62
66
  }
67
+ //# sourceMappingURL=defenceMission.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"defenceMission.js","sourceRoot":"","sources":["../../../../../src/bot/logic/mission/missions/defenceMission.ts"],"names":[],"mappings":"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"}
@@ -4,21 +4,22 @@ import { OneTimeMission } from "./oneTimeMission.js";
4
4
  * A mission that tries to create an MCV (if it doesn't exist) and deploy it somewhere it can be deployed.
5
5
  */
6
6
  export class ExpansionMission extends OneTimeMission {
7
- constructor(uniqueName, priority, selectedMcv) {
8
- super(uniqueName, priority, () => new ExpansionSquad(selectedMcv));
7
+ constructor(uniqueName, priority, selectedMcv, logger) {
8
+ super(uniqueName, priority, () => new ExpansionSquad(selectedMcv), logger);
9
9
  }
10
10
  }
11
11
  export class ExpansionMissionFactory {
12
12
  getName() {
13
13
  return "ExpansionMissionFactory";
14
14
  }
15
- maybeCreateMissions(gameApi, playerData, matchAwareness, missionController) {
15
+ maybeCreateMissions(gameApi, playerData, matchAwareness, missionController, logger) {
16
16
  // At this point, only expand if we have a loose MCV.
17
17
  const mcvs = gameApi.getVisibleUnits(playerData.name, "self", (r) => gameApi.getGeneralRules().baseUnit.includes(r.name));
18
18
  mcvs.forEach((mcv) => {
19
- missionController.addMission(new ExpansionMission("expand-with-" + mcv, 100, mcv));
19
+ missionController.addMission(new ExpansionMission("expand-with-" + mcv, 100, mcv, logger));
20
20
  });
21
21
  }
22
22
  onMissionFailed(gameApi, playerData, matchAwareness, failedMission, failureReason, missionController) {
23
23
  }
24
24
  }
25
+ //# sourceMappingURL=expansionMission.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"expansionMission.js","sourceRoot":"","sources":["../../../../../src/bot/logic/mission/missions/expansionMission.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,cAAc,EAAE,MAAM,0CAA0C,CAAC;AAE1E,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAKrD;;GAEG;AACH,MAAM,OAAO,gBAAiB,SAAQ,cAAc;IAChD,YAAY,UAAkB,EAAE,QAAgB,EAAE,WAA0B,EACxE,MAAmB;QACnB,KAAK,CAAC,UAAU,EAAE,QAAQ,EAAE,GAAG,EAAE,CAAC,IAAI,cAAc,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC,CAAC;IAC/E,CAAC;CACJ;AAED,MAAM,OAAO,uBAAuB;IAChC,OAAO;QACH,OAAO,yBAAyB,CAAC;IACrC,CAAC;IAED,mBAAmB,CACf,OAAgB,EAChB,UAAsB,EACtB,cAA8B,EAC9B,iBAAoC,EACpC,MAAmB;QAEnB,qDAAqD;QACrD,MAAM,IAAI,GAAG,OAAO,CAAC,eAAe,CAAC,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC,EAAE,EAAE,CAChE,OAAO,CAAC,eAAe,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CACtD,CAAC;QACF,IAAI,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,EAAE;YACjB,iBAAiB,CAAC,UAAU,CAAC,IAAI,gBAAgB,CAAC,cAAc,GAAG,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,MAAM,CAAC,CAAC,CAAC;QAC/F,CAAC,CAAC,CAAC;IACP,CAAC;IAED,eAAe,CACX,OAAgB,EAChB,UAAsB,EACtB,cAA8B,EAC9B,aAAsB,EACtB,aAAwB,EACxB,iBAAoC;IAExC,CAAC;CACJ"}
@@ -4,8 +4,8 @@ import { Squad } from "../../squad/squad.js";
4
4
  * A mission that gets dispatched once, and once the squad decides to disband, the mission is disbanded.
5
5
  */
6
6
  export class OneTimeMission extends Mission {
7
- constructor(uniqueName, priority, behaviourFactory) {
8
- super(uniqueName, priority);
7
+ constructor(uniqueName, priority, behaviourFactory, logger) {
8
+ super(uniqueName, priority, logger);
9
9
  this.behaviourFactory = behaviourFactory;
10
10
  this.hadSquad = false;
11
11
  }
@@ -24,3 +24,4 @@ export class OneTimeMission extends Mission {
24
24
  }
25
25
  }
26
26
  }
27
+ //# sourceMappingURL=oneTimeMission.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"oneTimeMission.js","sourceRoot":"","sources":["../../../../../src/bot/logic/mission/missions/oneTimeMission.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,OAAO,EAAiB,cAAc,EAAE,IAAI,EAAE,MAAM,eAAe,CAAC;AAE7E,OAAO,EAAE,KAAK,EAAE,MAAM,sBAAsB,CAAC;AAM7C;;GAEG;AACH,MAAM,OAAgB,cAA8B,SAAQ,OAAU;IAGlE,YAAY,UAAkB,EAAE,QAAgB,EAAU,gBAAsC,EAAE,MAAmB;QACjH,KAAK,CAAC,UAAU,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC;QADkB,qBAAgB,GAAhB,gBAAgB,CAAsB;QAFxF,aAAQ,GAAG,KAAK,CAAC;IAIzB,CAAC;IAED,UAAU,CAAC,OAAgB,EAAE,UAAsB,EAAE,cAA8B;QAC/E,IAAI,IAAI,CAAC,QAAQ,EAAE,KAAK,IAAI,EAAE;YAC1B,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE;gBAChB,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;gBACrB,OAAO,IAAI,CAAC,QAAQ,CAAC,IAAI,KAAK,CAAC,IAAI,CAAC,aAAa,EAAE,EAAE,IAAI,CAAC,gBAAgB,EAAE,EAAE,IAAI,CAAC,CAAC,CAAC;aACxF;iBAAM;gBACH,OAAO,cAAc,EAAE,CAAC;aAC3B;SACJ;aAAM;YACH,OAAO,IAAI,EAAE,CAAC;SACjB;IACL,CAAC;CACJ"}
@@ -1,7 +1,8 @@
1
1
  import { OneTimeMission } from "./oneTimeMission.js";
2
2
  import { RetreatSquad } from "../../squad/behaviours/retreatSquad.js";
3
3
  export class RetreatMission extends OneTimeMission {
4
- constructor(uniqueName, priority, retreatToPoint, unitIds) {
5
- super(uniqueName, priority, () => new RetreatSquad(unitIds, retreatToPoint));
4
+ constructor(uniqueName, priority, retreatToPoint, unitIds, logger) {
5
+ super(uniqueName, priority, () => new RetreatSquad(unitIds, retreatToPoint), logger);
6
6
  }
7
7
  }
8
+ //# sourceMappingURL=retreatMission.js.map
@@ -0,0 +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,13 +1,12 @@
1
1
  import { ScoutingSquad } from "../../squad/behaviours/scoutingSquad.js";
2
2
  import { OneTimeMission } from "./oneTimeMission.js";
3
3
  import { AttackMission } from "./attackMission.js";
4
- import { getUnseenStartingLocations } from "../../common/scout.js";
5
4
  /**
6
5
  * A mission that tries to scout around the map with a cheap, fast unit (usually attack dogs)
7
6
  */
8
7
  export class ScoutingMission extends OneTimeMission {
9
- constructor(uniqueName, priority) {
10
- super(uniqueName, priority, () => new ScoutingSquad());
8
+ constructor(uniqueName, priority, logger) {
9
+ super(uniqueName, priority, () => new ScoutingSquad(), logger);
11
10
  }
12
11
  }
13
12
  const SCOUT_COOLDOWN_TICKS = 300;
@@ -18,21 +17,21 @@ export class ScoutingMissionFactory {
18
17
  getName() {
19
18
  return "ScoutingMissionFactory";
20
19
  }
21
- maybeCreateMissions(gameApi, playerData, matchAwareness, missionController) {
20
+ maybeCreateMissions(gameApi, playerData, matchAwareness, missionController, logger) {
22
21
  if (gameApi.getCurrentTick() < this.lastScoutAt + SCOUT_COOLDOWN_TICKS) {
23
22
  return;
24
23
  }
25
- const candidatePoints = getUnseenStartingLocations(gameApi, playerData);
26
- if (candidatePoints.length === 0) {
24
+ if (!matchAwareness.getScoutingManager().hasScoutTargets()) {
27
25
  return;
28
26
  }
29
- if (!missionController.addMission(new ScoutingMission("globalScout", 100))) {
27
+ if (!missionController.addMission(new ScoutingMission("globalScout", 100, logger))) {
30
28
  this.lastScoutAt = gameApi.getCurrentTick();
31
29
  }
32
30
  }
33
- onMissionFailed(gameApi, playerData, matchAwareness, failedMission, failureReason, missionController) {
31
+ onMissionFailed(gameApi, playerData, matchAwareness, failedMission, failureReason, missionController, logger) {
34
32
  if (failedMission instanceof AttackMission) {
35
- missionController.addMission(new ScoutingMission("globalScout", 100));
33
+ missionController.addMission(new ScoutingMission("globalScout", 100, logger));
36
34
  }
37
35
  }
38
36
  }
37
+ //# sourceMappingURL=scoutingMission.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scoutingMission.js","sourceRoot":"","sources":["../../../../../src/bot/logic/mission/missions/scoutingMission.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,MAAM,yCAAyC,CAAC;AAExE,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAGrD,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAKnD;;GAEG;AACH,MAAM,OAAO,eAAgB,SAAQ,cAAc;IAC/C,YAAY,UAAkB,EAAE,QAAgB,EAC5C,MAAmB;QACnB,KAAK,CAAC,UAAU,EAAE,QAAQ,EAAE,GAAG,EAAE,CAAC,IAAI,aAAa,EAAE,EAAE,MAAM,CAAC,CAAC;IACnE,CAAC;CACJ;AAED,MAAM,oBAAoB,GAAG,GAAG,CAAC;AAEjC,MAAM,OAAO,sBAAsB;IAC/B,YAAoB,cAAsB,CAAC,oBAAoB;QAA3C,gBAAW,GAAX,WAAW,CAAgC;IAAG,CAAC;IAEnE,OAAO;QACH,OAAO,wBAAwB,CAAC;IACpC,CAAC;IAED,mBAAmB,CACf,OAAgB,EAChB,UAAsB,EACtB,cAA8B,EAC9B,iBAAoC,EACpC,MAAmB;QAEnB,IAAI,OAAO,CAAC,cAAc,EAAE,GAAG,IAAI,CAAC,WAAW,GAAG,oBAAoB,EAAE;YACpE,OAAO;SACV;QACD,IAAI,CAAC,cAAc,CAAC,kBAAkB,EAAE,CAAC,eAAe,EAAE,EAAE;YACxD,OAAO;SACV;QACD,IAAI,CAAC,iBAAiB,CAAC,UAAU,CAAC,IAAI,eAAe,CAAC,aAAa,EAAE,GAAG,EAAE,MAAM,CAAC,CAAC,EAAE;YAChF,IAAI,CAAC,WAAW,GAAG,OAAO,CAAC,cAAc,EAAE,CAAC;SAC/C;IACL,CAAC;IAED,eAAe,CACX,OAAgB,EAChB,UAAsB,EACtB,cAA8B,EAC9B,aAAsB,EACtB,aAAwB,EACxB,iBAAoC,EACpC,MAAmB;QAEnB,IAAI,aAAa,YAAY,aAAa,EAAE;YACxC,iBAAiB,CAAC,UAAU,CAAC,IAAI,eAAe,CAAC,aAAa,EAAE,GAAG,EAAE,MAAM,CAAC,CAAC,CAAC;SACjF;IACL,CAAC;CACJ"}
@@ -1,75 +1,45 @@
1
1
  import _ from "lodash";
2
- import { MovementZone } from "@chronodivide/game-api";
2
+ import { ObjectType, OrderType, } from "@chronodivide/game-api";
3
3
  import { grabCombatants, noop } from "../squadBehaviour.js";
4
- import { getDistanceBetweenPoints } from "../../map/map.js";
5
- import { manageAttackMicro, manageMoveMicro } from "./common.js";
6
- const TARGET_UPDATE_INTERVAL_TICKS = 10;
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;
7
9
  const GRAB_INTERVAL_TICKS = 10;
8
10
  const GRAB_RADIUS = 30;
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) {
11
+ export class AttackSquad {
12
+ constructor(rallyArea, attackArea, radius) {
20
13
  this.rallyArea = rallyArea;
21
- this.targetArea = targetArea;
14
+ this.attackArea = attackArea;
22
15
  this.radius = radius;
16
+ this.lastIdleCheck = null;
23
17
  this.lastGrab = null;
24
18
  this.lastCommand = null;
25
- this.state = SquadState.Gathering;
26
19
  }
27
- setAttackArea(targetArea) {
28
- this.targetArea = targetArea;
20
+ setAttackArea(attackArea) {
21
+ this.attackArea = attackArea;
29
22
  }
30
23
  onAiUpdate(gameApi, actionsApi, playerData, squad, matchAwareness) {
31
24
  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();
35
25
  const units = squad.getUnitsMatching(gameApi, (r) => r.rules.isSelectableCombatant);
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
- }
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);
70
39
  }
71
40
  }
72
41
  }
42
+ this.lastCommand = gameApi.getCurrentTick();
73
43
  }
74
44
  if (!this.lastGrab || gameApi.getCurrentTick() > this.lastGrab + GRAB_INTERVAL_TICKS) {
75
45
  this.lastGrab = gameApi.getCurrentTick();
@@ -79,4 +49,41 @@ export class AttackOrDefenceSquad {
79
49
  return noop();
80
50
  }
81
51
  }
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
+ }
82
89
  }
@@ -35,8 +35,8 @@ export class CombatSquad {
35
35
  setAttackArea(targetArea) {
36
36
  this.targetArea = targetArea;
37
37
  }
38
- onAiUpdate(gameApi, actionsApi, playerData, squad, matchAwareness) {
39
- if (!this.lastCommand || gameApi.getCurrentTick() > this.lastCommand + TARGET_UPDATE_INTERVAL_TICKS) {
38
+ onAiUpdate(gameApi, actionsApi, playerData, squad, matchAwareness, logger) {
39
+ if (squad.getUnitIds().length > 0 && (!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();
@@ -57,6 +57,7 @@ export class CombatSquad {
57
57
  });
58
58
  }
59
59
  else {
60
+ logger(`CombatSquad ${squad.getName()} switching back to attack mode (${maxDistance})`);
60
61
  this.state = SquadState.Attacking;
61
62
  }
62
63
  }
@@ -68,6 +69,7 @@ export class CombatSquad {
68
69
  gameApi.mapApi.getTile(centerOfMass.x, centerOfMass.y) !== undefined &&
69
70
  maxDistance > requiredGatherRadius) {
70
71
  // Switch back to gather mode
72
+ logger(`CombatSquad ${squad.getName()} switching back to gather (${maxDistance})`);
71
73
  this.state = SquadState.Gathering;
72
74
  return noop();
73
75
  }
@@ -97,3 +99,4 @@ export class CombatSquad {
97
99
  }
98
100
  }
99
101
  }
102
+ //# sourceMappingURL=combatSquad.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"combatSquad.js","sourceRoot":"","sources":["../../../../../src/bot/logic/squad/behaviours/combatSquad.ts"],"names":[],"mappings":"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"}
@@ -37,3 +37,4 @@ export function manageAttackMicro(actionsApi, attacker, target) {
37
37
  }
38
38
  actionsApi.orderUnits([attacker.id], orderType, target.id);
39
39
  }
40
+ //# sourceMappingURL=common.js.map
@@ -0,0 +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"}