-
Notifications
You must be signed in to change notification settings - Fork 0
/
memory.js
135 lines (119 loc) · 3.31 KB
/
memory.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
/*
* Blergh so many things may be littered later
*/
function isIterable(obj) {
// checks for null and undefined
if (obj === null) {
return false;
}
return typeof obj[Symbol.iterator] === 'function';
}
function pack(value){
// console.log('pack ' + value + ' of type ' + typeof value);
if(value instanceof RoomObject && typeof value.id === 'string'){
value = value.id
} else if ( value && typeof value === 'object' ){
/*
console.log('pack x ' + value.Spawn1);
console.log('pack y ' + value['Spawn1']);
console.log('pack keys ' + Object.keys(value))
*/
if (value.id !== undefined){
console.log('pack should not be called on GameObject snapshot Objects');
return null;
}
let ret = {};
let keys = Object.keys(value);
for (let i in keys){
let key = keys[i];
if (value[key] !== undefined){
// console.log('pack value1', key, value[key])
ret[key] = pack(value[key]);
// console.log('pack value2', key, value[key])
}
}
value = ret;
} else if(isIterable(value) && typeof value !== 'string'){
let ret = [];
for (let k in value){
ret.push(pack(value[k]));
}
value = ret;
}
return value
}
function unpack(value){
let ret;
if (typeof value === 'string' && value.length === 24){
return Game.getObjectById(value);
} else if (isIterable(value)){
ret = [];
for (let k in value){
let node = unpack(value[k])
if (node !== null){
ret.push(node)
}
}
return ret;
} else if ( typeof value === 'object' ){
if (!value){
console.log('unpack should not be called on null objects');
return null;
}
if (value.id !== undefined){
console.log('unpack should not be called on GameObject snapshot objects');
return null;
}
ret = {};
let keys = Object.keys(value);
for (let i in keys){
let key = keys[i];
let node = unpack(value[key])
if (node !== null){
ret[key] = unpack(value[key]);
}
}
return ret;
} else {
console.log('unpack should be called on ids and arrays, not ' + value + ' of type ' + typeof value);
return null;
}
}
function define(memory, key, value){
if (memory[key] === undefined){
if(typeof value === 'function'){
value = value();
}
set(memory, key, value);
}
}
function set(memory, key, value){
if (value !== undefined){
memory[key] = pack(value);
}
}
function get(memory, key){
return unpack(memory[key]);
}
/*
function is_tower(structure){
return structure.structureType === STRUCTURE_EXTENSION;
}
define('extension', function(){
let ret = Game.rooms.sim.find(FIND_STRUCTURES);
return _.filter(ret, is_tower)
if (ret.length){
return ret[0];
}
})
define('spawns', {Spawn1: Game.spawns.Spawn1})
console.log('spawns: ' + get('spawns'))
console.log('spawn1: ' + get('spawns').Spawn1)
*/
module.exports = {
pack: pack,
unpack: unpack,
define: define,
set: set,
get: get,
};