Files
habitica/website/client-old/js/services/statServices.js
Matteo Pagliazzi 98c019a0b6 Upgrade lodash to v4 and lint more files (#8495)
* common: import lodash modules separately

* remove test/content from .eslintignore, fix with eslint --fix content/index

* lint test/content

* lint content/index except for lodash methods

* upgrade server/models

* upgrade server/middlewares and server/libs

* port server/controllers/top-level

* port server/controllers/api-v3

* port views and tests

* client old port lodash and _(, missing _.

* upgrade client-old

* port common/script (root level files only)

* port common/script/fns

* port common/libs

* port common/script/ops

* port common/script/content and common/script/libs/shops.js

* misc fixes

* misc fixes

* misc fixes

* more tests fixes

* fix payments test stubbing, down to 2 failing tests

* remove more instances of lodash wrapping

* fix bug where toObject does not clone object

* fix tests

* upgrade migration or add lodash 4 note

* update shrinkwrap

* fix linting

* upgrade eslint-config-habitrpg

* update shrinkwrap

* recompile shrinkwrap
2017-03-01 17:10:48 +01:00

114 lines
2.9 KiB
JavaScript

'use strict';
(function(){
angular
.module('habitrpg')
.factory('Stats', statsFactory);
statsFactory.$inject = [
'Content',
'Shared'
];
function statsFactory(Content, Shared) {
var DROP_ANIMALS = _.keys(Content.pets);
var TOTAL_NUMBER_OF_DROP_ANIMALS = DROP_ANIMALS.length;
function beastMasterProgress(pets) {
var dropPetsFound = Shared.count.beastMasterProgress(pets);
var display = _formatOutOfTotalDisplay(dropPetsFound, TOTAL_NUMBER_OF_DROP_ANIMALS);
return display;
}
function classBonus(user, stat) {
var computedStats = (user.fns && user.fns.statsComputed) ? user.fns.statsComputed() : null;
if(computedStats) {
var bonus = computedStats[stat]
- user.stats.buffs[stat]
- levelBonus(user.stats.lvl)
- equipmentStatBonus(stat, user.items.gear.equipped)
- user.stats[stat];
return bonus;
}
}
function equipmentStatBonus(stat, equipped) {
var gear = Content.gear.flat;
var total = 0;
var equipmentTypes = ['weapon', 'armor', 'head', 'shield', 'back', 'body'];
_(equipmentTypes).forEach(function(type) {
var equippedItem = equipped[type];
if(gear[equippedItem]) {
var equipmentStat = gear[equippedItem][stat];
total += equipmentStat;
}
});
return total;
}
function expDisplay(user) {
var exp = Math.floor(user.stats.exp);
var toNextLevel = Shared.tnl(user.stats.lvl);
var display = _formatOutOfTotalDisplay(exp, toNextLevel);
return display;
}
function goldDisplay(gold) {
var display = Math.floor(gold);
return display;
}
function hpDisplay(hp) {
var remainingHP = Math.ceil(hp);
var totalHP = Shared.maxHealth;
var display = _formatOutOfTotalDisplay(remainingHP, totalHP);
return display;
}
function mountMasterProgress(mounts) {
var dropMountsFound = Shared.count.mountMasterProgress(mounts);
var display = _formatOutOfTotalDisplay(dropMountsFound, TOTAL_NUMBER_OF_DROP_ANIMALS);
return display;
}
function mpDisplay(user) {
var remainingMP = Math.floor(user.stats.mp);
var totalMP = (user.fns && user.fns.statsComputed) ? user.fns.statsComputed().maxMP : null;
var display = _formatOutOfTotalDisplay(remainingMP, totalMP);
return display;
}
function totalCount(objectToCount) {
var total = _.size(objectToCount);
return total;
}
function _formatOutOfTotalDisplay(stat, totalStat) {
var display = stat + "/" + totalStat;
return display;
}
return {
beastMasterProgress: beastMasterProgress,
expDisplay: expDisplay,
goldDisplay: goldDisplay,
hpDisplay: hpDisplay,
mountMasterProgress: mountMasterProgress,
mpDisplay: mpDisplay,
totalCount: totalCount
}
}
}());