Skip to content

Commit 4c0d619

Browse files
committed
feat: Similar to remote harvesters, spawn normal-sized harvesters if we still have spare CPU.
1 parent 8a82b2e commit 4c0d619

File tree

1 file changed

+15
-6
lines changed

1 file changed

+15
-6
lines changed

src/spawn-role/harvester.ts

Lines changed: 15 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import BodyBuilder, {MOVEMENT_MODE_MINIMAL, MOVEMENT_MODE_ROAD} from 'creep/body
44
import SpawnRole from 'spawn-role/spawn-role';
55
import {getDangerMatrix} from 'utils/cost-matrix';
66
import {handleMapArea} from 'utils/map';
7+
import stats from 'utils/stats';
78

89
interface HarvesterSpawnOption extends SpawnOption {
910
source: Id<Source>;
@@ -156,13 +157,21 @@ export default class HarvesterSpawnRole extends SpawnRole {
156157
}
157158
});
158159

159-
// @todo Only spawn bigger harvesters in high level rooms when there's
160-
// enough energy and we need to save CPU.
161-
const sizeFactor = (source.room.controller.level === 8 ? 2
162-
: (source.room.controller.level === 7 ? 1.8
163-
: (source.room.controller.level === 6 ? 1.5 : 1.2)));
160+
return this.getHarvesterSizeFactor(source.room) * numberOfParts;
161+
}
162+
163+
getHarvesterSizeFactor(room: Room) {
164+
if (!this.shouldSpawnOversizedHarvesters()) return 1;
165+
166+
if (room.controller.level >= 8) return 2;
167+
if (room.controller.level >= 7) return 1.8;
168+
if (room.controller.level >= 6) return 1.5;
169+
170+
return 1;
171+
}
164172

165-
return sizeFactor * numberOfParts;
173+
shouldSpawnOversizedHarvesters() {
174+
return (stats.getStat('cpu_total', 1000) || 0) / Game.cpu.limit > 0.75;
166175
}
167176

168177
/**

0 commit comments

Comments
 (0)