This repository has been archived by the owner on Jan 3, 2023. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathutils.js
executable file
·147 lines (131 loc) · 4.1 KB
/
utils.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
const logger = require('util.log').getLogger("utils");
//设置身上矿满了之后和空了两种工作状态互相切换。当first设置为null时,则默认设置为采矿
//first,second都是字面量对象,有show方法(显示的内容)和do方法(工作的内容)
function setWrokingToggole(first,second,creep){
if(first==null){
first={
show:()=>{
creep.say('🔄 harvest');
},
do:()=>{
harvest(creep);
}
}
}
if(creep.memory.working && creep.store[RESOURCE_ENERGY] == 0) {
creep.memory.working = false;
first.show();
}
if(!creep.memory.working && creep.store.getFreeCapacity() == 0) {
creep.memory.working = true;
second.show();
}
if(creep.memory.working){
second.do();
}else{
first.do();
}
}
function harvest(creep){
let sourceId = null;
let sources = creep.room.find(FIND_SOURCES);
// logger.debug(JSON.stringify(sources));
if(creep.memory.sourceId==null){
creep.memory.sourceId = sources[Math.round(Math.random())].id;
sourceId = creep.memory.sourceId;
let target = Game.getObjectById(sourceId)
moveToHarvest(target,creep);
}else{
sourceId = creep.memory.sourceId;
let target = Game.getObjectById(sourceId)
moveToHarvest(target,creep);
}
function moveToHarvest(target,creep){
let result = creep.harvest(target)
if(result==ERR_BUSY){
return;
}
if(target){
if(result == ERR_NOT_IN_RANGE){
//如果不在范围内则移动至
let r = creep.moveTo(target, {visualizePathStyle: {stroke: '#ffffff'}});
if(r==ERR_TIRED){
//累了就让它休息一个tick
return;
}if(r==ERR_NO_PATH){
//找不到路径,说明挤满了,换一个
logger.debug("creep moveTo","no way")
creep.memory.sourceId=null;
}else{
if(r!=0){
logger.warn("creep moveTo error",r)
creep.memory.sourceId=null;
}
}
}else if(result == ERR_NOT_ENOUGH_RESOURCES){
//一个矿挖完了就换一个
creep.memory.sourceId=null;
}else{
if(result!=0){
logger.warn("creep harvest error",result)
}
}
}else if(result == ERR_NOT_ENOUGH_RESOURCES){
creep.memory.sourceId=null;
}
}
}
function upgradeWork(creep){
if(creep.upgradeController(creep.room.controller) == ERR_NOT_IN_RANGE) {
creep.moveTo(creep.room.controller);
}
}
function randomColor(){
}
function findClose(){
}
function activateSafeModeIfOnlyOneRoom(){
let rooms = Object.keys(Game.rooms);
if(rooms.length=1&&Game.rooms[rooms[0]].controller.safeMode==undefined){
Game.rooms[rooms[0]].controller.activateSafeMode();
}
}
/**
* 计算creep生产能量消耗
* @param {Array} bodys
*/
function calCreepCost(bodys){
let sum=0;
bodys.forEach(element => {
sum+=BODYPART_COST[element]
});
return sum;
}
//findTargetCallback需要返回一个数组
function setWorkTarget(creep,findTargetCallback,doWrokCallback,randomWrokCallBack){
if(creep.memory.workTargetId){
//有工作目标
let workTargetId = creep.memory.workTargetId;
if(findTargetCallback(workTargetId).length==0){
//找不到工作目标
creep.memory.workTargetId=null;
}else{
doWrokCallback(workTargetId);
}
}else{
//没有工作目标
let workTarget = randomWrokCallBack();
let workTargetId = workTarget.id;
}
}
function idGen(){
}
function doAndShowError(){
}
module.exports = {
setWrokingToggole:setWrokingToggole,
harvest:harvest,
upgradeWork:upgradeWork,
calCreepCost:calCreepCost,
activateSafeModeIfOnlyOneRoom:activateSafeModeIfOnlyOneRoom
};