-
Notifications
You must be signed in to change notification settings - Fork 8
/
Copy pathroomservice.observer.js
43 lines (34 loc) · 1.21 KB
/
roomservice.observer.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
module.exports = class Observer {
constructor(room) {
if(!room.memory.observer) {
room.memory.observer = {
queue: []
};
}
this.memory = room.memory.observer;
this.observer = room.find(FIND_MY_STRUCTURES, { filter: (s) => s.structureType === STRUCTURE_OBSERVER })[0];
}
isAvailable() {
return !!this.observer;
}
observeNow(roomName) {
this.memory.queue = _.reject(this.memory.queue, (r) => r === roomName)
this.memory.queue.unshift(roomName);
}
observeLater(roomName) {
if(_.any(this.memory.queue, (r) => r === roomName)) return;
this.memory.queue.push(roomName);
}
performObservation() {
if(!this.isAvailable()) return;
let target = this.memory.queue.shift();
if(!target) return;
let result = this.observer.observeRoom(target);
if(result !== OK) {
this.memory.queue.push(target);
console.log("Observer " + this.observer.room.name + ": Got unexpected result " + result);
}
}
}
const profiler = require("screeps-profiler");
profiler.registerClass(module.exports, 'Observer');