@supalosa/chronodivide-bot 0.5.3 → 0.6.4

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 (134) hide show
  1. package/.env.template +4 -4
  2. package/.github/workflows/npm-publish.yml +24 -0
  3. package/README.md +108 -97
  4. package/dist/bot/bot.js +105 -105
  5. package/dist/bot/bot.js.map +1 -1
  6. package/dist/bot/logic/awareness.js +136 -136
  7. package/dist/bot/logic/building/antiAirStaticDefence.js +42 -42
  8. package/dist/bot/logic/building/antiGroundStaticDefence.js +34 -30
  9. package/dist/bot/logic/building/antiGroundStaticDefence.js.map +1 -1
  10. package/dist/bot/logic/building/{ArtilleryUnit.js → artilleryUnit.js} +18 -18
  11. package/dist/bot/logic/building/basicAirUnit.js +19 -19
  12. package/dist/bot/logic/building/basicBuilding.js +26 -26
  13. package/dist/bot/logic/building/basicGroundUnit.js +19 -19
  14. package/dist/bot/logic/building/buildingRules.js +175 -174
  15. package/dist/bot/logic/building/buildingRules.js.map +1 -1
  16. package/dist/bot/logic/building/common.js +19 -18
  17. package/dist/bot/logic/building/common.js.map +1 -1
  18. package/dist/bot/logic/building/harvester.js +16 -16
  19. package/dist/bot/logic/building/powerPlant.js +20 -20
  20. package/dist/bot/logic/building/queueController.js +183 -183
  21. package/dist/bot/logic/building/resourceCollectionBuilding.js +36 -36
  22. package/dist/bot/logic/common/scout.js +126 -126
  23. package/dist/bot/logic/common/utils.js +95 -85
  24. package/dist/bot/logic/common/utils.js.map +1 -1
  25. package/dist/bot/logic/composition/alliedCompositions.js +12 -12
  26. package/dist/bot/logic/composition/common.js +1 -1
  27. package/dist/bot/logic/composition/sovietCompositions.js +12 -12
  28. package/dist/bot/logic/map/map.js +44 -44
  29. package/dist/bot/logic/map/sector.js +137 -137
  30. package/dist/bot/logic/mission/actionBatcher.js +91 -91
  31. package/dist/bot/logic/mission/mission.js +122 -122
  32. package/dist/bot/logic/mission/missionController.js +321 -321
  33. package/dist/bot/logic/mission/missionFactories.js +12 -12
  34. package/dist/bot/logic/mission/missions/attackMission.js +214 -214
  35. package/dist/bot/logic/mission/missions/defenceMission.js +82 -82
  36. package/dist/bot/logic/mission/missions/engineerMission.js +63 -63
  37. package/dist/bot/logic/mission/missions/expansionMission.js +60 -60
  38. package/dist/bot/logic/mission/missions/retreatMission.js +33 -33
  39. package/dist/bot/logic/mission/missions/scoutingMission.js +133 -133
  40. package/dist/bot/logic/mission/missions/squads/combatSquad.js +115 -115
  41. package/dist/bot/logic/mission/missions/squads/common.js +57 -57
  42. package/dist/bot/logic/mission/missions/squads/squad.js +1 -1
  43. package/dist/bot/logic/threat/threat.js +22 -22
  44. package/dist/bot/logic/threat/threatCalculator.js +73 -73
  45. package/dist/exampleBot.js +100 -112
  46. package/dist/exampleBot.js.map +1 -1
  47. package/package.json +32 -29
  48. package/src/bot/bot.ts +161 -161
  49. package/src/bot/logic/awareness.ts +245 -245
  50. package/src/bot/logic/building/antiAirStaticDefence.ts +64 -64
  51. package/src/bot/logic/building/antiGroundStaticDefence.ts +55 -51
  52. package/src/bot/logic/building/artilleryUnit.ts +39 -39
  53. package/src/bot/logic/building/basicAirUnit.ts +39 -39
  54. package/src/bot/logic/building/basicBuilding.ts +49 -49
  55. package/src/bot/logic/building/basicGroundUnit.ts +39 -39
  56. package/src/bot/logic/building/buildingRules.ts +250 -247
  57. package/src/bot/logic/building/common.ts +21 -23
  58. package/src/bot/logic/building/harvester.ts +31 -31
  59. package/src/bot/logic/building/powerPlant.ts +32 -32
  60. package/src/bot/logic/building/queueController.ts +297 -297
  61. package/src/bot/logic/building/resourceCollectionBuilding.ts +52 -52
  62. package/src/bot/logic/common/scout.ts +183 -183
  63. package/src/bot/logic/common/utils.ts +120 -112
  64. package/src/bot/logic/composition/alliedCompositions.ts +22 -22
  65. package/src/bot/logic/composition/common.ts +3 -3
  66. package/src/bot/logic/composition/sovietCompositions.ts +21 -21
  67. package/src/bot/logic/map/map.ts +66 -66
  68. package/src/bot/logic/map/sector.ts +174 -174
  69. package/src/bot/logic/mission/actionBatcher.ts +124 -124
  70. package/src/bot/logic/mission/mission.ts +232 -232
  71. package/src/bot/logic/mission/missionController.ts +413 -413
  72. package/src/bot/logic/mission/missionFactories.ts +51 -51
  73. package/src/bot/logic/mission/missions/attackMission.ts +336 -336
  74. package/src/bot/logic/mission/missions/defenceMission.ts +151 -151
  75. package/src/bot/logic/mission/missions/engineerMission.ts +113 -113
  76. package/src/bot/logic/mission/missions/expansionMission.ts +104 -104
  77. package/src/bot/logic/mission/missions/retreatMission.ts +54 -54
  78. package/src/bot/logic/mission/missions/scoutingMission.ts +186 -186
  79. package/src/bot/logic/mission/missions/squads/combatSquad.ts +160 -160
  80. package/src/bot/logic/mission/missions/squads/common.ts +63 -63
  81. package/src/bot/logic/mission/missions/squads/squad.ts +19 -19
  82. package/src/bot/logic/threat/threatCalculator.ts +100 -100
  83. package/src/exampleBot.ts +111 -124
  84. package/tsconfig.json +73 -73
  85. package/dist/bot/logic/building/building.js +0 -82
  86. package/dist/bot/logic/building/massedAntiGroundUnit.js +0 -20
  87. package/dist/bot/logic/building/queues.js +0 -19
  88. package/dist/bot/logic/knowledge.js +0 -1
  89. package/dist/bot/logic/mission/basicMission.js +0 -26
  90. package/dist/bot/logic/mission/behaviours/combatSquad.js +0 -124
  91. package/dist/bot/logic/mission/behaviours/combatSquad.js.map +0 -1
  92. package/dist/bot/logic/mission/behaviours/common.js +0 -56
  93. package/dist/bot/logic/mission/behaviours/common.js.map +0 -1
  94. package/dist/bot/logic/mission/behaviours/engineerSquad.js +0 -39
  95. package/dist/bot/logic/mission/behaviours/engineerSquad.js.map +0 -1
  96. package/dist/bot/logic/mission/behaviours/expansionSquad.js +0 -46
  97. package/dist/bot/logic/mission/behaviours/expansionSquad.js.map +0 -1
  98. package/dist/bot/logic/mission/behaviours/retreatSquad.js +0 -31
  99. package/dist/bot/logic/mission/behaviours/retreatSquad.js.map +0 -1
  100. package/dist/bot/logic/mission/behaviours/scoutingSquad.js +0 -94
  101. package/dist/bot/logic/mission/behaviours/scoutingSquad.js.map +0 -1
  102. package/dist/bot/logic/mission/expansionMission.js +0 -32
  103. package/dist/bot/logic/mission/missions/basicMission.js +0 -13
  104. package/dist/bot/logic/mission/missions/basicMission.js.map +0 -1
  105. package/dist/bot/logic/mission/missions/missionBehaviour.js +0 -2
  106. package/dist/bot/logic/mission/missions/missionBehaviour.js.map +0 -1
  107. package/dist/bot/logic/mission/missions/oneTimeMission.js +0 -27
  108. package/dist/bot/logic/mission/missions/oneTimeMission.js.map +0 -1
  109. package/dist/bot/logic/squad/behaviours/actionBatcher.js +0 -36
  110. package/dist/bot/logic/squad/behaviours/actionBatcher.js.map +0 -1
  111. package/dist/bot/logic/squad/behaviours/attackSquad.js +0 -82
  112. package/dist/bot/logic/squad/behaviours/combatSquad.js +0 -106
  113. package/dist/bot/logic/squad/behaviours/combatSquad.js.map +0 -1
  114. package/dist/bot/logic/squad/behaviours/common.js +0 -55
  115. package/dist/bot/logic/squad/behaviours/common.js.map +0 -1
  116. package/dist/bot/logic/squad/behaviours/defenceSquad.js +0 -48
  117. package/dist/bot/logic/squad/behaviours/engineerSquad.js +0 -38
  118. package/dist/bot/logic/squad/behaviours/engineerSquad.js.map +0 -1
  119. package/dist/bot/logic/squad/behaviours/expansionSquad.js +0 -45
  120. package/dist/bot/logic/squad/behaviours/expansionSquad.js.map +0 -1
  121. package/dist/bot/logic/squad/behaviours/retreatSquad.js +0 -31
  122. package/dist/bot/logic/squad/behaviours/retreatSquad.js.map +0 -1
  123. package/dist/bot/logic/squad/behaviours/scoutingSquad.js +0 -93
  124. package/dist/bot/logic/squad/behaviours/scoutingSquad.js.map +0 -1
  125. package/dist/bot/logic/squad/behaviours/squadExpansion.js +0 -31
  126. package/dist/bot/logic/squad/behaviours/squadScouters.js +0 -8
  127. package/dist/bot/logic/squad/squad.js +0 -126
  128. package/dist/bot/logic/squad/squad.js.map +0 -1
  129. package/dist/bot/logic/squad/squadBehaviour.js +0 -6
  130. package/dist/bot/logic/squad/squadBehaviour.js.map +0 -1
  131. package/dist/bot/logic/squad/squadBehaviours.js +0 -7
  132. package/dist/bot/logic/squad/squadBehaviours.js.map +0 -1
  133. package/dist/bot/logic/squad/squadController.js +0 -215
  134. package/dist/bot/logic/squad/squadController.js.map +0 -1
