2016-10-02 2 views
0

В игре screeps я пытаюсь вызвать переменную из другого файла. Thats мой главный файл:Screeps access «главная» переменная из другого файла?

var roleHarvester = require('role.harvester'); 
var roleUpgrader = require('role.upgrader'); 
var roleBuilder = require('role.builder'); 
var roleVoyager = require('role.voyager'); 
var roleAttacker = require('role.attacker'); 
var roleTransporter = require('role.transporter'); 
var roleHealer = require('role.healer'); 
var roleRepairer = require('role.repairer'); 

module.exports.loop = function() { 

    for(var name in Memory.creeps) { 
     if(!Game.creeps[name]) { 
      delete Memory.creeps[name]; 
      console.log('Clearing non-existing creep memory:', name); 
     } 
    } 

    var harvesters = _.filter(Game.creeps, (creep) => creep.memory.role == 'harvester'); 
    console.log('Harvesters: ' + harvesters.length); 

    var upgraders = _.filter(Game.creeps, (creep) => creep.memory.role == 'upgrader'); 
    console.log('Upgraders: ' + upgraders.length); 

    var builders = _.filter(Game.creeps, (creep) => creep.memory.role == 'builder'); 
    console.log('Builders: ' + builders.length); 

    var voyagers = _.filter(Game.creeps, (creep) => creep.memory.role == 'voyager'); 
    console.log('Voyagers: ' + voyagers.length); 

    var attackers = _.filter(Game.creeps, (creep) => creep.memory.role == 'attacker'); 
    console.log('Attackers: ' + attackers.length); 

    var transporters = _.filter(Game.creeps, (creep) => creep.memory.role == 'transporter'); 
    console.log('Transporters: ' + transporters.length); 

    var healers = _.filter(Game.creeps, (creep) => creep.memory.role == 'healer'); 
    console.log('Healers: ' + healers.length); 

    var repairers = _.filter(Game.creeps, (creep) => creep.memory.role == 'repairer'); 
    console.log('Repairers: ' + repairers.length); 


    if(harvesters.length < 3) { 
     var newName = Game.spawns['SpawnZone'].createCreep([WORK,WORK,CARRY,CARRY,CARRY,CARRY,MOVE], creepName = Creep.getRandomName("[Harvester]"), {role: 'harvester'}); 
     console.log('Spawning new harvester: ' + newName); 
    } 

    if(upgraders.length < 3 && harvesters.length > 2) { 
     var newName = Game.spawns['SpawnZone'].createCreep([WORK,CARRY,CARRY,CARRY,MOVE,MOVE], creepName = Creep.getRandomName("[Upgrader]"), {role: 'upgrader'}); 
     console.log('Spawning new upgrader: ' + newName); 
    } 

    if(builders.length < 2 && harvesters.length > 2) { 
     var newName = Game.spawns['SpawnZone'].createCreep([WORK,CARRY,CARRY,MOVE,MOVE], creepName = Creep.getRandomName("[Builder]"), {role: 'builder'}); 
     console.log('Spawning new builder: ' + newName); 
    } 

    if(voyagers.length < 0 && harvesters.length > 2) { 
     var newName = Game.spawns['SpawnZone'].createCreep([MOVE], creepName = Creep.getRandomName("[Voyager]"), {role: 'voyager'}); 
     console.log('Spawning new voyager: ' + newName); 
    } 

    if(attackers.length < 0 && harvesters.length > 2) { 
     var newName = Game.spawns['SpawnZone'].createCreep([ATTACK,ATTACK,MOVE], creepName = Creep.getRandomName("[Attacker]"), {role: 'attacker'}); 
     console.log('Spawning new Attacker: ' + newName); 
    } 

    if(transporters.length < 0 && harvesters.length > 2) { 
     var newName = Game.spawns['SpawnZone'].createCreep([WORK,CARRY,MOVE], creepName = Creep.getRandomName("[Transporter]"), {role: 'transporter'}); 
     console.log('Spawning new Transporter: ' + newName); 
    } 

    if(healers.length < 0 && harvesters.length > 2) { 
     var newName = Game.spawns['SpawnZone'].createCreep([HEAL,MOVE,MOVE], creepName = Creep.getRandomName("[Healer]"), {role: 'healer'}); 
     console.log('Spawning new Healer: ' + newName); 
    } 

    if(repairers.length < 0 && harvesters.length > 2) { 
     var newName = Game.spawns['SpawnZone'].createCreep([CARRY,CARRY,WORK,MOVE,MOVE], creepName = Creep.getRandomName("[Repairer]"), {role: 'repairer'}); 
     console.log('Spawning new Repairer: ' + newName); 
    } 




    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); } 
     if(creep.memory.role == 'voyager') { roleVoyager.run(creep); } 
     if(creep.memory.role == 'attacker') { roleAttacker.run(creep); } 
     if(creep.memory.role == 'transporter') { roleTransporter.run(creep); } 
     if(creep.memory.role == 'healer') { roleHealer.run(creep); } 
     if(creep.memory.role == 'repairer') { roleRepairer.run(creep); } 
    } 
} 

Теперь из моего файла role.builder я пытаюсь написать IF-ELSE заявление, что должен проверить переменную из главного:

if (main.harvesters.length > 2){...} 

Но я получаю error 'main os not defined' Как я могу назвать главный файл в противном случае?

ответ

0

Нашел это сам сейчас. Если я что-то сделать Лик это:

var count = _.filter(Game.creeps, (creep) => creep.memory.role == 'harvester'); 

я могу сделать, если-иначе легко с вар-х count.length ":)

2

То, что вы пытаетесь сделать, это крайне неэффективно: Вы итерацию через коллекцию Game.creeps несколько раз (я посчитал не менее 8 раз). Если вы хотите, чтобы рассчитывать ползет в роли я предлагаю вам использовать

var groups = _.groupBy(Game.creeps, (c) => { return c.memory.role; }); 

Это будет возвращать объект с каждой ролью в качестве ключа с за ключ коллекции все ползает в этой конкретной роли:

{ 
    harvester: [Creep, Creep, Creep], 
    builder: [Creep], 
    upgrader: [Creep, Creep, Creep] 
} 

Я предполагаю, что вы хотели бы иметь эту информацию на основе комнаты, а не на глобальном уровне, поскольку комната низкого уровня должна вести себя иначе, чем комната высокого уровня (в том смысле, что комнаты более высокого уровня, вероятно, имеют меньше крипов).

Не знаю, сколько времени было у Game-объектов, но если вы зацикливаетесь на Game.rooms в начале вашей процедуры обновления ползучести, как показано ниже, вы будете иметь эту информацию сразу же, когда это необходимо, и нужно только прокручивать ее один раз:

for (var name in Game.rooms) { 
    var room = Game.rooms[name]; 
    room.roles = _.groupBy(room.find(FIND_MY_CREEPS), (c) => { return c.memory.role; }); 
} 
Смежные вопросы