@supalosa/chronodivide-bot 0.2.0 → 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 (121) hide show
  1. package/.prettierrc +5 -5
  2. package/README.md +11 -3
  3. package/dist/bot/bot.js +15 -7
  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 +57 -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 +5 -4
  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 +7 -8
  44. package/dist/bot/logic/mission/missions/attackMission.js.map +1 -0
  45. package/dist/bot/logic/mission/missions/defenceMission.js +12 -7
  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 +6 -3
  57. package/dist/bot/logic/squad/behaviours/combatSquad.js.map +1 -0
  58. package/dist/bot/logic/squad/behaviours/common.js +7 -4
  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 +6 -10
  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 +73 -23
  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 +24 -7
  80. package/dist/exampleBot.js.map +1 -0
  81. package/package.json +9 -6
  82. package/src/bot/bot.ts +17 -11
  83. package/src/bot/logic/awareness.ts +22 -5
  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 +72 -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 +7 -6
  97. package/src/bot/logic/mission/missionFactories.ts +3 -0
  98. package/src/bot/logic/mission/missions/attackMission.ts +19 -13
  99. package/src/bot/logic/mission/missions/defenceMission.ts +35 -15
  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 +6 -2
  105. package/src/bot/logic/squad/behaviours/common.ts +6 -4
  106. package/src/bot/logic/squad/behaviours/retreatSquad.ts +10 -12
  107. package/src/bot/logic/squad/behaviours/scoutingSquad.ts +81 -23
  108. package/src/bot/logic/squad/squad.ts +3 -2
  109. package/src/bot/logic/squad/squadBehaviour.ts +3 -1
  110. package/src/bot/logic/squad/squadController.ts +136 -69
  111. package/src/bot/logic/threat/threat.ts +15 -15
  112. package/src/bot/logic/threat/threatCalculator.ts +99 -99
  113. package/src/exampleBot.ts +25 -6
  114. package/tsconfig.json +73 -73
  115. package/dist/bot/logic/building/massedAntiGroundUnit.js +0 -20
  116. package/dist/bot/logic/building/queues.js +0 -19
  117. package/dist/bot/logic/knowledge.js +0 -1
  118. package/dist/bot/logic/mission/basicMission.js +0 -26
  119. package/dist/bot/logic/mission/expansionMission.js +0 -32
  120. package/dist/bot/logic/squad/behaviours/squadExpansion.js +0 -31
  121. package/dist/bot/logic/squad/behaviours/squadScouters.js +0 -8
