-
Notifications
You must be signed in to change notification settings - Fork 65
/
tick.js
49 lines (43 loc) · 1.82 KB
/
tick.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
var _ = require('lodash'),
utils = require('../../../utils'),
driver = utils.getDriver(),
C = driver.constants;
module.exports = function(object, {bulk, gameTime}) {
if(!object.mineralAmount) {
if(!object.nextRegenerationTime) {
object.nextRegenerationTime = gameTime + C.MINERAL_REGEN_TIME;
bulk.update(object, {nextRegenerationTime: object.nextRegenerationTime});
}
if(gameTime >= object.nextRegenerationTime-1) {
var update = {
nextRegenerationTime: null,
mineralAmount: C.MINERAL_DENSITY[object.density]
};
if(object.density == C.DENSITY_LOW || object.density == C.DENSITY_ULTRA ||
Math.random() < C.MINERAL_DENSITY_CHANGE) {
var oldDensity = object.density, newDensity;
do {
var random = Math.random();
for (var density in C.MINERAL_DENSITY_PROBABILITY) {
if (random <= C.MINERAL_DENSITY_PROBABILITY[density]) {
newDensity = +density;
break;
}
}
}
while(newDensity == oldDensity);
update.density = object.density = newDensity;
}
bulk.update(object, update);
}
}
var effect = _.find(object.effects, {power: C.PWR_REGEN_MINERAL});
if(effect && effect.endTime > gameTime && !object.nextRegenerationTime && object.mineralAmount) {
const powerInfo = C.POWER_INFO[C.PWR_REGEN_MINERAL];
if(((effect.endTime - gameTime - 1) % powerInfo.period) === 0) {
bulk.update(object, {
mineralAmount: object.mineralAmount + powerInfo.effect[effect.level - 1]
});
}
}
};