@@ -1,82 +0,0 @@
1
- import { AntiGroundStaticDefence } from "./antiGroundStaticDefence.js";
2
- import { ArtilleryUnit } from "./ArtilleryUnit.js";
3
- import { BasicAirUnit } from "./basicAirUnit.js";
4
- import { BasicBuilding } from "./basicBuilding.js";
5
- import { BasicGroundUnit } from "./basicGroundUnit.js";
6
- import { PowerPlant } from "./powerPlant.js";
7
- import { ResourceCollectionBuilding } from "./resourceCollectionBuilding.js";
8
- import { Harvester } from "./harvester.js";
9
- export function numBuildingsOwnedOfType(game, playerData, technoRules) {
10
- return game.getVisibleUnits(playerData.name, "self", (r) => r == technoRules).length;
11
- }
12
- export function numBuildingsOwnedOfName(game, playerData, name) {
13
- return game.getVisibleUnits(playerData.name, "self", (r) => r.name === name).length;
14
- }
15
- export function getDefaultPlacementLocation(game, playerData, startPoint, technoRules, space = 1) {
16
- // Random location, preferably near start location.
17
- let startX = startPoint.x;
18
- let startY = startPoint.y;
19
- let size = game.getBuildingPlacementData(technoRules.name);
20
- if (!size) {
21
- return undefined;
22
- }
23
- let largestSize = Math.max(size.foundation.height, size.foundation.width);
24
- for (let searchRadius = largestSize; searchRadius < 25 + largestSize; ++searchRadius) {
25
- for (let xx = startX - searchRadius; xx < startX + searchRadius; ++xx) {
26
- for (let yy = startY - searchRadius; yy < startY + searchRadius; ++yy) {
27
- let tile = game.mapApi.getTile(xx, yy);
28
- if (tile && game.canPlaceBuilding(playerData.name, technoRules.name, tile)) {
29
- return { rx: xx, ry: yy };
30
- }
31
- }
32
- }
33
- }
34
- return undefined;
35
- }
36
- export const DEFAULT_BUILDING_PRIORITY = 1;
37
- export const BUILDING_NAME_TO_RULES = new Map([
38
- // Allied
39
- ["GAPOWR", new PowerPlant()],
40
- ["GAREFN", new ResourceCollectionBuilding(10, 3)],
41
- ["GAWEAP", new BasicBuilding(15, 1)],
42
- ["GAPILE", new BasicBuilding(12, 1)],
43
- ["CMIN", new Harvester(15, 4, 2)],
44
- ["ENGINEER", new BasicBuilding(1, 1, 10000)],
45
- ["GADEPT", new BasicBuilding(1, 1, 10000)],
46
- ["GAAIRC", new BasicBuilding(8, 1, 6000)],
47
- ["GATECH", new BasicBuilding(20, 1, 4000)],
48
- ["GAYARD", new BasicBuilding(0, 0, 0)],
49
- ["GAPILL", new AntiGroundStaticDefence(5, 1, 5)],
50
- ["ATESLA", new AntiGroundStaticDefence(5, 1, 10)],
51
- ["GAWALL", new AntiGroundStaticDefence(0, 0, 0)],
52
- ["E1", new BasicGroundUnit(2, 3, 0.25, 0)],
53
- ["MTNK", new BasicGroundUnit(10, 3, 2, 0)],
54
- ["MGTK", new BasicGroundUnit(10, 1, 2.5, 0)],
55
- ["FV", new BasicGroundUnit(5, 2, 0.5, 1)],
56
- ["JUMPJET", new BasicAirUnit(10, 1, 1, 1)],
57
- ["ORCA", new BasicAirUnit(7, 1, 2, 0)],
58
- ["SREF", new ArtilleryUnit(9, 1)],
59
- ["CLEG", new BasicGroundUnit(0, 0)],
60
- ["SHAD", new BasicGroundUnit(0, 0)],
61
- // Soviet
62
- ["NAPOWR", new PowerPlant()],
63
- ["NAREFN", new ResourceCollectionBuilding(10, 3)],
64
- ["NAWEAP", new BasicBuilding(15, 1)],
65
- ["NAHAND", new BasicBuilding(12, 1)],
66
- ["HARV", new Harvester(15, 4, 2)],
67
- ["SENGINEER", new BasicBuilding(1, 1, 10000)],
68
- ["NADEPT", new BasicBuilding(1, 1, 10000)],
69
- ["NARADR", new BasicBuilding(8, 1, 4000)],
70
- ["NANRCT", new PowerPlant()],
71
- ["NAYARD", new BasicBuilding(0, 0, 0)],
72
- ["NATECH", new BasicBuilding(20, 1, 4000)],
73
- ["NALASR", new AntiGroundStaticDefence(5, 1, 5)],
74
- ["TESLA", new AntiGroundStaticDefence(5, 1, 10)],
75
- ["NAWALL", new AntiGroundStaticDefence(0, 0, 0)],
76
- ["E2", new BasicGroundUnit(2, 3, 0.25, 0)],
77
- ["HTNK", new BasicGroundUnit(10, 3, 3, 0)],
78
- ["APOC", new BasicGroundUnit(6, 1, 5, 0)],
79
- ["HTK", new BasicGroundUnit(5, 2, 0.33, 1.5)],
80
- ["ZEP", new BasicAirUnit(5, 1, 5, 1)],
81
- ["V3", new ArtilleryUnit(9, 1)], // V3 Rocket Launcher
82
- ]);
@@ -1,20 +0,0 @@
1
- import { numBuildingsOwnedOfType } from "./building.js";
2
- export class MassedAntiGroundUnit {
3
- constructor(basePriority, baseAmount) {
4
- this.basePriority = basePriority;
5
- this.baseAmount = baseAmount;
6
- }
7
- getPlacementLocation(game, playerData, technoRules) {
8
- return undefined;
9
- }
10
- getPriority(game, playerData, technoRules, threatCache) {
11
- // If the enemy's ground power is increasing we should try to keep up.
12
- if (threatCache) {
13
- if (threatCache.totalAvailableAntiGroundFirepower * threatCache.certainty > threatCache.totalAvailableAntiGroundFirepower) {
14
- return this.basePriority * (threatCache.totalAvailableAntiGroundFirepower / Math.max(1, threatCache.totalAvailableAntiGroundFirepower));
15
- }
16
- }
17
- const numOwned = numBuildingsOwnedOfType(game, playerData, technoRules);
18
- return this.basePriority * (1.0 - (numOwned / this.baseAmount));
19
- }
20
- }
@@ -1,19 +0,0 @@
1
- import { QueueType } from "@chronodivide/game-api";
2
- export const queueTypeToName = (queue) => {
3
- switch (queue) {
4
- case QueueType.Structures:
5
- return "Structures";
6
- case QueueType.Armory:
7
- return "Armory";
8
- case QueueType.Infantry:
9
- return "Infantry";
10
- case QueueType.Vehicles:
11
- return "Vehicles";
12
- case QueueType.Aircrafts:
13
- return "Aircrafts";
14
- case QueueType.Ships:
15
- return "Ships";
16
- default:
17
- return "Unknown";
18
- }
19
- };
@@ -1 +0,0 @@
1
- export {};
@@ -1,26 +0,0 @@
1
- // A basic mission requests specific units.
2
- export class BasicMission {
3
- constructor(uniqueName, priority = 1, squads = []) {
4
- this.uniqueName = uniqueName;
5
- this.priority = priority;
6
- this.squads = squads;
7
- }
8
- getUniqueName() {
9
- return this.uniqueName;
10
- }
11
- isActive() {
12
- return true;
13
- }
14
- removeSquad(squad) {
15
- this.squads = this.squads.filter((s) => s != squad);
16
- }
17
- addSquad(squad) {
18
- if (!this.squads.find((s) => s == squad)) {
19
- this.squads.push(squad);
20
- }
21
- }
22
- getSquads() {
23
- return this.squads;
24
- }
25
- onSquadAdded(gameApi, playerData, threatData) { }
26
- }
@@ -1,124 +0,0 @@
1
- import { GameMath, MovementZone, } from "@chronodivide/game-api";
2
- import { getAttackWeight, manageAttackMicro, manageMoveMicro } from "./common.js";
3
- import { isOwnedByNeutral, maxBy, minBy } from "../../common/utils.js";
4
- import { grabCombatants, noop } from "../mission.js";
5
- const TARGET_UPDATE_INTERVAL_TICKS = 10;
6
- const GRAB_INTERVAL_TICKS = 64;
7
- const GRAB_RADIUS = 20;
8
- // Units must be in a certain radius of the center of mass before attacking.
9
- // This scales for number of units in the squad though.
10
- const MIN_GATHER_RADIUS = 5;
11
- // If the radius expands beyond this amount then we should switch back to gathering mode.
12
- const MAX_GATHER_RADIUS = 15;
13
- const GATHER_RATIO = 10;
14
- var SquadState;
15
- (function (SquadState) {
16
- SquadState[SquadState["Gathering"] = 0] = "Gathering";
17
- SquadState[SquadState["Attacking"] = 1] = "Attacking";
18
- })(SquadState || (SquadState = {}));
19
- export class CombatSquad {
20
- /**
21
- *
22
- * @param rallyArea the initial location to grab combatants
23
- * @param targetArea
24
- * @param radius
25
- */
26
- constructor(rallyArea, targetArea, radius) {
27
- this.rallyArea = rallyArea;
28
- this.targetArea = targetArea;
29
- this.radius = radius;
30
- this.lastGrab = null;
31
- this.lastCommand = null;
32
- this.state = SquadState.Gathering;
33
- this.lastOrderGiven = {};
34
- }
35
- getGlobalDebugText() {
36
- return this.debugLastTarget ?? "<none>";
37
- }
38
- setAttackArea(targetArea) {
39
- this.targetArea = targetArea;
40
- }
41
- onAiUpdate(gameApi, actionsApi, actionBatcher, playerData, mission, matchAwareness, logger) {
42
- if (mission.getUnitIds().length > 0 &&
43
- (!this.lastCommand || gameApi.getCurrentTick() > this.lastCommand + TARGET_UPDATE_INTERVAL_TICKS)) {
44
- this.lastCommand = gameApi.getCurrentTick();
45
- const centerOfMass = mission.getCenterOfMass();
46
- const maxDistance = mission.getMaxDistanceToCenterOfMass();
47
- const units = mission.getUnitsMatching(gameApi, (r) => r.rules.isSelectableCombatant);
48
- // Only use ground units for center of mass.
49
- const groundUnits = mission.getUnitsMatching(gameApi, (r) => r.rules.isSelectableCombatant &&
50
- (r.rules.movementZone === MovementZone.Infantry ||
51
- r.rules.movementZone === MovementZone.Normal ||
52
- r.rules.movementZone === MovementZone.InfantryDestroyer));
53
- if (this.state === SquadState.Gathering) {
54
- const requiredGatherRadius = GameMath.sqrt(groundUnits.length) * GATHER_RATIO + MIN_GATHER_RADIUS;
55
- if (centerOfMass &&
56
- maxDistance &&
57
- gameApi.mapApi.getTile(centerOfMass.x, centerOfMass.y) !== undefined &&
58
- maxDistance > requiredGatherRadius) {
59
- units.forEach((unit) => {
60
- actionBatcher.push(manageMoveMicro(unit, centerOfMass));
61
- });
62
- }
63
- else {
64
- logger(`CombatSquad ${mission.getUniqueName()} switching back to attack mode (${maxDistance})`);
65
- this.state = SquadState.Attacking;
66
- }
67
- }
68
- else {
69
- const targetPoint = this.targetArea || playerData.startLocation;
70
- const requiredGatherRadius = GameMath.sqrt(groundUnits.length) * GATHER_RATIO + MAX_GATHER_RADIUS;
71
- if (centerOfMass &&
72
- maxDistance &&
73
- gameApi.mapApi.getTile(centerOfMass.x, centerOfMass.y) !== undefined &&
74
- maxDistance > requiredGatherRadius) {
75
- // Switch back to gather mode
76
- logger(`CombatSquad ${mission.getUniqueName()} switching back to gather (${maxDistance})`);
77
- this.state = SquadState.Gathering;
78
- return noop();
79
- }
80
- // The unit with the shortest range chooses the target. Otherwise, a base range of 5 is chosen.
81
- const getRangeForUnit = (unit) => unit.primaryWeapon?.maxRange ?? unit.secondaryWeapon?.maxRange ?? 5;
82
- const attackLeader = minBy(units, getRangeForUnit);
83
- if (!attackLeader) {
84
- return noop();
85
- }
86
- // Find units within double the range of the leader.
87
- const nearbyHostiles = matchAwareness
88
- .getHostilesNearPoint(attackLeader.tile.rx, attackLeader.tile.ry, getRangeForUnit(attackLeader) * 2)
89
- .map(({ unitId }) => gameApi.getUnitData(unitId))
90
- .filter((unit) => !isOwnedByNeutral(unit));
91
- for (const unit of units) {
92
- const bestUnit = maxBy(nearbyHostiles, (target) => getAttackWeight(unit, target));
93
- if (bestUnit) {
94
- this.submitActionIfNew(actionBatcher, manageAttackMicro(unit, bestUnit));
95
- this.debugLastTarget = `Unit ${bestUnit.id.toString()}`;
96
- }
97
- else {
98
- this.submitActionIfNew(actionBatcher, manageMoveMicro(unit, targetPoint));
99
- this.debugLastTarget = `@${targetPoint.x},${targetPoint.y}`;
100
- }
101
- }
102
- }
103
- }
104
- if (!this.lastGrab || gameApi.getCurrentTick() > this.lastGrab + GRAB_INTERVAL_TICKS) {
105
- this.lastGrab = gameApi.getCurrentTick();
106
- return grabCombatants(mission.getCenterOfMass() ?? this.rallyArea, GRAB_RADIUS);
107
- }
108
- else {
109
- return noop();
110
- }
111
- }
112
- /**
113
- * Sends an action to the acitonBatcher if and only if the action is different from the last action we submitted to it.
114
- * Prevents spamming redundant orders, which affects performance and can also ccause the unit to sit around doing nothing.
115
- */
116
- submitActionIfNew(actionBatcher, action) {
117
- const lastAction = this.lastOrderGiven[action.unitId];
118
- if (!lastAction || !lastAction.isSameAs(action)) {
119
- actionBatcher.push(action);
120
- this.lastOrderGiven[action.unitId] = action;
121
- }
122
- }
123
- }
124
- //# sourceMappingURL=combatSquad.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"combatSquad.js","sourceRoot":"","sources":["../../../../../src/bot/logic/mission/behaviours/combatSquad.ts"],"names":[],"mappings":"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"}
@@ -1,56 +0,0 @@
1
- import { AttackState, ObjectType, OrderType, StanceType, Vector2, ZoneType } from "@chronodivide/game-api";
2
- import { getDistanceBetweenPoints, getDistanceBetweenUnits } from "../../map/map.js";
3
- import { BatchableAction } from "../actionBatcher.js";
4
- // Micro methods
5
- export function manageMoveMicro(attacker, attackPoint) {
6
- if (attacker.name === "E1") {
7
- const isDeployed = attacker.stance === StanceType.Deployed;
8
- if (isDeployed) {
9
- return BatchableAction.noTarget(attacker.id, OrderType.DeploySelected);
10
- }
11
- }
12
- return BatchableAction.toPoint(attacker.id, OrderType.AttackMove, attackPoint);
13
- }
14
- export function manageAttackMicro(attacker, target) {
15
- const distance = getDistanceBetweenUnits(attacker, target);
16
- if (attacker.name === "E1") {
17
- // Para (deployed weapon) range is 5.
18
- const deployedWeaponRange = attacker.secondaryWeapon?.maxRange || 5;
19
- const isDeployed = attacker.stance === StanceType.Deployed;
20
- if (!isDeployed && (distance <= deployedWeaponRange || attacker.attackState === AttackState.JustFired)) {
21
- return BatchableAction.noTarget(attacker.id, OrderType.DeploySelected);
22
- }
23
- else if (isDeployed && distance > deployedWeaponRange) {
24
- return BatchableAction.noTarget(attacker.id, OrderType.DeploySelected);
25
- }
26
- }
27
- let targetData = target;
28
- let orderType = OrderType.Attack;
29
- const primaryWeaponRange = attacker.primaryWeapon?.maxRange || 5;
30
- if (targetData?.type == ObjectType.Building && distance < primaryWeaponRange * 0.8) {
31
- orderType = OrderType.Attack;
32
- }
33
- else if (targetData?.rules.canDisguise) {
34
- // Special case for mirage tank/spy as otherwise they just sit next to it.
35
- orderType = OrderType.Attack;
36
- }
37
- return BatchableAction.toTargetId(attacker.id, orderType, target.id);
38
- }
39
- /**
40
- *
41
- * @param attacker
42
- * @param target
43
- * @returns A number describing the weight of the given target for the attacker, or null if it should not attack it.
44
- */
45
- export function getAttackWeight(attacker, target) {
46
- const { rx: x, ry: y } = attacker.tile;
47
- const { rx: hX, ry: hY } = target.tile;
48
- if (!attacker.primaryWeapon?.projectileRules.isAntiAir && target.zone === ZoneType.Air) {
49
- return null;
50
- }
51
- if (!attacker.primaryWeapon?.projectileRules.isAntiGround && target.zone === ZoneType.Ground) {
52
- return null;
53
- }
54
- return 1000000 - getDistanceBetweenPoints(new Vector2(x, y), new Vector2(hX, hY));
55
- }
56
- //# sourceMappingURL=common.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"common.js","sourceRoot":"","sources":["../../../../../src/bot/logic/mission/behaviours/common.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,SAAS,EAAE,UAAU,EAAY,OAAO,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAC;AACrH,OAAO,EAAE,wBAAwB,EAAE,uBAAuB,EAAE,MAAM,kBAAkB,CAAC;AACrF,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAEtD,gBAAgB;AAChB,MAAM,UAAU,eAAe,CAAC,QAAkB,EAAE,WAAoB;IACpE,IAAI,QAAQ,CAAC,IAAI,KAAK,IAAI,EAAE;QACxB,MAAM,UAAU,GAAG,QAAQ,CAAC,MAAM,KAAK,UAAU,CAAC,QAAQ,CAAC;QAC3D,IAAI,UAAU,EAAE;YACZ,OAAO,eAAe,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,EAAE,SAAS,CAAC,cAAc,CAAC,CAAC;SAC1E;KACJ;IAED,OAAO,eAAe,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,EAAE,SAAS,CAAC,UAAU,EAAE,WAAW,CAAC,CAAC;AACnF,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,QAAkB,EAAE,MAAgB;IAClE,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,OAAO,eAAe,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,EAAE,SAAS,CAAC,cAAc,CAAC,CAAC;SAC1E;aAAM,IAAI,UAAU,IAAI,QAAQ,GAAG,mBAAmB,EAAE;YACrD,OAAO,eAAe,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,EAAE,SAAS,CAAC,cAAc,CAAC,CAAC;SAC1E;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,OAAO,eAAe,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,EAAE,SAAS,EAAE,MAAM,CAAC,EAAE,CAAC,CAAC;AACzE,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,eAAe,CAAC,QAAkB,EAAE,MAAgB;IAChE,MAAM,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,QAAQ,CAAC,IAAI,CAAC;IACvC,MAAM,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,MAAM,CAAC,IAAI,CAAC;IAEvC,IAAI,CAAC,QAAQ,CAAC,aAAa,EAAE,eAAe,CAAC,SAAS,IAAI,MAAM,CAAC,IAAI,KAAK,QAAQ,CAAC,GAAG,EAAE;QACpF,OAAO,IAAI,CAAC;KACf;IAED,IAAI,CAAC,QAAQ,CAAC,aAAa,EAAE,eAAe,CAAC,YAAY,IAAI,MAAM,CAAC,IAAI,KAAK,QAAQ,CAAC,MAAM,EAAE;QAC1F,OAAO,IAAI,CAAC;KACf;IAED,OAAO,OAAO,GAAG,wBAAwB,CAAC,IAAI,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,IAAI,OAAO,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC;AACtF,CAAC"}
@@ -1,39 +0,0 @@
1
- import { OrderType } from "@chronodivide/game-api";
2
- import { disbandMission, noop, requestUnits } from "../mission.js";
3
- const CAPTURE_COOLDOWN_TICKS = 30;
4
- // Capture squad
5
- export class EngineerSquad {
6
- /**
7
- * @param captureTarget ID of the target to try and capture/send engineer into.
8
- */
9
- constructor(captureTarget, priority) {
10
- this.captureTarget = captureTarget;
11
- this.priority = priority;
12
- this.hasAttemptedCaptureWith = null;
13
- }
14
- onAiUpdate(gameApi, actionsApi, actionBatcher, playerData, mission, matchAwareness) {
15
- const engineerTypes = ["ENGINEER", "SENGINEER"];
16
- const engineers = mission.getUnitsOfTypes(gameApi, ...engineerTypes);
17
- if (engineers.length === 0) {
18
- // Perhaps we deployed already (or the unit was destroyed), end the mission.
19
- if (this.hasAttemptedCaptureWith !== null) {
20
- return disbandMission();
21
- }
22
- return requestUnits(engineerTypes, this.priority);
23
- }
24
- else if (!this.hasAttemptedCaptureWith ||
25
- gameApi.getCurrentTick() > this.hasAttemptedCaptureWith.gameTick + CAPTURE_COOLDOWN_TICKS) {
26
- actionsApi.orderUnits(engineers.map((engineer) => engineer.id), OrderType.Capture, this.captureTarget);
27
- // Add a cooldown to deploy attempts.
28
- this.hasAttemptedCaptureWith = {
29
- unitId: engineers[0].id,
30
- gameTick: gameApi.getCurrentTick(),
31
- };
32
- }
33
- return noop();
34
- }
35
- getGlobalDebugText() {
36
- return undefined;
37
- }
38
- }
39
- //# sourceMappingURL=engineerSquad.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"engineerSquad.js","sourceRoot":"","sources":["../../../../../src/bot/logic/mission/behaviours/engineerSquad.ts"],"names":[],"mappings":"AAAA,OAAO,EAAuB,SAAS,EAAwB,MAAM,wBAAwB,CAAC;AAI9F,OAAO,EAA0B,cAAc,EAAE,IAAI,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAE3F,MAAM,sBAAsB,GAAG,EAAE,CAAC;AAElC,gBAAgB;AAChB,MAAM,OAAO,aAAa;IAMtB;;OAEG;IACH,YACY,aAAqB,EACrB,QAAgB;QADhB,kBAAa,GAAb,aAAa,CAAQ;QACrB,aAAQ,GAAR,QAAQ,CAAQ;QAVpB,4BAAuB,GAGpB,IAAI,CAAC;IAQb,CAAC;IAEG,UAAU,CACb,OAAgB,EAChB,UAAsB,EACtB,aAA4B,EAC5B,UAAsB,EACtB,OAA+B,EAC/B,cAA8B;QAE9B,MAAM,aAAa,GAAG,CAAC,UAAU,EAAE,WAAW,CAAC,CAAC;QAChD,MAAM,SAAS,GAAG,OAAO,CAAC,eAAe,CAAC,OAAO,EAAE,GAAG,aAAa,CAAC,CAAC;QACrE,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE;YACxB,4EAA4E;YAC5E,IAAI,IAAI,CAAC,uBAAuB,KAAK,IAAI,EAAE;gBACvC,OAAO,cAAc,EAAE,CAAC;aAC3B;YACD,OAAO,YAAY,CAAC,aAAa,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;SACrD;aAAM,IACH,CAAC,IAAI,CAAC,uBAAuB;YAC7B,OAAO,CAAC,cAAc,EAAE,GAAG,IAAI,CAAC,uBAAuB,CAAC,QAAQ,GAAG,sBAAsB,EAC3F;YACE,UAAU,CAAC,UAAU,CACjB,SAAS,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,EACxC,SAAS,CAAC,OAAO,EACjB,IAAI,CAAC,aAAa,CACrB,CAAC;YACF,qCAAqC;YACrC,IAAI,CAAC,uBAAuB,GAAG;gBAC3B,MAAM,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC,EAAE;gBACvB,QAAQ,EAAE,OAAO,CAAC,cAAc,EAAE;aACrC,CAAC;SACL;QACD,OAAO,IAAI,EAAE,CAAC;IAClB,CAAC;IAEM,kBAAkB;QACrB,OAAO,SAAS,CAAC;IACrB,CAAC;CACJ"}
@@ -1,46 +0,0 @@
1
- import { OrderType } from "@chronodivide/game-api";
2
- import { disbandMission, noop, requestSpecificUnits, requestUnits } from "../mission.js";
3
- const DEPLOY_COOLDOWN_TICKS = 30;
4
- // Expansion or initial base.
5
- export class ExpansionSquad {
6
- /**
7
- * @param selectedMcv ID of the MCV to try to expand with. If that unit dies, the squad will disband. If no value is provided,
8
- * the mission requests an MCV.
9
- */
10
- constructor(selectedMcv, priority) {
11
- this.selectedMcv = selectedMcv;
12
- this.priority = priority;
13
- this.hasAttemptedDeployWith = null;
14
- }
15
- onAiUpdate(gameApi, actionsApi, actionBatcher, playerData, mission, matchAwareness) {
16
- const mcvTypes = ["AMCV", "SMCV"];
17
- const mcvs = mission.getUnitsOfTypes(gameApi, ...mcvTypes);
18
- if (mcvs.length === 0) {
19
- // Perhaps we deployed already (or the unit was destroyed), end the mission.
20
- if (this.hasAttemptedDeployWith !== null) {
21
- return disbandMission();
22
- }
23
- // We need an mcv!
24
- if (this.selectedMcv) {
25
- return requestSpecificUnits([this.selectedMcv], this.priority);
26
- }
27
- else {
28
- return requestUnits(mcvTypes, this.priority);
29
- }
30
- }
31
- else if (!this.hasAttemptedDeployWith ||
32
- gameApi.getCurrentTick() > this.hasAttemptedDeployWith.gameTick + DEPLOY_COOLDOWN_TICKS) {
33
- actionsApi.orderUnits(mcvs.map((mcv) => mcv.id), OrderType.DeploySelected);
34
- // Add a cooldown to deploy attempts.
35
- this.hasAttemptedDeployWith = {
36
- unitId: mcvs[0].id,
37
- gameTick: gameApi.getCurrentTick(),
38
- };
39
- }
40
- return noop();
41
- }
42
- getGlobalDebugText() {
43
- return undefined;
44
- }
45
- }
46
- //# sourceMappingURL=expansionSquad.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"expansionSquad.js","sourceRoot":"","sources":["../../../../../src/bot/logic/mission/behaviours/expansionSquad.ts"],"names":[],"mappings":"AAAA,OAAO,EAAuB,SAAS,EAAc,MAAM,wBAAwB,CAAC;AAIpF,OAAO,EAA0B,cAAc,EAAE,IAAI,EAAE,oBAAoB,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAEjH,MAAM,qBAAqB,GAAG,EAAE,CAAC;AAEjC,6BAA6B;AAC7B,MAAM,OAAO,cAAc;IAMvB;;;OAGG;IACH,YACY,WAA0B,EAC1B,QAAgB;QADhB,gBAAW,GAAX,WAAW,CAAe;QAC1B,aAAQ,GAAR,QAAQ,CAAQ;QAXpB,2BAAsB,GAGnB,IAAI,CAAC;IASb,CAAC;IAEG,UAAU,CACb,OAAgB,EAChB,UAAsB,EACtB,aAA4B,EAC5B,UAAsB,EACtB,OAAgC,EAChC,cAA8B;QAE9B,MAAM,QAAQ,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QAClC,MAAM,IAAI,GAAG,OAAO,CAAC,eAAe,CAAC,OAAO,EAAE,GAAG,QAAQ,CAAC,CAAC;QAC3D,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE;YACnB,4EAA4E;YAC5E,IAAI,IAAI,CAAC,sBAAsB,KAAK,IAAI,EAAE;gBACtC,OAAO,cAAc,EAAE,CAAC;aAC3B;YACD,kBAAkB;YAClB,IAAI,IAAI,CAAC,WAAW,EAAE;gBAClB,OAAO,oBAAoB,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;aAClE;iBAAM;gBACH,OAAO,YAAY,CAAC,QAAQ,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;aAChD;SACJ;aAAM,IACH,CAAC,IAAI,CAAC,sBAAsB;YAC5B,OAAO,CAAC,cAAc,EAAE,GAAG,IAAI,CAAC,sBAAsB,CAAC,QAAQ,GAAG,qBAAqB,EACzF;YACE,UAAU,CAAC,UAAU,CACjB,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EACzB,SAAS,CAAC,cAAc,CAC3B,CAAC;YACF,qCAAqC;YACrC,IAAI,CAAC,sBAAsB,GAAG;gBAC1B,MAAM,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE;gBAClB,QAAQ,EAAE,OAAO,CAAC,cAAc,EAAE;aACrC,CAAC;SACL;QACD,OAAO,IAAI,EAAE,CAAC;IAClB,CAAC;IAEM,kBAAkB;QACrB,OAAO,SAAS,CAAC;IACrB,CAAC;CACJ"}
@@ -1,31 +0,0 @@
1
- import { OrderType } from "@chronodivide/game-api";
2
- import { disbandMission, requestSpecificUnits } from "../mission.js";
3
- const SCOUT_MOVE_COOLDOWN_TICKS = 30;
4
- export class RetreatSquad {
5
- constructor(unitIds, retreatToPoint) {
6
- this.unitIds = unitIds;
7
- this.retreatToPoint = retreatToPoint;
8
- this.createdAt = null;
9
- }
10
- onAiUpdate(gameApi, actionsApi, actionBatcher, playerData, mission, matchAwareness) {
11
- if (!this.createdAt) {
12
- this.createdAt = gameApi.getCurrentTick();
13
- }
14
- if (mission.getUnitIds().length > 0) {
15
- // Only send the order once we have managed to claim some units.
16
- actionsApi.orderUnits(mission.getUnitIds(), OrderType.AttackMove, this.retreatToPoint.x, this.retreatToPoint.y);
17
- return disbandMission();
18
- }
19
- if (this.createdAt && gameApi.getCurrentTick() > this.createdAt + 240) {
20
- // Disband automatically after 240 ticks in case we couldn't actually claim any units.
21
- return disbandMission();
22
- }
23
- else {
24
- return requestSpecificUnits(this.unitIds, 1000);
25
- }
26
- }
27
- getGlobalDebugText() {
28
- return undefined;
29
- }
30
- }
31
- //# sourceMappingURL=retreatSquad.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"retreatSquad.js","sourceRoot":"","sources":["../../../../../src/bot/logic/mission/behaviours/retreatSquad.ts"],"names":[],"mappings":"AAAA,OAAO,EAAuB,SAAS,EAAuB,MAAM,wBAAwB,CAAC;AAI7F,OAAO,EAA0B,cAAc,EAAE,oBAAoB,EAAE,MAAM,eAAe,CAAC;AAE7F,MAAM,yBAAyB,GAAG,EAAE,CAAC;AAErC,MAAM,OAAO,YAAY;IAGrB,YACY,OAAiB,EACjB,cAAuB;QADvB,YAAO,GAAP,OAAO,CAAU;QACjB,mBAAc,GAAd,cAAc,CAAS;QAJ3B,cAAS,GAAkB,IAAI,CAAC;IAKrC,CAAC;IAEG,UAAU,CACb,OAAgB,EAChB,UAAsB,EACtB,aAA4B,EAC5B,UAAsB,EACtB,OAA8B,EAC9B,cAA8B;QAE9B,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE;YACjB,IAAI,CAAC,SAAS,GAAG,OAAO,CAAC,cAAc,EAAE,CAAC;SAC7C;QACD,IAAI,OAAO,CAAC,UAAU,EAAE,CAAC,MAAM,GAAG,CAAC,EAAE;YACjC,gEAAgE;YAChE,UAAU,CAAC,UAAU,CACjB,OAAO,CAAC,UAAU,EAAE,EACpB,SAAS,CAAC,UAAU,EACpB,IAAI,CAAC,cAAc,CAAC,CAAC,EACrB,IAAI,CAAC,cAAc,CAAC,CAAC,CACxB,CAAC;YACF,OAAO,cAAc,EAAE,CAAC;SAC3B;QACD,IAAI,IAAI,CAAC,SAAS,IAAI,OAAO,CAAC,cAAc,EAAE,GAAG,IAAI,CAAC,SAAS,GAAG,GAAG,EAAE;YACnE,sFAAsF;YACtF,OAAO,cAAc,EAAE,CAAC;SAC3B;aAAM;YACH,OAAO,oBAAoB,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;SACnD;IACL,CAAC;IAEM,kBAAkB;QACrB,OAAO,SAAS,CAAC;IACrB,CAAC;CACJ"}
@@ -1,94 +0,0 @@
1
- import { OrderType } from "@chronodivide/game-api";
2
- import { getDistanceBetweenTileAndPoint } from "../../map/map.js";
3
- import { disbandMission, noop, requestUnits } from "../mission.js";
4
- const SCOUT_MOVE_COOLDOWN_TICKS = 30;
5
- // Max units to spend on a particular scout target.
6
- const MAX_ATTEMPTS_PER_TARGET = 5;
7
- // Maximum ticks to spend trying to scout a target *without making progress towards it*.
8
- // Every time a unit gets closer to the target, the timer refreshes.
9
- const MAX_TICKS_PER_TARGET = 600;
10
- export class ScoutingSquad {
11
- constructor(priority) {
12
- this.priority = priority;
13
- this.scoutTarget = null;
14
- this.attemptsOnCurrentTarget = 0;
15
- this.scoutTargetRefreshedAt = 0;
16
- this.lastMoveCommandTick = 0;
17
- this.scoutTargetIsPermanent = false;
18
- this.hadUnit = false;
19
- }
20
- onAiUpdate(gameApi, actionsApi, actionBatcher, playerData, mission, matchAwareness, logger) {
21
- const scoutNames = ["ADOG", "DOG", "E1", "E2", "FV", "HTK"];
22
- const scouts = mission.getUnitsOfTypes(gameApi, ...scoutNames);
23
- if ((matchAwareness.getSectorCache().getOverallVisibility() || 0) > 0.9) {
24
- return disbandMission();
25
- }
26
- if (scouts.length === 0) {
27
- // Count the number of times the scout dies trying to uncover the current scoutTarget.
28
- if (this.scoutTarget && this.hadUnit) {
29
- this.attemptsOnCurrentTarget++;
30
- this.hadUnit = false;
31
- }
32
- return requestUnits(scoutNames, this.priority);
33
- }
34
- else if (this.scoutTarget) {
35
- this.hadUnit = true;
36
- if (!this.scoutTargetIsPermanent) {
37
- if (this.attemptsOnCurrentTarget > MAX_ATTEMPTS_PER_TARGET) {
38
- logger(`Scout target ${this.scoutTarget.x},${this.scoutTarget.y} took too many attempts, moving to next`);
39
- this.setScoutTarget(null, 0);
40
- return noop();
41
- }
42
- if (gameApi.getCurrentTick() > this.scoutTargetRefreshedAt + MAX_TICKS_PER_TARGET) {
43
- logger(`Scout target ${this.scoutTarget.x},${this.scoutTarget.y} took too long, moving to next`);
44
- this.setScoutTarget(null, 0);
45
- return noop();
46
- }
47
- }
48
- const targetTile = gameApi.mapApi.getTile(this.scoutTarget.x, this.scoutTarget.y);
49
- if (!targetTile) {
50
- throw new Error(`target tile ${this.scoutTarget.x},${this.scoutTarget.y} does not exist`);
51
- }
52
- if (gameApi.getCurrentTick() > this.lastMoveCommandTick + SCOUT_MOVE_COOLDOWN_TICKS) {
53
- this.lastMoveCommandTick = gameApi.getCurrentTick();
54
- scouts.forEach((unit) => {
55
- if (this.scoutTarget) {
56
- actionsApi.orderUnits([unit.id], OrderType.AttackMove, this.scoutTarget.x, this.scoutTarget.y);
57
- }
58
- });
59
- // Check that a scout is actually moving closer to the target.
60
- const distances = scouts.map((unit) => getDistanceBetweenTileAndPoint(unit.tile, this.scoutTarget));
61
- const newMinDistance = Math.min(...distances);
62
- if (!this.scoutMinDistance || newMinDistance < this.scoutMinDistance) {
63
- logger(`Scout timeout refreshed because unit moved closer to point (${newMinDistance} < ${this.scoutMinDistance})`);
64
- this.scoutTargetRefreshedAt = gameApi.getCurrentTick();
65
- this.scoutMinDistance = newMinDistance;
66
- }
67
- }
68
- if (gameApi.mapApi.isVisibleTile(targetTile, playerData.name)) {
69
- logger(`Scout target ${this.scoutTarget.x},${this.scoutTarget.y} successfully scouted, moving to next`);
70
- this.setScoutTarget(null, gameApi.getCurrentTick());
71
- }
72
- }
73
- else {
74
- const nextScoutTarget = matchAwareness.getScoutingManager().getNewScoutTarget();
75
- if (!nextScoutTarget) {
76
- logger(`No more scouting targets available, disbanding.`);
77
- return disbandMission();
78
- }
79
- this.setScoutTarget(nextScoutTarget, gameApi.getCurrentTick());
80
- }
81
- return noop();
82
- }
83
- setScoutTarget(target, currentTick) {
84
- this.attemptsOnCurrentTarget = 0;
85
- this.scoutTargetRefreshedAt = currentTick;
86
- this.scoutTarget = target?.asVector2() ?? null;
87
- this.scoutMinDistance = undefined;
88
- this.scoutTargetIsPermanent = target?.isPermanent ?? false;
89
- }
90
- getGlobalDebugText() {
91
- return undefined;
92
- }
93
- }
94
- //# sourceMappingURL=scoutingSquad.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"scoutingSquad.js","sourceRoot":"","sources":["../../../../../src/bot/logic/mission/behaviours/scoutingSquad.ts"],"names":[],"mappings":"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"}
@@ -1,32 +0,0 @@
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
- }
@@ -1,13 +0,0 @@
1
- import { Mission } from "../mission.js";
2
- /**
3
- * A mission that just delegates to the mission behaviour.
4
- */
5
- export class BasicMission extends Mission {
6
- constructor(uniqueName, behaviour, logger) {
7
- super(uniqueName, behaviour, logger);
8
- }
9
- _onAiUpdate(gameApi, actionsApi, playerData, matchAwareness, actionBatcher) {
10
- return this.getBehaviour.onAiUpdate(gameApi, actionsApi, actionBatcher, playerData, this, matchAwareness, this.logger);
11
- }
12
- }
13
- //# sourceMappingURL=basicMission.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"basicMission.js","sourceRoot":"","sources":["../../../../../src/bot/logic/mission/missions/basicMission.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAuC,MAAM,eAAe,CAAC;AAM7E;;GAEG;AACH,MAAM,OAAgB,YAAwD,SAAQ,OAAa;IAC/F,YAAY,UAAkB,EAAE,SAAY,EAAE,MAAmB;QAC7D,KAAK,CAAC,UAAU,EAAE,SAAS,EAAE,MAAM,CAAC,CAAC;IACzC,CAAC;IAED,WAAW,CACP,OAAgB,EAChB,UAAsB,EACtB,UAAsB,EACtB,cAA8B,EAC9B,aAA4B;QAE5B,OAAO,IAAI,CAAC,YAAY,CAAC,UAAU,CAC/B,OAAO,EACP,UAAU,EACV,aAAa,EACb,UAAU,EACV,IAAI,EACJ,cAAc,EACd,IAAI,CAAC,MAAM,CACd,CAAC;IACN,CAAC;CACJ"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=missionBehaviour.js.map