@@ -1,3 +1,4 @@
1
+ import { PriorityQueue } from "@datastructures-js/priority-queue";
1
2
  export const getUnseenStartingLocations = (gameApi, playerData) => {
2
3
  const unseenStartingLocations = gameApi.mapApi.getStartingLocations().filter((startingLocation) => {
3
4
  if (startingLocation == playerData.startLocation) {
@@ -8,3 +9,102 @@ export const getUnseenStartingLocations = (gameApi, playerData) => {
8
9
  });
9
10
  return unseenStartingLocations;
10
11
  };
12
+ class PrioritisedScoutTarget {
13
+ constructor(priority, target) {
14
+ if (target.hasOwnProperty("x") && target.hasOwnProperty("y")) {
15
+ this._targetPoint2D = target;
16
+ }
17
+ else if (target.hasOwnProperty("sectorStartPoint")) {
18
+ this._targetSector = target;
19
+ }
20
+ else {
21
+ throw new TypeError(`invalid object passed as target: ${target}`);
22
+ }
23
+ this._priority = priority;
24
+ }
25
+ get priority() {
26
+ return this._priority;
27
+ }
28
+ asPoint2D() {
29
+ return this._targetPoint2D ?? this._targetSector?.sectorStartPoint ?? null;
30
+ }
31
+ get targetSector() {
32
+ return this._targetSector;
33
+ }
34
+ }
35
+ const ENEMY_SPAWN_POINT_PRIORITY = 100;
36
+ // Amount of sectors around the starting sector to try to scout.
37
+ const NEARBY_SECTOR_RADIUS = 2;
38
+ const NEARBY_SECTOR_BASE_PRIORITY = 1000;
39
+ export class ScoutingManager {
40
+ constructor(logger) {
41
+ this.logger = logger;
42
+ // Order by descending priority.
43
+ this.scoutingQueue = new PriorityQueue((a, b) => b.priority - a.priority);
44
+ }
45
+ onGameStart(gameApi, playerData, sectorCache) {
46
+ // Queue hostile starting locations with high priority.
47
+ gameApi.mapApi
48
+ .getStartingLocations()
49
+ .filter((startingLocation) => {
50
+ if (startingLocation == playerData.startLocation) {
51
+ return false;
52
+ }
53
+ let tile = gameApi.mapApi.getTile(startingLocation.x, startingLocation.y);
54
+ return tile ? !gameApi.mapApi.isVisibleTile(tile, playerData.name) : false;
55
+ })
56
+ .map((tile) => new PrioritisedScoutTarget(ENEMY_SPAWN_POINT_PRIORITY, tile))
57
+ .forEach((target) => {
58
+ this.logger(`Adding ${target.asPoint2D()?.x},${target.asPoint2D()?.y} to initial scouting queue`);
59
+ this.scoutingQueue.enqueue(target);
60
+ });
61
+ // Queue nearby sectors.
62
+ const { x: startX, y: startY } = playerData.startLocation;
63
+ const { x: sectorsX, y: sectorsY } = sectorCache.getSectorBounds();
64
+ const startingSector = sectorCache.getSectorCoordinatesForWorldPosition(startX, startY);
65
+ if (!startingSector) {
66
+ return;
67
+ }
68
+ for (let x = Math.max(0, startingSector.sectorX - NEARBY_SECTOR_RADIUS); x <= Math.min(sectorsX, startingSector.sectorX + NEARBY_SECTOR_RADIUS); ++x) {
69
+ for (let y = Math.max(0, startingSector.sectorY - NEARBY_SECTOR_RADIUS); y <= Math.min(sectorsY, startingSector.sectorY + NEARBY_SECTOR_RADIUS); ++y) {
70
+ if (x === startingSector?.sectorX && y === startingSector?.sectorY) {
71
+ continue;
72
+ }
73
+ // Make it scout closer sectors first.
74
+ const distanceFactor = Math.pow(x - startingSector.sectorX, 2) + Math.pow(y - startingSector.sectorY, 2);
75
+ const sector = sectorCache.getSector(x, y);
76
+ if (sector) {
77
+ const maybeTarget = new PrioritisedScoutTarget(NEARBY_SECTOR_BASE_PRIORITY - distanceFactor, sector);
78
+ const maybePoint = maybeTarget.asPoint2D();
79
+ if (maybePoint && gameApi.mapApi.getTile(maybePoint.x, maybePoint.y)) {
80
+ this.scoutingQueue.enqueue(maybeTarget);
81
+ }
82
+ }
83
+ }
84
+ }
85
+ }
86
+ onAiUpdate(gameApi, playerData) {
87
+ const currentHead = this.scoutingQueue.front();
88
+ if (!currentHead) {
89
+ return;
90
+ }
91
+ const head = currentHead.asPoint2D();
92
+ if (!head) {
93
+ this.scoutingQueue.dequeue();
94
+ return;
95
+ }
96
+ const { x, y } = head;
97
+ const tile = gameApi.mapApi.getTile(x, y);
98
+ if (tile && gameApi.mapApi.isVisibleTile(tile, playerData.name)) {
99
+ this.logger(`head point is visible, dequeueing`);
100
+ this.scoutingQueue.dequeue();
101
+ }
102
+ }
103
+ getNewScoutTarget() {
104
+ return this.scoutingQueue.dequeue();
105
+ }
106
+ hasScoutTargets() {
107
+ return !this.scoutingQueue.isEmpty();
108
+ }
109
+ }
110
+ //# sourceMappingURL=scout.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scout.js","sourceRoot":"","sources":["../../../../src/bot/logic/common/scout.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=utils.js.map
@@ -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"}
@@ -30,11 +30,11 @@ export class MissionController {
30
30
  this.missions
31
31
  .filter((missions) => disbandedMissions.has(missions.getUniqueName()))
32
32
  .forEach((disbandedMission) => {
33
- this.logger(`mission disbanded: ${disbandedMission.getUniqueName()}`);
34
33
  const reason = disbandedMissions.get(disbandedMission.getUniqueName());
34
+ this.logger(`mission disbanded: ${disbandedMission.getUniqueName()}, reason: ${reason}, hasSquad: ${!!disbandedMission.getSquad}`);
35
35
  disbandedMissionsArray.push({ mission: disbandedMission, reason });
36
- disbandedMission.getSquad()?.setMission(null);
37
36
  disbandedMission.endMission(disbandedMissions.get(disbandedMission.getUniqueName()));
37
+ disbandedMission.getSquad()?.setMission(null);
38
38
  });
39
39
  this.missions = this.missions.filter((missions) => !disbandedMissions.has(missions.getUniqueName()));
40
40
  // Register new squads
@@ -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,14 +96,13 @@ 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
100
- .addMission(new AttackMission(squadName, 100, matchAwareness.getMainRallyPoint(), attackArea, attackRadius))
101
- ?.then((reason, squad) => {
102
- missionController.addMission(new RetreatMission("retreat-from-" + squadName + gameApi.getCurrentTick(), 100, matchAwareness.getMainRallyPoint(), squad?.getUnitIds() ?? []));
103
- });
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
+ }));
104
102
  if (tryAttack) {
105
103
  this.lastAttackAt = gameApi.getCurrentTick();
106
104
  }
107
105
  }
108
106
  onMissionFailed(gameApi, playerData, matchAwareness, failedMission, failureReason, missionController) { }
109
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
  }
@@ -35,9 +38,9 @@ export class DefenceMission extends Mission {
35
38
  }
36
39
  const DEFENCE_CHECK_TICKS = 30;
37
40
  // Starting radius around the player's base to trigger defense.
38
- const DEFENCE_STARTING_RADIUS = 20;
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"}