Add tower module
This commit is contained in:
parent
8979e42150
commit
29f653f77a
47
src/main.ts
47
src/main.ts
@ -3,6 +3,7 @@ import { runAsHarvester } from './creep/harvester';
|
|||||||
import { runAsBuilder } from './creep/builder';
|
import { runAsBuilder } from './creep/builder';
|
||||||
import { runAsUpgrader } from './creep/upgrader';
|
import { runAsUpgrader } from './creep/upgrader';
|
||||||
import { uniqId } from './utils/Identity';
|
import { uniqId } from './utils/Identity';
|
||||||
|
import { runTower } from './tower';
|
||||||
|
|
||||||
function makeName(): string {
|
function makeName(): string {
|
||||||
return uniqId();
|
return uniqId();
|
||||||
@ -125,49 +126,3 @@ export const loop = ErrorMapper.wrapLoop(() => {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
function runTower(tower: StructureTower) {
|
|
||||||
const room = tower.room;
|
|
||||||
const hostile = room.find(FIND_HOSTILE_CREEPS);
|
|
||||||
if (hostile.length > 0) {
|
|
||||||
const res = tower.attack(_.first(hostile));
|
|
||||||
console.log('Attack', res);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
const creeps = room.find(FIND_MY_CREEPS, {
|
|
||||||
filter: (c) => c.hits < c.hitsMax
|
|
||||||
});
|
|
||||||
if (creeps.length > 0) {
|
|
||||||
const res = tower.heal(_.first(creeps));
|
|
||||||
console.log('Heal', res);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Energy only for attack and heal
|
|
||||||
if (tower.store[RESOURCE_ENERGY] < 500) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
const roads = room.find(FIND_STRUCTURES, {
|
|
||||||
filter: (s) => s.structureType === STRUCTURE_ROAD && s.hits < s.hitsMax
|
|
||||||
});
|
|
||||||
if (roads.length > 0) {
|
|
||||||
roads.sort((r1, r2) => r1.hits - r2.hits);
|
|
||||||
let road = _.first(roads);
|
|
||||||
const res = tower.repair(road);
|
|
||||||
console.log('Repair', res);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
const structures = room.find(FIND_STRUCTURES, {
|
|
||||||
filter: (s) => s.hits < s.hitsMax
|
|
||||||
});
|
|
||||||
if (structures.length > 0) {
|
|
||||||
structures.sort((r1, r2) => r1.hits - r2.hits);
|
|
||||||
let structure = _.first(structures);
|
|
||||||
const res = tower.repair(structure);
|
|
||||||
console.log('Repair', res);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
47
src/tower.ts
Normal file
47
src/tower.ts
Normal file
@ -0,0 +1,47 @@
|
|||||||
|
const REPAIR_ENERGY_LIMIT = 500;
|
||||||
|
|
||||||
|
export function runTower(tower: StructureTower) {
|
||||||
|
const room = tower.room;
|
||||||
|
const hostiles = room.find(FIND_HOSTILE_CREEPS);
|
||||||
|
if (hostiles.length > 0) {
|
||||||
|
const hostile = _.min(hostiles, (h) => h.hits);
|
||||||
|
const res = tower.attack(hostile);
|
||||||
|
console.log('Attack', res);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
const creeps = room.find(FIND_MY_CREEPS, {
|
||||||
|
filter: (c) => c.hits < c.hitsMax
|
||||||
|
});
|
||||||
|
if (creeps.length > 0) {
|
||||||
|
const creep = _.min(creeps, (c) => c.hits);
|
||||||
|
const res = tower.heal(creep);
|
||||||
|
console.log('Heal', res);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Energy only for attack and heal
|
||||||
|
if (tower.store[RESOURCE_ENERGY] < REPAIR_ENERGY_LIMIT) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
const roads = room.find(FIND_STRUCTURES, {
|
||||||
|
filter: (s) => s.structureType === STRUCTURE_ROAD && s.hits < s.hitsMax
|
||||||
|
});
|
||||||
|
if (roads.length > 0) {
|
||||||
|
const road = _.min(roads, (r) => r.hits);
|
||||||
|
const res = tower.repair(road);
|
||||||
|
console.log('Repair', res);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
const structures = room.find(FIND_STRUCTURES, {
|
||||||
|
filter: (s) => s.hits < s.hitsMax
|
||||||
|
});
|
||||||
|
if (structures.length > 0) {
|
||||||
|
const structure = _.min(structures, (s) => s.hits);
|
||||||
|
const res = tower.repair(structure);
|
||||||
|
console.log('Repair', res);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user