@supalosa/chronodivide-bot 0.4.0 → 0.5.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.env.template +5 -0
- package/README.md +54 -47
- package/dist/bot/bot.js +14 -30
- package/dist/bot/bot.js.map +1 -1
- package/dist/bot/logic/awareness.js +13 -8
- package/dist/bot/logic/awareness.js.map +1 -1
- package/dist/bot/logic/awarenessImpl.js +132 -0
- package/dist/bot/logic/awarenessImpl.js.map +1 -0
- package/dist/bot/logic/building/ArtilleryUnit.js +2 -29
- package/dist/bot/logic/building/ArtilleryUnit.js.map +1 -0
- package/dist/bot/logic/building/antiAirStaticDefence.js +43 -0
- package/dist/bot/logic/building/antiAirStaticDefence.js.map +1 -0
- package/dist/bot/logic/building/antiGroundStaticDefence.js +7 -4
- package/dist/bot/logic/building/antiGroundStaticDefence.js.map +1 -1
- package/dist/bot/logic/building/basicAirUnit.js +2 -23
- package/dist/bot/logic/building/basicAirUnit.js.map +1 -1
- package/dist/bot/logic/building/basicBuilding.js +3 -2
- package/dist/bot/logic/building/basicBuilding.js.map +1 -1
- package/dist/bot/logic/building/basicGroundUnit.js +2 -43
- package/dist/bot/logic/building/basicGroundUnit.js.map +1 -1
- package/dist/bot/logic/building/building.js +55 -11
- package/dist/bot/logic/building/building.js.map +1 -0
- package/dist/bot/logic/building/buildingRules.js +10 -5
- package/dist/bot/logic/building/buildingRules.js.map +1 -1
- package/dist/bot/logic/building/common.js +19 -0
- package/dist/bot/logic/building/common.js.map +1 -0
- package/dist/bot/logic/building/harvester.js +2 -1
- package/dist/bot/logic/building/harvester.js.map +1 -1
- package/dist/bot/logic/building/queueController.js +69 -42
- package/dist/bot/logic/building/queueController.js.map +1 -1
- package/dist/bot/logic/common/utils.js +21 -0
- package/dist/bot/logic/common/utils.js.map +1 -1
- package/dist/bot/logic/composition/alliedCompositions.js +13 -0
- package/dist/bot/logic/composition/alliedCompositions.js.map +1 -0
- package/dist/bot/logic/composition/common.js +2 -0
- package/dist/bot/logic/composition/common.js.map +1 -0
- package/dist/bot/logic/composition/sovietCompositions.js +13 -0
- package/dist/bot/logic/composition/sovietCompositions.js.map +1 -0
- package/dist/bot/logic/mission/actionBatcher.js +92 -0
- package/dist/bot/logic/mission/actionBatcher.js.map +1 -0
- package/dist/bot/logic/mission/behaviours/combatSquad.js +124 -0
- package/dist/bot/logic/mission/behaviours/combatSquad.js.map +1 -0
- package/dist/bot/logic/mission/behaviours/common.js +58 -0
- package/dist/bot/logic/mission/behaviours/common.js.map +1 -0
- package/dist/bot/logic/mission/behaviours/engineerSquad.js +39 -0
- package/dist/bot/logic/mission/behaviours/engineerSquad.js.map +1 -0
- package/dist/bot/logic/mission/behaviours/expansionSquad.js +46 -0
- package/dist/bot/logic/mission/behaviours/expansionSquad.js.map +1 -0
- package/dist/bot/logic/mission/behaviours/retreatSquad.js +31 -0
- package/dist/bot/logic/mission/behaviours/retreatSquad.js.map +1 -0
- package/{src/bot/logic/squad/behaviours/scoutingSquad.ts → dist/bot/logic/mission/behaviours/scoutingSquad.js} +27 -51
- package/dist/bot/logic/mission/behaviours/scoutingSquad.js.map +1 -0
- package/dist/bot/logic/mission/mission.js +91 -19
- package/dist/bot/logic/mission/mission.js.map +1 -1
- package/dist/bot/logic/mission/missionController.js +262 -21
- package/dist/bot/logic/mission/missionController.js.map +1 -1
- package/dist/bot/logic/mission/missions/attackMission.js +113 -39
- package/dist/bot/logic/mission/missions/attackMission.js.map +1 -1
- package/dist/bot/logic/mission/missions/basicMission.js +13 -0
- package/dist/bot/logic/mission/missions/basicMission.js.map +1 -0
- package/dist/bot/logic/mission/missions/defenceMission.js +43 -28
- package/dist/bot/logic/mission/missions/defenceMission.js.map +1 -1
- package/dist/bot/logic/mission/missions/engineerMission.js +37 -7
- package/dist/bot/logic/mission/missions/engineerMission.js.map +1 -1
- package/dist/bot/logic/mission/missions/expansionMission.js +42 -6
- package/dist/bot/logic/mission/missions/expansionMission.js.map +1 -1
- package/dist/bot/logic/mission/missions/missionBehaviour.js +2 -0
- package/dist/bot/logic/mission/missions/missionBehaviour.js.map +1 -0
- package/dist/bot/logic/mission/missions/retreatMission.js +31 -5
- package/dist/bot/logic/mission/missions/retreatMission.js.map +1 -1
- package/dist/bot/logic/mission/missions/scoutingMission.js +103 -6
- package/dist/bot/logic/mission/missions/scoutingMission.js.map +1 -1
- package/dist/bot/logic/mission/missions/squads/combatSquad.js +116 -0
- package/dist/bot/logic/mission/missions/squads/combatSquad.js.map +1 -0
- package/dist/bot/logic/mission/missions/squads/common.js +58 -0
- package/dist/bot/logic/mission/missions/squads/common.js.map +1 -0
- package/dist/bot/logic/mission/missions/squads/squad.js +2 -0
- package/dist/bot/logic/mission/missions/squads/squad.js.map +1 -0
- package/dist/bot/logic/squad/behaviours/attackSquad.js +63 -56
- package/dist/bot/logic/squad/behaviours/combatSquad.js +21 -25
- package/dist/bot/logic/squad/behaviours/combatSquad.js.map +1 -1
- package/dist/bot/logic/squad/behaviours/common.js +11 -26
- package/dist/bot/logic/squad/behaviours/common.js.map +1 -1
- package/dist/bot/logic/squad/behaviours/defenceSquad.js +15 -2
- package/dist/bot/logic/squad/behaviours/engineerSquad.js +2 -4
- package/dist/bot/logic/squad/behaviours/engineerSquad.js.map +1 -1
- package/dist/bot/logic/squad/behaviours/expansionSquad.js +2 -4
- package/dist/bot/logic/squad/behaviours/expansionSquad.js.map +1 -1
- package/dist/bot/logic/squad/behaviours/retreatSquad.js +1 -4
- package/dist/bot/logic/squad/behaviours/retreatSquad.js.map +1 -1
- package/dist/bot/logic/squad/behaviours/scoutingSquad.js +18 -25
- package/dist/bot/logic/squad/behaviours/scoutingSquad.js.map +1 -1
- package/dist/bot/logic/squad/squad.js +10 -10
- package/dist/bot/logic/squad/squad.js.map +1 -1
- package/dist/bot/logic/squad/squadBehaviour.js.map +1 -1
- package/dist/bot/logic/squad/squadController.js +5 -17
- package/dist/bot/logic/squad/squadController.js.map +1 -1
- package/dist/bot/logic/threat/threatCalculator.js +5 -5
- package/dist/bot/logic/threat/threatCalculator.js.map +1 -1
- package/dist/exampleBot.js +45 -18
- package/dist/exampleBot.js.map +1 -1
- package/package.json +5 -4
- package/src/bot/bot.ts +19 -45
- package/src/bot/logic/awareness.ts +34 -22
- package/src/bot/logic/building/antiAirStaticDefence.ts +64 -0
- package/src/bot/logic/building/antiGroundStaticDefence.ts +7 -20
- package/src/bot/logic/building/artilleryUnit.ts +2 -28
- package/src/bot/logic/building/basicAirUnit.ts +2 -33
- package/src/bot/logic/building/basicBuilding.ts +8 -6
- package/src/bot/logic/building/basicGroundUnit.ts +2 -46
- package/src/bot/logic/building/buildingRules.ts +15 -9
- package/src/bot/logic/building/common.ts +23 -0
- package/src/bot/logic/building/harvester.ts +2 -1
- package/src/bot/logic/building/queueController.ts +98 -43
- package/src/bot/logic/common/utils.ts +28 -0
- package/src/bot/logic/composition/alliedCompositions.ts +22 -0
- package/src/bot/logic/composition/common.ts +3 -0
- package/src/bot/logic/composition/sovietCompositions.ts +21 -0
- package/src/bot/logic/{squad/behaviours → mission}/actionBatcher.ts +66 -7
- package/src/bot/logic/mission/mission.ts +186 -37
- package/src/bot/logic/mission/missionController.ts +340 -31
- package/src/bot/logic/mission/missionFactories.ts +3 -3
- package/src/bot/logic/mission/missions/attackMission.ts +181 -44
- package/src/bot/logic/mission/missions/defenceMission.ts +72 -45
- package/src/bot/logic/mission/missions/engineerMission.ts +67 -15
- package/src/bot/logic/mission/missions/expansionMission.ts +67 -14
- package/src/bot/logic/mission/missions/retreatMission.ts +50 -6
- package/src/bot/logic/mission/missions/scoutingMission.ts +138 -14
- package/src/bot/logic/{squad/behaviours → mission/missions/squads}/combatSquad.ts +56 -33
- package/src/bot/logic/{squad/behaviours → mission/missions/squads}/common.ts +11 -17
- package/src/bot/logic/mission/missions/squads/squad.ts +19 -0
- package/src/bot/logic/threat/threat.ts +15 -15
- package/src/bot/logic/threat/threatCalculator.ts +10 -10
- package/src/exampleBot.ts +50 -24
- package/.prettierrc +0 -5
- package/TODO.md +0 -15
- package/dist/bot/logic/building/artilleryUnit.js.map +0 -1
- package/dist/bot/logic/building/massedAntiGroundUnit.js +0 -20
- package/dist/bot/logic/building/queues.js +0 -19
- package/dist/bot/logic/knowledge.js +0 -1
- package/dist/bot/logic/mission/basicMission.js +0 -26
- package/dist/bot/logic/mission/expansionMission.js +0 -32
- package/dist/bot/logic/squad/behaviours/actionBatcher.js +0 -36
- package/dist/bot/logic/squad/behaviours/actionBatcher.js.map +0 -1
- package/dist/bot/logic/squad/behaviours/squadExpansion.js +0 -31
- package/dist/bot/logic/squad/behaviours/squadScouters.js +0 -8
- package/rules.ini +0 -23126
- package/src/bot/logic/mission/missions/oneTimeMission.ts +0 -33
- package/src/bot/logic/squad/behaviours/engineerSquad.ts +0 -58
- package/src/bot/logic/squad/behaviours/expansionSquad.ts +0 -64
- package/src/bot/logic/squad/behaviours/retreatSquad.ts +0 -50
- package/src/bot/logic/squad/squad.ts +0 -165
- package/src/bot/logic/squad/squadBehaviour.ts +0 -66
- package/src/bot/logic/squad/squadBehaviours.ts +0 -8
- package/src/bot/logic/squad/squadController.ts +0 -271
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"antiGroundStaticDefence.js","sourceRoot":"","sources":["../../../../src/bot/logic/building/antiGroundStaticDefence.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,yBAAyB,EAAE,MAAM,eAAe,CAAC;AAE1D,OAAO,EAAmB,2BAA2B,EAAE,uBAAuB,EAAE,MAAM,oBAAoB,CAAC;AAE3G,MAAM,OAAO,uBAAuB;IAChC,YACY,YAAoB,EACpB,UAAkB,EAClB,
|
|
1
|
+
{"version":3,"file":"antiGroundStaticDefence.js","sourceRoot":"","sources":["../../../../src/bot/logic/building/antiGroundStaticDefence.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,yBAAyB,EAAE,MAAM,eAAe,CAAC;AAE1D,OAAO,EAAmB,2BAA2B,EAAE,uBAAuB,EAAE,MAAM,oBAAoB,CAAC;AAE3G,MAAM,OAAO,uBAAuB;IAChC,YACY,YAAoB,EACpB,UAAkB,EAClB,cAAsB;QAFtB,iBAAY,GAAZ,YAAY,CAAQ;QACpB,eAAU,GAAV,UAAU,CAAQ;QAClB,mBAAc,GAAd,cAAc,CAAQ;IAC/B,CAAC;IAEJ,oBAAoB,CAChB,IAAa,EACb,UAAsB,EACtB,WAAwB;QAExB,8BAA8B;QAC9B,IAAI,aAAa,GAAG,UAAU,CAAC,aAAa,CAAC;QAC7C,IAAI,OAAO,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC;QAChC,IAAI,6BAA6B,GAAc,EAAE,CAAC;QAClD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,EAAE;YACrC,IAAI,UAAU,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;YAC5B,IAAI,UAAU,IAAI,UAAU,CAAC,IAAI,EAAE;gBAC/B,SAAS;aACZ;YACD,IAAI,WAAW,GAAG,IAAI,CAAC,aAAa,CAAC,UAAU,CAAC,CAAC;YACjD,6BAA6B,CAAC,IAAI,CAC9B,yBAAyB,CAAC,IAAI,EAAE,aAAa,EAAE,WAAW,CAAC,aAAa,EAAE,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,CACxF,CAAC;SACL;QACD,IAAI,gBAAgB,GAChB,6BAA6B,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,cAAc,EAAE,GAAG,6BAA6B,CAAC,MAAM,CAAC,CAAC,CAAC;QAC5G,OAAO,2BAA2B,CAAC,IAAI,EAAE,UAAU,EAAE,gBAAgB,EAAE,WAAW,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC;IAClG,CAAC;IAED,WAAW,CACP,IAAa,EACb,UAAsB,EACtB,WAAwB,EACxB,WAAgC;QAEhC,sEAAsE;QACtE,IAAI,WAAW,EAAE;YACb,IAAI,WAAW,GACX,WAAW,CAAC,iCAAiC,GAAG,WAAW,CAAC,mBAAmB,GAAG,IAAI,CAAC,cAAc,CAAC;YAC1G,IAAI,WAAW,CAAC,wBAAwB,GAAG,WAAW,GAAG,GAAG,EAAE;gBAC1D,OAAO,IAAI,CAAC,YAAY,GAAG,CAAC,WAAW,CAAC,wBAAwB,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,WAAW,CAAC,CAAC,CAAC;aAChG;iBAAM;gBACH,OAAO,CAAC,CAAC;aACZ;SACJ;QACD,MAAM,eAAe,GAAG,CAAC,IAAI,CAAC,cAAc,GAAG,WAAW,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;QACxE,MAAM,QAAQ,GAAG,uBAAuB,CAAC,IAAI,EAAE,UAAU,EAAE,WAAW,CAAC,CAAC;QACxE,OAAO,IAAI,CAAC,YAAY,GAAG,CAAC,GAAG,GAAG,QAAQ,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,eAAe,CAAC;IACpF,CAAC;IAED,WAAW,CACP,IAAa,EACb,UAAsB,EACtB,WAAwB,EACxB,WAAgC;QAEhC,OAAO,IAAI,CAAC;IAChB,CAAC;CACJ"}
|
|
@@ -1,5 +1,3 @@
|
|
|
1
|
-
import { GameMath } from "@chronodivide/game-api";
|
|
2
|
-
import { numBuildingsOwnedOfType } from "./buildingRules.js";
|
|
3
1
|
export class BasicAirUnit {
|
|
4
2
|
constructor(basePriority, baseAmount, antiGroundPower = 1, // boolean for now, but will eventually be used in weighting.
|
|
5
3
|
antiAirPower = 0) {
|
|
@@ -12,27 +10,8 @@ export class BasicAirUnit {
|
|
|
12
10
|
return undefined;
|
|
13
11
|
}
|
|
14
12
|
getPriority(game, playerData, technoRules, threatCache) {
|
|
15
|
-
//
|
|
16
|
-
|
|
17
|
-
let priority = 0;
|
|
18
|
-
if (this.antiGroundPower > 0 &&
|
|
19
|
-
threatCache.totalOffensiveLandThreat > threatCache.totalAvailableAntiGroundFirepower) {
|
|
20
|
-
priority +=
|
|
21
|
-
this.basePriority *
|
|
22
|
-
(threatCache.totalOffensiveLandThreat / Math.max(1, threatCache.totalAvailableAntiGroundFirepower));
|
|
23
|
-
}
|
|
24
|
-
if (this.antiAirPower > 0 &&
|
|
25
|
-
threatCache.totalOffensiveAirThreat > threatCache.totalAvailableAntiAirFirepower) {
|
|
26
|
-
priority +=
|
|
27
|
-
this.basePriority *
|
|
28
|
-
(threatCache.totalOffensiveAirThreat / Math.max(1, threatCache.totalAvailableAntiAirFirepower));
|
|
29
|
-
}
|
|
30
|
-
// sqrt so we don't build too much of one unit type.
|
|
31
|
-
priority += Math.min(1.0, Math.max(1, GameMath.sqrt(threatCache.totalAvailableAirPower / Math.max(1, threatCache.totalOffensiveAntiAirThreat))));
|
|
32
|
-
return this.baseAmount * priority;
|
|
33
|
-
}
|
|
34
|
-
const numOwned = numBuildingsOwnedOfType(game, playerData, technoRules);
|
|
35
|
-
return this.basePriority * (1.0 - numOwned / this.baseAmount);
|
|
13
|
+
// Units aren't built automatically, but are instead requested by missions.
|
|
14
|
+
return 0;
|
|
36
15
|
}
|
|
37
16
|
getMaxCount(game, playerData, technoRules, threatCache) {
|
|
38
17
|
return null;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"basicAirUnit.js","sourceRoot":"","sources":["../../../../src/bot/logic/building/basicAirUnit.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"basicAirUnit.js","sourceRoot":"","sources":["../../../../src/bot/logic/building/basicAirUnit.ts"],"names":[],"mappings":"AAIA,MAAM,OAAO,YAAY;IACrB,YACY,YAAoB,EACpB,UAAkB,EAClB,kBAA0B,CAAC,EAAE,6DAA6D;IAC1F,eAAuB,CAAC;QAHxB,iBAAY,GAAZ,YAAY,CAAQ;QACpB,eAAU,GAAV,UAAU,CAAQ;QAClB,oBAAe,GAAf,eAAe,CAAY;QAC3B,iBAAY,GAAZ,YAAY,CAAY;IACjC,CAAC;IAEJ,oBAAoB,CAChB,IAAa,EACb,UAAsB,EACtB,WAAwB;QAExB,OAAO,SAAS,CAAC;IACrB,CAAC;IAED,WAAW,CACP,IAAa,EACb,UAAsB,EACtB,WAAwB,EACxB,WAAgC;QAEhC,2EAA2E;QAC3E,OAAO,CAAC,CAAC;IACb,CAAC;IAED,WAAW,CACP,IAAa,EACb,UAAsB,EACtB,WAAwB,EACxB,WAAgC;QAEhC,OAAO,IAAI,CAAC;IAChB,CAAC;CACJ"}
|
|
@@ -14,10 +14,11 @@ export class BasicBuilding {
|
|
|
14
14
|
if (numOwned >= (calcMaxCount ?? this.maxNeeded)) {
|
|
15
15
|
return -100;
|
|
16
16
|
}
|
|
17
|
+
const priority = this.basePriority * (1.0 - numOwned / this.maxNeeded);
|
|
17
18
|
if (this.onlyBuildWhenFloatingCreditsAmount && playerData.credits < this.onlyBuildWhenFloatingCreditsAmount) {
|
|
18
|
-
return
|
|
19
|
+
return priority * (playerData.credits / this.onlyBuildWhenFloatingCreditsAmount);
|
|
19
20
|
}
|
|
20
|
-
return
|
|
21
|
+
return priority;
|
|
21
22
|
}
|
|
22
23
|
getMaxCount(game, playerData, technoRules, threatCache) {
|
|
23
24
|
return this.maxNeeded;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"basicBuilding.js","sourceRoot":"","sources":["../../../../src/bot/logic/building/basicBuilding.ts"],"names":[],"mappings":"AACA,OAAO,EAAmB,2BAA2B,EAAE,uBAAuB,EAAE,MAAM,oBAAoB,CAAC;AAG3G,MAAM,OAAO,aAAa;IACtB,YACc,YAAoB,EACpB,SAAiB,EACjB,kCAA2C;QAF3C,iBAAY,GAAZ,YAAY,CAAQ;QACpB,cAAS,GAAT,SAAS,CAAQ;QACjB,uCAAkC,GAAlC,kCAAkC,CAAS;IACtD,CAAC;IAEJ,oBAAoB,CAChB,IAAa,EACb,UAAsB,EACtB,WAAwB;QAExB,OAAO,2BAA2B,CAAC,IAAI,EAAE,UAAU,EAAE,UAAU,CAAC,aAAa,EAAE,WAAW,CAAC,CAAC;IAChG,CAAC;IAED,WAAW,CACP,IAAa,EACb,UAAsB,EACtB,WAAwB,EACxB,WAAgC;QAEhC,MAAM,QAAQ,GAAG,uBAAuB,CAAC,IAAI,EAAE,UAAU,EAAE,WAAW,CAAC,CAAC;QACxE,MAAM,YAAY,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,UAAU,EAAE,WAAW,EAAE,WAAW,CAAC,CAAC;QAClF,IAAI,QAAQ,IAAI,CAAC,YAAY,IAAI,IAAI,CAAC,SAAS,CAAC,EAAE;YAC9C,OAAO,CAAC,GAAG,CAAC;SACf;QAED,IAAI,IAAI,CAAC,kCAAkC,IAAI,UAAU,CAAC,OAAO,GAAG,IAAI,CAAC,kCAAkC,EAAE;YACzG,OAAO,
|
|
1
|
+
{"version":3,"file":"basicBuilding.js","sourceRoot":"","sources":["../../../../src/bot/logic/building/basicBuilding.ts"],"names":[],"mappings":"AACA,OAAO,EAAmB,2BAA2B,EAAE,uBAAuB,EAAE,MAAM,oBAAoB,CAAC;AAG3G,MAAM,OAAO,aAAa;IACtB,YACc,YAAoB,EACpB,SAAiB,EACjB,kCAA2C;QAF3C,iBAAY,GAAZ,YAAY,CAAQ;QACpB,cAAS,GAAT,SAAS,CAAQ;QACjB,uCAAkC,GAAlC,kCAAkC,CAAS;IACtD,CAAC;IAEJ,oBAAoB,CAChB,IAAa,EACb,UAAsB,EACtB,WAAwB;QAExB,OAAO,2BAA2B,CAAC,IAAI,EAAE,UAAU,EAAE,UAAU,CAAC,aAAa,EAAE,WAAW,CAAC,CAAC;IAChG,CAAC;IAED,WAAW,CACP,IAAa,EACb,UAAsB,EACtB,WAAwB,EACxB,WAAgC;QAEhC,MAAM,QAAQ,GAAG,uBAAuB,CAAC,IAAI,EAAE,UAAU,EAAE,WAAW,CAAC,CAAC;QACxE,MAAM,YAAY,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,UAAU,EAAE,WAAW,EAAE,WAAW,CAAC,CAAC;QAClF,IAAI,QAAQ,IAAI,CAAC,YAAY,IAAI,IAAI,CAAC,SAAS,CAAC,EAAE;YAC9C,OAAO,CAAC,GAAG,CAAC;SACf;QAED,MAAM,QAAQ,GAAG,IAAI,CAAC,YAAY,GAAG,CAAC,GAAG,GAAG,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC;QAEvE,IAAI,IAAI,CAAC,kCAAkC,IAAI,UAAU,CAAC,OAAO,GAAG,IAAI,CAAC,kCAAkC,EAAE;YACzG,OAAO,QAAQ,GAAG,CAAC,UAAU,CAAC,OAAO,GAAG,IAAI,CAAC,kCAAkC,CAAC,CAAC;SACpF;QAED,OAAO,QAAQ,CAAC;IACpB,CAAC;IAED,WAAW,CACP,IAAa,EACb,UAAsB,EACtB,WAAwB,EACxB,WAAgC;QAEhC,OAAO,IAAI,CAAC,SAAS,CAAC;IAC1B,CAAC;CACJ"}
|
|
@@ -1,5 +1,3 @@
|
|
|
1
|
-
import { GameMath } from "@chronodivide/game-api";
|
|
2
|
-
import { numBuildingsOwnedOfType } from "./buildingRules.js";
|
|
3
1
|
export class BasicGroundUnit {
|
|
4
2
|
constructor(basePriority, baseAmount, antiGroundPower = 1, // boolean for now, but will eventually be used in weighting.
|
|
5
3
|
antiAirPower = 0) {
|
|
@@ -12,47 +10,8 @@ export class BasicGroundUnit {
|
|
|
12
10
|
return undefined;
|
|
13
11
|
}
|
|
14
12
|
getPriority(game, playerData, technoRules, threatCache) {
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
let priority = this.basePriority;
|
|
18
|
-
if (this.antiGroundPower > 0) {
|
|
19
|
-
// If the enemy's power is increasing we should try to keep up.
|
|
20
|
-
if (threatCache.totalOffensiveLandThreat > threatCache.totalAvailableAntiGroundFirepower) {
|
|
21
|
-
priority +=
|
|
22
|
-
this.antiGroundPower *
|
|
23
|
-
this.basePriority *
|
|
24
|
-
(threatCache.totalOffensiveLandThreat /
|
|
25
|
-
Math.max(1, threatCache.totalAvailableAntiGroundFirepower));
|
|
26
|
-
}
|
|
27
|
-
else {
|
|
28
|
-
// But also, if our power dwarfs the enemy, keep pressing the advantage.
|
|
29
|
-
priority +=
|
|
30
|
-
(this.antiGroundPower *
|
|
31
|
-
this.basePriority *
|
|
32
|
-
GameMath.sqrt(threatCache.totalAvailableAntiGroundFirepower /
|
|
33
|
-
Math.max(1, threatCache.totalOffensiveLandThreat + threatCache.totalDefensiveThreat))) /
|
|
34
|
-
(numOwned + 1);
|
|
35
|
-
}
|
|
36
|
-
}
|
|
37
|
-
if (this.antiAirPower > 0) {
|
|
38
|
-
if (threatCache.totalOffensiveAirThreat > threatCache.totalAvailableAntiAirFirepower) {
|
|
39
|
-
priority +=
|
|
40
|
-
this.antiAirPower *
|
|
41
|
-
this.basePriority *
|
|
42
|
-
(threatCache.totalOffensiveAirThreat / Math.max(1, threatCache.totalAvailableAntiAirFirepower));
|
|
43
|
-
}
|
|
44
|
-
else {
|
|
45
|
-
priority +=
|
|
46
|
-
(this.antiAirPower *
|
|
47
|
-
this.basePriority *
|
|
48
|
-
GameMath.sqrt(threatCache.totalAvailableAntiAirFirepower /
|
|
49
|
-
Math.max(1, threatCache.totalOffensiveAirThreat + threatCache.totalDefensiveThreat))) /
|
|
50
|
-
(numOwned + 1);
|
|
51
|
-
}
|
|
52
|
-
}
|
|
53
|
-
return priority;
|
|
54
|
-
}
|
|
55
|
-
return this.basePriority * (1.0 - numOwned / this.baseAmount);
|
|
13
|
+
// Units aren't built automatically, but are instead requested by missions.
|
|
14
|
+
return 0;
|
|
56
15
|
}
|
|
57
16
|
getMaxCount(game, playerData, technoRules, threatCache) {
|
|
58
17
|
return null;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"basicGroundUnit.js","sourceRoot":"","sources":["../../../../src/bot/logic/building/basicGroundUnit.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"basicGroundUnit.js","sourceRoot":"","sources":["../../../../src/bot/logic/building/basicGroundUnit.ts"],"names":[],"mappings":"AAIA,MAAM,OAAO,eAAe;IACxB,YACc,YAAoB,EACpB,UAAkB,EAClB,kBAA0B,CAAC,EAAE,6DAA6D;IAC1F,eAAuB,CAAC;QAHxB,iBAAY,GAAZ,YAAY,CAAQ;QACpB,eAAU,GAAV,UAAU,CAAQ;QAClB,oBAAe,GAAf,eAAe,CAAY;QAC3B,iBAAY,GAAZ,YAAY,CAAY;IACnC,CAAC;IAEJ,oBAAoB,CAChB,IAAa,EACb,UAAsB,EACtB,WAAwB;QAExB,OAAO,SAAS,CAAC;IACrB,CAAC;IAED,WAAW,CACP,IAAa,EACb,UAAsB,EACtB,WAAwB,EACxB,WAAgC;QAEhC,2EAA2E;QAC3E,OAAO,CAAC,CAAC;IACb,CAAC;IAED,WAAW,CACP,IAAa,EACb,UAAsB,EACtB,WAAwB,EACxB,WAAgC;QAEhC,OAAO,IAAI,CAAC;IAChB,CAAC;CACJ"}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { ObjectType, } from "@chronodivide/game-api";
|
|
1
2
|
import { AntiGroundStaticDefence } from "./antiGroundStaticDefence.js";
|
|
2
3
|
import { ArtilleryUnit } from "./ArtilleryUnit.js";
|
|
3
4
|
import { BasicAirUnit } from "./basicAirUnit.js";
|
|
@@ -12,23 +13,65 @@ export function numBuildingsOwnedOfType(game, playerData, technoRules) {
|
|
|
12
13
|
export function numBuildingsOwnedOfName(game, playerData, name) {
|
|
13
14
|
return game.getVisibleUnits(playerData.name, "self", (r) => r.name === name).length;
|
|
14
15
|
}
|
|
16
|
+
function computeAdjacentRect(point, t, adjacent) {
|
|
17
|
+
return {
|
|
18
|
+
x: point.x - adjacent,
|
|
19
|
+
y: point.y - adjacent,
|
|
20
|
+
width: t.width + 2 * adjacent,
|
|
21
|
+
height: t.height + 2 * adjacent
|
|
22
|
+
};
|
|
23
|
+
}
|
|
24
|
+
export function getAdjacencyTiles(game, playerData, technoRules) {
|
|
25
|
+
let tiles = [];
|
|
26
|
+
let buildings = game.getVisibleUnits(playerData.name, "self", (tech) => { return tech.type === ObjectType.Building; });
|
|
27
|
+
for (let i in buildings) {
|
|
28
|
+
let building = game.getUnitData(buildings[i]);
|
|
29
|
+
if (building?.rules?.baseNormal) {
|
|
30
|
+
let foundation = building?.foundation;
|
|
31
|
+
let range = computeAdjacentRect({ x: building?.tile.rx, y: building?.tile.ry }, { width: foundation?.width, height: foundation?.height }, technoRules.adjacent);
|
|
32
|
+
let baseTile = game.mapApi.getTile(range.x, range.y);
|
|
33
|
+
if (!baseTile) {
|
|
34
|
+
continue;
|
|
35
|
+
}
|
|
36
|
+
tiles.push(...game.mapApi.getTilesInRect(baseTile, { width: range.width, height: range.height }));
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
return tiles;
|
|
40
|
+
}
|
|
41
|
+
function getTileDistances(startPoint, tiles) {
|
|
42
|
+
let ret = [];
|
|
43
|
+
for (let i in tiles) {
|
|
44
|
+
let currentTile = tiles[i];
|
|
45
|
+
ret.push({
|
|
46
|
+
tile: currentTile,
|
|
47
|
+
distance: distance(currentTile.rx, currentTile.ry, startPoint.x, startPoint.y)
|
|
48
|
+
});
|
|
49
|
+
}
|
|
50
|
+
ret.sort((a, b) => {
|
|
51
|
+
return a.distance - b.distance;
|
|
52
|
+
});
|
|
53
|
+
return ret;
|
|
54
|
+
}
|
|
55
|
+
function distance(x1, y1, x2, y2) {
|
|
56
|
+
var dx = x1 - x2;
|
|
57
|
+
var dy = y1 - y2;
|
|
58
|
+
let tmp = dx * dx + dy * dy;
|
|
59
|
+
if (0 === tmp) {
|
|
60
|
+
return 0;
|
|
61
|
+
}
|
|
62
|
+
return Math.sqrt(tmp);
|
|
63
|
+
}
|
|
15
64
|
export function getDefaultPlacementLocation(game, playerData, startPoint, technoRules, space = 1) {
|
|
16
65
|
// Random location, preferably near start location.
|
|
17
|
-
let startX = startPoint.x;
|
|
18
|
-
let startY = startPoint.y;
|
|
19
66
|
let size = game.getBuildingPlacementData(technoRules.name);
|
|
20
67
|
if (!size) {
|
|
21
68
|
return undefined;
|
|
22
69
|
}
|
|
23
|
-
let
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
if (tile && game.canPlaceBuilding(playerData.name, technoRules.name, tile)) {
|
|
29
|
-
return { rx: xx, ry: yy };
|
|
30
|
-
}
|
|
31
|
-
}
|
|
70
|
+
let tiles = getAdjacencyTiles(game, playerData, technoRules);
|
|
71
|
+
let tileDistances = getTileDistances(startPoint, tiles);
|
|
72
|
+
for (let tileDistance of tileDistances) {
|
|
73
|
+
if (tileDistance.tile && game.canPlaceBuilding(playerData.name, technoRules.name, tileDistance.tile)) {
|
|
74
|
+
return tileDistance.tile;
|
|
32
75
|
}
|
|
33
76
|
}
|
|
34
77
|
return undefined;
|
|
@@ -80,3 +123,4 @@ export const BUILDING_NAME_TO_RULES = new Map([
|
|
|
80
123
|
["ZEP", new BasicAirUnit(5, 1, 5, 1)],
|
|
81
124
|
["V3", new ArtilleryUnit(9, 1)], // V3 Rocket Launcher
|
|
82
125
|
]);
|
|
126
|
+
//# sourceMappingURL=building.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"building.js","sourceRoot":"","sources":["../../../../src/bot/logic/building/building.ts"],"names":[],"mappings":"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"}
|
|
@@ -8,6 +8,7 @@ import { PowerPlant } from "./powerPlant.js";
|
|
|
8
8
|
import { ResourceCollectionBuilding } from "./resourceCollectionBuilding.js";
|
|
9
9
|
import { Harvester } from "./harvester.js";
|
|
10
10
|
import { uniqBy } from "../common/utils.js";
|
|
11
|
+
import { AntiAirStaticDefence } from "./antiAirStaticDefence.js";
|
|
11
12
|
export function numBuildingsOwnedOfType(game, playerData, technoRules) {
|
|
12
13
|
return game.getVisibleUnits(playerData.name, "self", (r) => r == technoRules).length;
|
|
13
14
|
}
|
|
@@ -118,7 +119,7 @@ export function getDefaultPlacementLocation(game, playerData, idealPoint, techno
|
|
|
118
119
|
}
|
|
119
120
|
return undefined;
|
|
120
121
|
}
|
|
121
|
-
export const DEFAULT_BUILDING_PRIORITY =
|
|
122
|
+
export const DEFAULT_BUILDING_PRIORITY = 0;
|
|
122
123
|
export const BUILDING_NAME_TO_RULES = new Map([
|
|
123
124
|
// Allied
|
|
124
125
|
["GAPOWR", new PowerPlant()],
|
|
@@ -126,7 +127,6 @@ export const BUILDING_NAME_TO_RULES = new Map([
|
|
|
126
127
|
["GAWEAP", new BasicBuilding(15, 1)],
|
|
127
128
|
["GAPILE", new BasicBuilding(12, 1)],
|
|
128
129
|
["CMIN", new Harvester(15, 4, 2)],
|
|
129
|
-
["ENGINEER", new BasicBuilding(10, 1, 1000)],
|
|
130
130
|
["GADEPT", new BasicBuilding(1, 1, 10000)],
|
|
131
131
|
["GAAIRC", new BasicBuilding(10, 1, 500)],
|
|
132
132
|
["AMRADR", new BasicBuilding(10, 1, 500)],
|
|
@@ -135,7 +135,8 @@ export const BUILDING_NAME_TO_RULES = new Map([
|
|
|
135
135
|
["GAPILL", new AntiGroundStaticDefence(5, 1, 5)],
|
|
136
136
|
["ATESLA", new AntiGroundStaticDefence(5, 1, 10)],
|
|
137
137
|
["GAWALL", new AntiGroundStaticDefence(0, 0, 0)],
|
|
138
|
-
["E1", new BasicGroundUnit(2,
|
|
138
|
+
["E1", new BasicGroundUnit(2, 2, 0.2, 0)],
|
|
139
|
+
["ENGINEER", new BasicGroundUnit(1, 0, 0)],
|
|
139
140
|
["MTNK", new BasicGroundUnit(10, 3, 2, 0)],
|
|
140
141
|
["MGTK", new BasicGroundUnit(10, 1, 2.5, 0)],
|
|
141
142
|
["FV", new BasicGroundUnit(5, 2, 0.5, 1)],
|
|
@@ -150,16 +151,20 @@ export const BUILDING_NAME_TO_RULES = new Map([
|
|
|
150
151
|
["NAWEAP", new BasicBuilding(15, 1)],
|
|
151
152
|
["NAHAND", new BasicBuilding(12, 1)],
|
|
152
153
|
["HARV", new Harvester(15, 4, 2)],
|
|
153
|
-
["SENGINEER", new BasicBuilding(10, 1, 1000)],
|
|
154
154
|
["NADEPT", new BasicBuilding(1, 1, 10000)],
|
|
155
155
|
["NARADR", new BasicBuilding(10, 1, 500)],
|
|
156
156
|
["NANRCT", new PowerPlant()],
|
|
157
157
|
["NAYARD", new BasicBuilding(0, 0, 0)],
|
|
158
158
|
["NATECH", new BasicBuilding(20, 1, 4000)],
|
|
159
159
|
["NALASR", new AntiGroundStaticDefence(5, 1, 5)],
|
|
160
|
+
["NAFLAK", new AntiAirStaticDefence(5, 1, 5)],
|
|
160
161
|
["TESLA", new AntiGroundStaticDefence(5, 1, 10)],
|
|
161
162
|
["NAWALL", new AntiGroundStaticDefence(0, 0, 0)],
|
|
162
|
-
["E2", new BasicGroundUnit(2,
|
|
163
|
+
["E2", new BasicGroundUnit(2, 2, 0.2, 0)],
|
|
164
|
+
["SENGINEER", new BasicGroundUnit(1, 0, 0)],
|
|
165
|
+
["FLAKT", new BasicGroundUnit(2, 2, 0.1, 0.3)],
|
|
166
|
+
["YURI", new BasicGroundUnit(1, 1, 1, 0)],
|
|
167
|
+
["DOG", new BasicGroundUnit(1, 1, 0, 0)],
|
|
163
168
|
["HTNK", new BasicGroundUnit(10, 3, 3, 0)],
|
|
164
169
|
["APOC", new BasicGroundUnit(6, 1, 5, 0)],
|
|
165
170
|
["HTK", new BasicGroundUnit(5, 2, 0.33, 1.5)],
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"buildingRules.js","sourceRoot":"","sources":["../../../../src/bot/logic/building/buildingRules.ts"],"names":[],"mappings":"AAAA,OAAO,EAGH,QAAQ,EACR,QAAQ,EACR,UAAU,EAKV,OAAO,GACV,MAAM,wBAAwB,CAAC;AAEhC,OAAO,EAAE,uBAAuB,EAAE,MAAM,8BAA8B,CAAC;AACvE,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACvD,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EAAE,0BAA0B,EAAE,MAAM,iCAAiC,CAAC;AAC7E,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAC3C,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"buildingRules.js","sourceRoot":"","sources":["../../../../src/bot/logic/building/buildingRules.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { getPointTowardsOtherPoint } from "../map/map.js";
|
|
2
|
+
import { getDefaultPlacementLocation } from "./buildingRules.js";
|
|
3
|
+
export const getStaticDefencePlacement = (game, playerData, technoRules) => {
|
|
4
|
+
// Prefer front towards enemy.
|
|
5
|
+
let startLocation = playerData.startLocation;
|
|
6
|
+
let players = game.getPlayers();
|
|
7
|
+
let enemyFacingLocationCandidates = [];
|
|
8
|
+
for (let i = 0; i < players.length; ++i) {
|
|
9
|
+
let playerName = players[i];
|
|
10
|
+
if (playerName == playerData.name) {
|
|
11
|
+
continue;
|
|
12
|
+
}
|
|
13
|
+
let enemyPlayer = game.getPlayerData(playerName);
|
|
14
|
+
enemyFacingLocationCandidates.push(getPointTowardsOtherPoint(game, startLocation, enemyPlayer.startLocation, 4, 16, 1.5));
|
|
15
|
+
}
|
|
16
|
+
let selectedLocation = enemyFacingLocationCandidates[Math.floor(game.generateRandom() * enemyFacingLocationCandidates.length)];
|
|
17
|
+
return getDefaultPlacementLocation(game, playerData, selectedLocation, technoRules, false, 0);
|
|
18
|
+
};
|
|
19
|
+
//# sourceMappingURL=common.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"common.js","sourceRoot":"","sources":["../../../../src/bot/logic/building/common.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,yBAAyB,EAAE,MAAM,eAAe,CAAC;AAC1D,OAAO,EAAE,2BAA2B,EAAE,MAAM,oBAAoB,CAAC;AAEjE,MAAM,CAAC,MAAM,yBAAyB,GAAG,CAAC,IAAa,EAAE,UAAsB,EAAE,WAAwB,EAAE,EAAE;IACzG,8BAA8B;IAC9B,IAAI,aAAa,GAAG,UAAU,CAAC,aAAa,CAAC;IAC7C,IAAI,OAAO,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC;IAChC,IAAI,6BAA6B,GAAc,EAAE,CAAC;IAClD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,EAAE;QACrC,IAAI,UAAU,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;QAC5B,IAAI,UAAU,IAAI,UAAU,CAAC,IAAI,EAAE;YAC/B,SAAS;SACZ;QACD,IAAI,WAAW,GAAG,IAAI,CAAC,aAAa,CAAC,UAAU,CAAC,CAAC;QACjD,6BAA6B,CAAC,IAAI,CAC9B,yBAAyB,CAAC,IAAI,EAAE,aAAa,EAAE,WAAW,CAAC,aAAa,EAAE,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,CACxF,CAAC;KACL;IACD,IAAI,gBAAgB,GAChB,6BAA6B,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,cAAc,EAAE,GAAG,6BAA6B,CAAC,MAAM,CAAC,CAAC,CAAC;IAC5G,OAAO,2BAA2B,CAAC,IAAI,EAAE,UAAU,EAAE,gBAAgB,EAAE,WAAW,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC;AAClG,CAAC,CAAC"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { BasicGroundUnit } from "./basicGroundUnit.js";
|
|
2
2
|
const IDEAL_HARVESTERS_PER_REFINERY = 2;
|
|
3
|
+
const MAX_HARVESTERS_PER_REFINERY = 4;
|
|
3
4
|
export class Harvester extends BasicGroundUnit {
|
|
4
5
|
constructor(basePriority, baseAmount, minNeeded) {
|
|
5
6
|
super(basePriority, baseAmount, 0, 0);
|
|
@@ -9,7 +10,7 @@ export class Harvester extends BasicGroundUnit {
|
|
|
9
10
|
getPriority(game, playerData, technoRules, threatCache) {
|
|
10
11
|
const refineries = game.getVisibleUnits(playerData.name, "self", (r) => r.refinery).length;
|
|
11
12
|
const harvesters = game.getVisibleUnits(playerData.name, "self", (r) => r.harvester).length;
|
|
12
|
-
const boost = harvesters < this.minNeeded ? 3 : 1;
|
|
13
|
+
const boost = harvesters < this.minNeeded ? 3 : harvesters > refineries * MAX_HARVESTERS_PER_REFINERY ? 0 : 1;
|
|
13
14
|
return this.basePriority * (refineries / Math.max(harvesters / IDEAL_HARVESTERS_PER_REFINERY, 1)) * boost;
|
|
14
15
|
}
|
|
15
16
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"harvester.js","sourceRoot":"","sources":["../../../../src/bot/logic/building/harvester.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAEvD,MAAM,6BAA6B,GAAG,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"harvester.js","sourceRoot":"","sources":["../../../../src/bot/logic/building/harvester.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAEvD,MAAM,6BAA6B,GAAG,CAAC,CAAC;AACxC,MAAM,2BAA2B,GAAG,CAAC,CAAC;AAEtC,MAAM,OAAO,SAAU,SAAQ,eAAe;IAC1C,YACI,YAAoB,EACpB,UAAkB,EACV,SAAiB;QAEzB,KAAK,CAAC,YAAY,EAAE,UAAU,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;QAF9B,cAAS,GAAT,SAAS,CAAQ;IAG7B,CAAC;IAED,iEAAiE;IACjE,WAAW,CACP,IAAa,EACb,UAAsB,EACtB,WAAwB,EACxB,WAAgC;QAEhC,MAAM,UAAU,GAAG,IAAI,CAAC,eAAe,CAAC,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC;QAC3F,MAAM,UAAU,GAAG,IAAI,CAAC,eAAe,CAAC,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,MAAM,CAAC;QAE5F,MAAM,KAAK,GAAG,UAAU,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,UAAU,GAAG,UAAU,GAAG,2BAA2B,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAE9G,OAAO,IAAI,CAAC,YAAY,GAAG,CAAC,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,UAAU,GAAG,6BAA6B,EAAE,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC;IAC9G,CAAC;CACJ"}
|
|
@@ -26,36 +26,43 @@ export const queueTypeToName = (queue) => {
|
|
|
26
26
|
return "Unknown";
|
|
27
27
|
}
|
|
28
28
|
};
|
|
29
|
-
const DEBUG_BUILD_QUEUES = true;
|
|
30
29
|
export class QueueController {
|
|
31
|
-
constructor() {
|
|
32
|
-
|
|
33
|
-
|
|
30
|
+
constructor() {
|
|
31
|
+
this.queueStates = [];
|
|
32
|
+
}
|
|
33
|
+
onAiUpdate(game, productionApi, actionsApi, playerData, threatCache, unitTypeRequests, logger) {
|
|
34
|
+
this.queueStates = QUEUES.map((queueType) => {
|
|
34
35
|
const options = productionApi.getAvailableObjects(queueType);
|
|
36
|
+
const items = this.getPrioritiesForBuildingOptions(game, options, threatCache, playerData, unitTypeRequests, logger);
|
|
37
|
+
const topItem = items.length > 0 ? items[items.length - 1] : undefined;
|
|
35
38
|
return {
|
|
36
39
|
queue: queueType,
|
|
37
|
-
|
|
40
|
+
items,
|
|
41
|
+
// only if the top item has a priority above zero
|
|
42
|
+
topItem: topItem && topItem.priority > 0 ? topItem : undefined,
|
|
38
43
|
};
|
|
39
|
-
})
|
|
40
|
-
|
|
41
|
-
.map((decision) => decision.
|
|
44
|
+
});
|
|
45
|
+
const totalWeightAcrossQueues = this.queueStates
|
|
46
|
+
.map((decision) => decision.topItem?.priority)
|
|
42
47
|
.reduce((pV, cV) => pV + cV, 0);
|
|
43
|
-
|
|
44
|
-
.map((decision) => decision.
|
|
48
|
+
const totalCostAcrossQueues = this.queueStates
|
|
49
|
+
.map((decision) => decision.topItem?.unit.cost)
|
|
45
50
|
.reduce((pV, cV) => pV + cV, 0);
|
|
46
|
-
|
|
47
|
-
this.updateBuildQueue(game, productionApi, actionsApi, playerData, threatCache, decision.queue, decision.
|
|
51
|
+
this.queueStates.forEach((decision) => {
|
|
52
|
+
this.updateBuildQueue(game, productionApi, actionsApi, playerData, threatCache, decision.queue, decision.topItem, totalWeightAcrossQueues, totalCostAcrossQueues, logger);
|
|
48
53
|
});
|
|
49
54
|
// Repair is simple - just repair everything that's damaged.
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
55
|
+
if (playerData.credits > 0) {
|
|
56
|
+
game.getVisibleUnits(playerData.name, "self", (r) => r.repairable).forEach((unitId) => {
|
|
57
|
+
const unit = game.getUnitData(unitId);
|
|
58
|
+
if (!unit || !unit.hitPoints || !unit.maxHitPoints || unit.hasWrenchRepair) {
|
|
59
|
+
return;
|
|
60
|
+
}
|
|
61
|
+
if (unit.hitPoints < unit.maxHitPoints) {
|
|
62
|
+
actionsApi.toggleRepairWrench(unitId);
|
|
63
|
+
}
|
|
64
|
+
});
|
|
65
|
+
}
|
|
59
66
|
}
|
|
60
67
|
updateBuildQueue(game, productionApi, actionsApi, playerData, threatCache, queueType, decision, totalWeightAcrossQueues, totalCostAcrossQueues, logger) {
|
|
61
68
|
const myCredits = playerData.credits;
|
|
@@ -82,16 +89,15 @@ export class QueueController {
|
|
|
82
89
|
}
|
|
83
90
|
}
|
|
84
91
|
else if (queueData.status == QueueStatus.Active && queueData.items.length > 0 && decision != null) {
|
|
85
|
-
// Consider cancelling if something else is significantly higher priority.
|
|
86
|
-
const
|
|
87
|
-
|
|
88
|
-
if (decision.unit != current) {
|
|
92
|
+
// Consider cancelling if something else is significantly higher priority than what is currently being produced.
|
|
93
|
+
const currentProduction = queueData.items[0].rules;
|
|
94
|
+
if (decision.unit != currentProduction) {
|
|
89
95
|
// Changing our mind.
|
|
90
|
-
let currentItemPriority = this.getPriorityForBuildingOption(
|
|
96
|
+
let currentItemPriority = this.getPriorityForBuildingOption(currentProduction, game, playerData, threatCache);
|
|
91
97
|
let newItemPriority = decision.priority;
|
|
92
98
|
if (newItemPriority > currentItemPriority * 2) {
|
|
93
|
-
logger(`Dequeueing queue ${queueTypeToName(queueData.type)} unit ${
|
|
94
|
-
actionsApi.unqueueFromProduction(queueData.type,
|
|
99
|
+
logger(`Dequeueing queue ${queueTypeToName(queueData.type)} unit ${currentProduction.name} because ${decision.unit.name} has 2x higher priority.`);
|
|
100
|
+
actionsApi.unqueueFromProduction(queueData.type, currentProduction.name, currentProduction.type, 1);
|
|
95
101
|
}
|
|
96
102
|
}
|
|
97
103
|
else {
|
|
@@ -114,24 +120,18 @@ export class QueueController {
|
|
|
114
120
|
}
|
|
115
121
|
}
|
|
116
122
|
}
|
|
117
|
-
|
|
123
|
+
getPrioritiesForBuildingOptions(game, options, threatCache, playerData, unitTypeRequests, logger) {
|
|
118
124
|
let priorityQueue = [];
|
|
119
125
|
options.forEach((option) => {
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
126
|
+
const calculatedPriority = this.getPriorityForBuildingOption(option, game, playerData, threatCache);
|
|
127
|
+
// Get the higher of the dynamic and the mission priority for the unit.
|
|
128
|
+
const actualPriority = Math.max(calculatedPriority, unitTypeRequests.get(option.name) ?? calculatedPriority);
|
|
129
|
+
if (actualPriority > 0) {
|
|
130
|
+
priorityQueue.push({ unit: option, priority: actualPriority });
|
|
123
131
|
}
|
|
124
132
|
});
|
|
125
|
-
priorityQueue = priorityQueue.sort((a, b) =>
|
|
126
|
-
|
|
127
|
-
});
|
|
128
|
-
if (priorityQueue.length > 0) {
|
|
129
|
-
if (DEBUG_BUILD_QUEUES && game.getCurrentTick() % 100 === 0) {
|
|
130
|
-
let queueString = priorityQueue.map((item) => item.unit.name + "(" + item.priority + ")").join(", ");
|
|
131
|
-
logger(`Build priority currently: ${queueString}`);
|
|
132
|
-
}
|
|
133
|
-
}
|
|
134
|
-
return priorityQueue.pop();
|
|
133
|
+
priorityQueue = priorityQueue.sort((a, b) => a.priority - b.priority);
|
|
134
|
+
return priorityQueue;
|
|
135
135
|
}
|
|
136
136
|
getPriorityForBuildingOption(option, game, playerStatus, threatCache) {
|
|
137
137
|
if (BUILDING_NAME_TO_RULES.has(option.name)) {
|
|
@@ -153,5 +153,32 @@ export class QueueController {
|
|
|
153
153
|
return getDefaultPlacementLocation(game, playerData, playerData.startLocation, objectReady);
|
|
154
154
|
}
|
|
155
155
|
}
|
|
156
|
+
getGlobalDebugText(gameApi, productionApi) {
|
|
157
|
+
const productionState = QUEUES.reduce((prev, queueType) => {
|
|
158
|
+
if (productionApi.getQueueData(queueType).size === 0) {
|
|
159
|
+
return prev;
|
|
160
|
+
}
|
|
161
|
+
const paused = productionApi.getQueueData(queueType).status === QueueStatus.OnHold;
|
|
162
|
+
return (prev +
|
|
163
|
+
" [" +
|
|
164
|
+
queueTypeToName(queueType) +
|
|
165
|
+
(paused ? " PAUSED" : "") +
|
|
166
|
+
": " +
|
|
167
|
+
productionApi
|
|
168
|
+
.getQueueData(queueType)
|
|
169
|
+
.items.map((item) => item.rules.name + (item.quantity > 1 ? "x" + item.quantity : "")) +
|
|
170
|
+
"]");
|
|
171
|
+
}, "");
|
|
172
|
+
const queueStates = this.queueStates
|
|
173
|
+
.filter((queueState) => queueState.items.length > 0)
|
|
174
|
+
.map((queueState) => {
|
|
175
|
+
const queueString = queueState.items
|
|
176
|
+
.map((item) => item.unit.name + "(" + Math.round(item.priority * 10) / 10 + ")")
|
|
177
|
+
.join(", ");
|
|
178
|
+
return `${queueTypeToName(queueState.queue)} Prios: ${queueString}\n`;
|
|
179
|
+
})
|
|
180
|
+
.join("");
|
|
181
|
+
return `Production: ${productionState}\n${queueStates}`;
|
|
182
|
+
}
|
|
156
183
|
}
|
|
157
184
|
//# sourceMappingURL=queueController.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"queueController.js","sourceRoot":"","sources":["../../../../src/bot/logic/building/queueController.ts"],"names":[],"mappings":"AAAA,OAAO,EAKH,WAAW,EACX,SAAS,GAEZ,MAAM,wBAAwB,CAAC;AAEhC,OAAO,EAEH,sBAAsB,EACtB,yBAAyB,EACzB,2BAA2B,GAC9B,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"queueController.js","sourceRoot":"","sources":["../../../../src/bot/logic/building/queueController.ts"],"names":[],"mappings":"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"}
|