diff --git a/screeps.com/testing-sim/creep_builds.js b/screeps.com/testing-sim/creep_builds.js new file mode 100644 index 0000000..f096bf8 --- /dev/null +++ b/screeps.com/testing-sim/creep_builds.js @@ -0,0 +1,12 @@ +var creepBuilds = { + + getHarvesterSmall: function() { + return [WORK, WORK, CARRY, MOVE]; + }, + + getUpgraderSmall: function() { + return [WORK, CARRY, MOVE]; + } +}; + +module.exports = creepBuilds; diff --git a/screeps.com/testing-sim/main.js b/screeps.com/testing-sim/main.js new file mode 100644 index 0000000..50df2f3 --- /dev/null +++ b/screeps.com/testing-sim/main.js @@ -0,0 +1,14 @@ +var settings = require("./settings"); +var misc = require("./misc"); + +var creepManager = require("./manage_creeps"); + + +/* + * This file should probably only contain globally relevant methods and fields + */ + +module.exports.loop = function () { + misc.clearMemory(); + creepManager.run(); +} diff --git a/screeps.com/testing-sim/manage_creeps.js b/screeps.com/testing-sim/manage_creeps.js new file mode 100644 index 0000000..dceee7c --- /dev/null +++ b/screeps.com/testing-sim/manage_creeps.js @@ -0,0 +1,43 @@ +/* + * + */ + +var creepBuilds = require("./creep_builds"); +var settings = require("./settings"); +var misc = require("./misc"); + + +var spawnCreeps = settings.getSpawnCreeps(); +var creepGoalAmount = settings.getCreepGoalAmount(); + +var creepManager = { + + run: function() { + if (spawnCreeps) { + for (role in creepGoalAmount) { + roleCreepsAmount = _.filter(Game.creeps, (creep) => creep.memory.role == role); + if (roleCreepsAmount < creepGoalAmount[role]) { + spawnCreep(role, roleCreepsAmount); + } + } + } + } +}; + +module.exports = creepManager; + + + + +function spawnCreep(role, existing) { + let name = role + "_Spheal_" + existing; + + if (!Game.spawns.Spawn1.spawning) { + misc.displayMessage("Spawn", Game.spawns.Spawn1, "Spawning next: " + name); + } + else { + misc.displayMessage("Spawn", Game.spawns.Spawn1, "Spawning Creep"); + } + + Game.spawns.Spawn1.spawnCreep(creepBuilds[buildType], newCreepName, { memory: { role: buildType } }); +} diff --git a/screeps.com/testing-sim/misc.js b/screeps.com/testing-sim/misc.js new file mode 100644 index 0000000..b03f5a0 --- /dev/null +++ b/screeps.com/testing-sim/misc.js @@ -0,0 +1,14 @@ +var settings = { + + clearMemory: function() { + for (var creep in Memory.creeps) { + if (!Game.creeps[creep]) + { + delete Memory.creeps[creep]; + console.log("Deleating non-existing creep memory: ", creep); + } + } + }, +}; + +module.exports = settings; diff --git a/screeps.com/testing-sim/roles_builder.js b/screeps.com/testing-sim/roles_builder.js new file mode 100644 index 0000000..4ba342f --- /dev/null +++ b/screeps.com/testing-sim/roles_builder.js @@ -0,0 +1,41 @@ +/* + * Module code goes here. Use 'module.exports' to export things: + * module.exports.thing = 'a thing'; + * + * You can import it from another modules like this: + * var mod = require('role.builder'); + * mod.thing == 'a thing'; // true + */ + +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/screeps.com/testing-sim/roles_harvester.js b/screeps.com/testing-sim/roles_harvester.js new file mode 100644 index 0000000..95e28a6 --- /dev/null +++ b/screeps.com/testing-sim/roles_harvester.js @@ -0,0 +1,27 @@ +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.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/screeps.com/testing-sim/settings.js b/screeps.com/testing-sim/settings.js new file mode 100644 index 0000000..df97caa --- /dev/null +++ b/screeps.com/testing-sim/settings.js @@ -0,0 +1,17 @@ +var settings = { + + getCreepGoalAmount: function() { + var getCreepAmountGoalDict = { + harvester: 1, + upgrader: 1, + builder: 1 + } + return getCreepAmountGoalDict; + }, + + getSpawnCreeps: function() { + return true + } +}; + +module.exports = settings;