forked from doublespeakgames/adarkroom
-
Notifications
You must be signed in to change notification settings - Fork 0
/
notifications.js
78 lines (62 loc) · 2.05 KB
/
notifications.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
/**
* Module that registers the notification box and handles messages
*/
var Notifications = {
init: function(options) {
this.options = $.extend(
this.options,
options
);
// Create the notifications box
elem = $('<div>').attr({
id: 'notifications',
className: 'notifications'
});
// Create the transparency gradient
$('<div>').attr('id', 'notifyGradient').appendTo(elem);
elem.appendTo('div#wrapper');
},
options: {}, // Nothing for now
elem: null,
notifyQueue: {},
// Allow notification to the player
notify: function(module, text, noQueue) {
if(typeof text == 'undefined') return;
if(text.slice(-1) != ".") text += ".";
if(module != null && Engine.activeModule != module) {
if(!noQueue) {
if(typeof this.notifyQueue[module] == 'undefined') {
this.notifyQueue[module] = new Array();
}
this.notifyQueue[module].push(text);
}
} else {
Notifications.printMessage(text);
}
Engine.saveGame();
},
clearHidden: function() {
// To fix some memory usage issues, we clear notifications that have been hidden.
// We use position().top here, because we know that the parent will be the same, so the position will be the same.
var bottom = $('#notifyGradient').position().top + $('#notifyGradient').outerHeight(true);
$('.notification').each(function() {
if($(this).position().top > bottom){
$(this).remove();
}
});
},
printMessage: function(t) {
var text = $('<div>').addClass('notification').css('opacity', '0').text(t).prependTo('div#notifications');
text.animate({opacity: 1}, 500, 'linear', function() {
// Do this every time we add a new message, this way we never have a large backlog to iterate through. Keeps things faster.
Notifications.clearHidden();
});
},
printQueue: function(module) {
if(typeof this.notifyQueue[module] != 'undefined') {
while(this.notifyQueue[module].length > 0) {
Notifications.printMessage(this.notifyQueue[module].shift());
}
}
}
};