diff --git a/main.js b/main.js index 67f875c..897620b 100644 --- a/main.js +++ b/main.js @@ -1,6 +1,5 @@ var roleDispatcher = require('role.dispatcher'); -var creepCounts = {"harvester" : 3, "builder" : 1, "upgrader" : 2, "repairer" : 1}; module.exports.loop = function () { @@ -9,17 +8,9 @@ module.exports.loop = function () { delete Memory.creeps[name]; } } + + roleDispatcher.spawnCreeps(Game.spawns['Moscow']); - for(const [role, count] of Object.entries(creepCounts)){ - var roleCreeps = _.filter(Game.creeps, (creep) => creep.memory.role == role); - - if(roleCreeps.length < count && !Game.spawns['Moscow'].spawning) { - var newName = role + Game.time; - Game.spawns['Moscow'].spawnCreep([WORK,CARRY,MOVE], newName, - {memory: {role: role}}); - break; - } - } if(Game.spawns['Moscow'].spawning) { var spawningCreep = Game.creeps[Game.spawns['Moscow'].spawning.name]; diff --git a/role.builder.js b/role.builder.js index 85f3142..8c0fe07 100644 --- a/role.builder.js +++ b/role.builder.js @@ -1,6 +1,11 @@ var energyUtils = require('utils.energy'); +const body = [ + WORK, CARRY, MOVE +]; + var roleBuilder = { + body, /** @param {Creep} creep **/ run: function(creep) { @@ -26,4 +31,4 @@ var roleBuilder = { } }; -module.exports = roleBuilder; \ No newline at end of file +module.exports = roleBuilder; diff --git a/role.dispatcher.js b/role.dispatcher.js index b499bab..5d917c7 100644 --- a/role.dispatcher.js +++ b/role.dispatcher.js @@ -2,12 +2,22 @@ var roleHarvester = require('role.harvester'); var roleUpgrader = require('role.upgrader'); var roleBuilder = require('role.builder'); var roleRepairer = require('role.repairer'); +var roleGuard = require('role.guard'); const roleMap = { harvester: roleHarvester, upgrader: roleUpgrader, builder: roleBuilder, - repairer: roleRepairer + repairer: roleRepairer, + streltsy: roleGuard +}; + +var creepCounts = { + "harvester" : 3, + "builder" : 1, + "upgrader" : 2, + "repairer" : 1, + "streltsy" : 2 }; function runRole(creep){ @@ -16,8 +26,22 @@ function runRole(creep){ if(role && typeof role.run === 'function'){ role.run(creep); } else { - console.log('Unknown or underfied role: ' + creep.memory.role); + console.log('Unknown or undefined role: ' + creep.memory.role); } } -module.exports = { runRole }; +function spawnCreeps(spawn){ + for(const [role, count] of Object.entries(creepCounts)){ + var roleCreeps = _.filter(Game.creeps, (creep) => creep.memory.role == role); + + + if(roleCreeps.length < count && !spawn.spawning) { + var newName = role + Game.time; + console.log(spawn.spawnCreep(roleMap[role].body, newName, + {memory: {role: role}})); + break; + } + } +} + +module.exports = { runRole, spawnCreeps, creepCounts}; diff --git a/role.guard.js b/role.guard.js index 37aad07..9ad0ce7 100644 --- a/role.guard.js +++ b/role.guard.js @@ -1,21 +1,24 @@ var energyUtils = require('utils.energy'); -var roleHarvester = { +const body = [ + MOVE, RANGED_ATTACK +]; + +var roleGuard = { + body, /** @param {Creep} creep **/ run: function(creep) { - if(creep.store.getFreeCapacity() > 0) { - var sources = creep.room.find(FIND_SOURCES); - if(creep.harvest(sources[0]) == ERR_NOT_IN_RANGE) { - creep.moveTo(sources[0], {visualizePathStyle: {stroke: '#ffaa00'}}); - } - } + const target = creep.pos.findClosestByRange(FIND_HOSTILE_CREEPS); + if(target) { + if(creep.rangedAttack(target) == ERR_NOT_IN_RANGE) { + creep.moveTo(target); + } + } else { - if(!energyUtils.depositEnergy(creep)){ - creep.moveTo(Game.flags.IdleArea); - } + creep.moveTo(Game.flags.IdleArea); } } }; -module.exports = roleHarvester; \ No newline at end of file +module.exports = roleGuard; diff --git a/role.harvester.js b/role.harvester.js index acf3189..3546074 100644 --- a/role.harvester.js +++ b/role.harvester.js @@ -1,6 +1,11 @@ var energyUtils = require('utils.energy'); +const body = [ + WORK, CARRY, MOVE +]; + var roleHarvester = { + body, /** @param {Creep} creep **/ run: function(creep) { diff --git a/role.repairer.js b/role.repairer.js index 5b3dba6..55f6142 100644 --- a/role.repairer.js +++ b/role.repairer.js @@ -1,6 +1,11 @@ var energyUtils = require('utils.energy'); +const body = [ + WORK, CARRY, MOVE +]; + var roleRepairer = { + body, /** @param {Creep} creep **/ run: function(creep) { @@ -33,4 +38,4 @@ var roleRepairer = { } }; -module.exports = roleRepairer; \ No newline at end of file +module.exports = roleRepairer; diff --git a/role.upgrader.js b/role.upgrader.js index 89d07b4..4ec2e3c 100644 --- a/role.upgrader.js +++ b/role.upgrader.js @@ -1,4 +1,9 @@ +const body = [ + WORK, CARRY, MOVE +]; + var roleUpgrader = { + body, /** @param {Creep} creep **/ run: function(creep) { @@ -24,4 +29,4 @@ var roleUpgrader = { } }; -module.exports = roleUpgrader; \ No newline at end of file +module.exports = roleUpgrader;