/** Set up "+1 Exp", "Level Up", etc notifications */ angular.module("notificationServices", []) .factory("Notification", [function() { function growl(html, type) { $.bootstrapGrowl(html, { ele: '#notification-area', type: type, //(null, 'text', 'error', 'success', 'gp', 'xp', 'hp', 'lvl', 'death', 'mp') top_offset: 20, align: 'right', //('left', 'right', or 'center') width: 250, //(integer, or 'auto') delay: 7000, allow_dismiss: true, stackup_spacing: 10 // spacing between consecutive stacecked growls. }); }; /** Show "+ 5 {gold_coin} 3 {silver_coin}" */ function coins(money) { var absolute, gold, silver; absolute = Math.abs(money); gold = Math.floor(absolute); silver = Math.floor((absolute - gold) * 100); if (gold && silver > 0) { return "" + gold + " " + silver + " "; } else if (gold > 0) { return "" + gold + " "; } else if (silver > 0) { return "" + silver + " "; } }; var sign = function(number){ return number?number<0?'-':'+':'+'; } var round = function(number){ return Math.abs(number.toFixed(1)); } return { coins: coins, hp: function(val) { // don't show notifications if user dead growl(" " + sign(val) + " " + round(val) + " HP", 'hp'); }, exp: function(val) { if (val < -50) return; // don't show when they level up (resetting their exp) growl(" " + sign(val) + " " + round(val) + " XP", 'xp'); }, gp: function(val) { growl(sign(val) + " " + coins(val), 'gp'); }, text: function(val){ growl(val); }, lvl: function(){ growl(' Level Up!', 'lvl'); }, death: function(){ growl(" Respawn!", "death"); }, error: function(error){ growl(" " + error, "error"); }, mp: function(val) { growl(" " + sign(val) + " " + round(val) + " MP", 'mp'); } }; } ]);