From 1524a5acfb55cc54f240bec8f15761e0f563de2b Mon Sep 17 00:00:00 2001 From: ztimson Date: Mon, 13 Apr 2020 11:10:01 -0400 Subject: [PATCH] init --- src/main.js | 34 ++++++++++++++++++++++++++++++++++ src/role.builder.js | 32 ++++++++++++++++++++++++++++++++ src/role.harvester.js | 29 +++++++++++++++++++++++++++++ src/role.upgrader.js | 29 +++++++++++++++++++++++++++++ 4 files changed, 124 insertions(+) create mode 100644 src/main.js create mode 100644 src/role.builder.js create mode 100644 src/role.harvester.js create mode 100644 src/role.upgrader.js diff --git a/src/main.js b/src/main.js new file mode 100644 index 0000000..4b96354 --- /dev/null +++ b/src/main.js @@ -0,0 +1,34 @@ +var roleHarvester = require('role.harvester'); +var roleUpgrader = require('role.upgrader'); +var roleBuilder = require('role.builder'); + +module.exports.loop = function () { + + var tower = Game.getObjectById('TOWER_ID'); + if(tower) { + var closestDamagedStructure = tower.pos.findClosestByRange(FIND_STRUCTURES, { + filter: (structure) => structure.hits < structure.hitsMax + }); + if(closestDamagedStructure) { + tower.repair(closestDamagedStructure); + } + + var closestHostile = tower.pos.findClosestByRange(FIND_HOSTILE_CREEPS); + if(closestHostile) { + tower.attack(closestHostile); + } + } + + for(var name in Game.creeps) { + var creep = Game.creeps[name]; + if(creep.memory.role == 'harvester') { + roleHarvester.run(creep); + } + if(creep.memory.role == 'upgrader') { + roleUpgrader.run(creep); + } + if(creep.memory.role == 'builder') { + roleBuilder.run(creep); + } + } +} \ No newline at end of file diff --git a/src/role.builder.js b/src/role.builder.js new file mode 100644 index 0000000..1cbd361 --- /dev/null +++ b/src/role.builder.js @@ -0,0 +1,32 @@ +var roleBuilder = { + + /** @param {Creep} creep **/ + run: function(creep) { + + if(creep.memory.building && creep.store[RESOURCE_ENERGY] == 0) { + creep.memory.building = false; + creep.say('🔄 harvest'); + } + if(!creep.memory.building && creep.store.getFreeCapacity() == 0) { + creep.memory.building = true; + creep.say('🚧 build'); + } + + if(creep.memory.building) { + var targets = creep.room.find(FIND_CONSTRUCTION_SITES); + if(targets.length) { + if(creep.build(targets[0]) == ERR_NOT_IN_RANGE) { + creep.moveTo(targets[0], {visualizePathStyle: {stroke: '#ffffff'}}); + } + } + } + else { + var sources = creep.room.find(FIND_SOURCES); + if(creep.harvest(sources[0]) == ERR_NOT_IN_RANGE) { + creep.moveTo(sources[0], {visualizePathStyle: {stroke: '#ffaa00'}}); + } + } + } +}; + +module.exports = roleBuilder; \ No newline at end of file diff --git a/src/role.harvester.js b/src/role.harvester.js new file mode 100644 index 0000000..8963f0d --- /dev/null +++ b/src/role.harvester.js @@ -0,0 +1,29 @@ +var roleHarvester = { + + /** @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'}}); + } + } + else { + var targets = creep.room.find(FIND_STRUCTURES, { + filter: (structure) => { + return (structure.structureType == STRUCTURE_EXTENSION || + structure.structureType == STRUCTURE_SPAWN || + structure.structureType == STRUCTURE_TOWER) && + structure.store.getFreeCapacity(RESOURCE_ENERGY) > 0; + } + }); + if(targets.length > 0) { + if(creep.transfer(targets[0], RESOURCE_ENERGY) == ERR_NOT_IN_RANGE) { + creep.moveTo(targets[0], {visualizePathStyle: {stroke: '#ffffff'}}); + } + } + } + } +}; + +module.exports = roleHarvester; \ No newline at end of file diff --git a/src/role.upgrader.js b/src/role.upgrader.js new file mode 100644 index 0000000..f95aafa --- /dev/null +++ b/src/role.upgrader.js @@ -0,0 +1,29 @@ +var roleUpgrader = { + + /** @param {Creep} creep **/ + run: function(creep) { + + if(creep.memory.upgrading && creep.store[RESOURCE_ENERGY] == 0) { + creep.memory.upgrading = false; + creep.say('🔄 harvest'); + } + if(!creep.memory.upgrading && creep.store.getFreeCapacity() == 0) { + creep.memory.upgrading = true; + creep.say('⚡ upgrade'); + } + + if(creep.memory.upgrading) { + if(creep.upgradeController(creep.room.controller) == ERR_NOT_IN_RANGE) { + creep.moveTo(creep.room.controller, {visualizePathStyle: {stroke: '#ffffff'}}); + } + } + else { + var sources = creep.room.find(FIND_SOURCES); + if(creep.harvest(sources[0]) == ERR_NOT_IN_RANGE) { + creep.moveTo(sources[0], {visualizePathStyle: {stroke: '#ffaa00'}}); + } + } + } +}; + +module.exports = roleUpgrader; \ No newline at end of file