mirror of
https://github.com/HabitRPG/habitica.git
synced 2025-12-19 15:48:04 +01:00
Move stat calc scripts to angular service
This commit is contained in:
@@ -33,8 +33,6 @@ api.planGemLimits =
|
||||
convRate: 20 #how much does a gem cost?
|
||||
convCap: 25 #how many gems can be converted / month?
|
||||
|
||||
api.statCalc = require('./methods/statCalculations')
|
||||
|
||||
###
|
||||
------------------------------------------------------
|
||||
Time / Day
|
||||
|
||||
@@ -1,53 +0,0 @@
|
||||
'use strict';
|
||||
|
||||
var Content = require('../content.coffee');
|
||||
|
||||
function levelBonus(level) {
|
||||
// Level bonus is derived by taking the level, subtracting one,
|
||||
// taking the smaller of it or maxLevel (100),
|
||||
// dividing that by two and then raising it to a whole number
|
||||
|
||||
// TODO: 100 is a magic number, extract from script.index into own module and call here
|
||||
var levelOrMaxLevel = Math.min((level - 1), 100)
|
||||
var levelDividedByTwo = levelOrMaxLevel / 2
|
||||
var statBonus = Math.ceil(levelDividedByTwo )
|
||||
|
||||
return statBonus;
|
||||
}
|
||||
|
||||
function equipmentStatBonus(stat, equipped) {
|
||||
var gear = Content.gear.flat;
|
||||
var total = 0;
|
||||
|
||||
var equipmentTypes = ['weapon', 'armor', 'head', 'shield'];
|
||||
|
||||
_(equipmentTypes).each(function(type) {
|
||||
var equippedItem = equipped[type]
|
||||
if(gear[equippedItem]) {
|
||||
var equipmentStat = gear[equippedItem][stat];
|
||||
|
||||
total += equipmentStat;
|
||||
}
|
||||
});
|
||||
|
||||
return total;
|
||||
}
|
||||
|
||||
function classBonus(user, stat) {
|
||||
var computedStats = user._statsComputed;
|
||||
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;
|
||||
}
|
||||
}
|
||||
|
||||
module.exports = {
|
||||
classBonus: classBonus,
|
||||
equipmentStatBonus: equipmentStatBonus,
|
||||
levelBonus: levelBonus
|
||||
}
|
||||
@@ -55,6 +55,7 @@ module.exports = function(config) {
|
||||
"website/public/js/services/taskServices.js",
|
||||
"website/public/js/services/paymentServices.js",
|
||||
"website/public/js/services/questServices.js",
|
||||
"website/public/js/services/statServices.js",
|
||||
|
||||
"website/public/js/filters/money.js",
|
||||
"website/public/js/filters/roundLargeNumbers.js",
|
||||
|
||||
@@ -1,12 +1,20 @@
|
||||
'use strict';
|
||||
var sinon = require('sinon');
|
||||
var chai = require("chai");
|
||||
chai.use(require("sinon-chai"));
|
||||
var expect = chai.expect;
|
||||
|
||||
var statCalc = require('../../common/script/methods/statCalculations');
|
||||
describe('Stats Service', function() {
|
||||
var scope, statCalc, user;
|
||||
|
||||
beforeEach(function() {
|
||||
user = specHelper.newUser();
|
||||
|
||||
module(function($provide) {
|
||||
$provide.value('User', {user: user});
|
||||
});
|
||||
|
||||
inject(function($rootScope, $controller, Stats) {
|
||||
statCalc = Stats;
|
||||
});
|
||||
});
|
||||
|
||||
describe('stat calculation functions', function() {
|
||||
describe('levelBonus', function() {
|
||||
it('calculates bonus as half of level for even numbered level under 100', function() {
|
||||
var level = 50;
|
||||
65
website/public/js/services/statServices.js
Normal file
65
website/public/js/services/statServices.js
Normal file
@@ -0,0 +1,65 @@
|
||||
'use strict';
|
||||
|
||||
(function(){
|
||||
angular
|
||||
.module('habitrpg')
|
||||
.factory('Stats', statsFactory);
|
||||
|
||||
statsFactory.$inject = [
|
||||
'Content',
|
||||
'Shared'
|
||||
];
|
||||
|
||||
function statsFactory(Content, Shared) {
|
||||
|
||||
function levelBonus(level) {
|
||||
// Level bonus is derived by taking the level, subtracting one,
|
||||
// taking the smaller of it or maxLevel (100),
|
||||
// dividing that by two and then raising it to a whole number
|
||||
|
||||
var levelOrMaxLevel = Math.min((level - 1), Shared.maxLevel);
|
||||
var levelDividedByTwo = levelOrMaxLevel / 2;
|
||||
var bonus = Math.ceil(levelDividedByTwo );
|
||||
|
||||
return bonus;
|
||||
}
|
||||
|
||||
function equipmentStatBonus(stat, equipped) {
|
||||
var gear = Content.gear.flat;
|
||||
var total = 0;
|
||||
|
||||
var equipmentTypes = ['weapon', 'armor', 'head', 'shield'];
|
||||
|
||||
_(equipmentTypes).each(function(type) {
|
||||
var equippedItem = equipped[type];
|
||||
if(gear[equippedItem]) {
|
||||
var equipmentStat = gear[equippedItem][stat];
|
||||
|
||||
total += equipmentStat;
|
||||
}
|
||||
});
|
||||
|
||||
return total;
|
||||
}
|
||||
|
||||
function classBonus(user, stat) {
|
||||
var computedStats = user._statsComputed;
|
||||
|
||||
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;
|
||||
}
|
||||
}
|
||||
|
||||
return {
|
||||
classBonus: classBonus,
|
||||
equipmentStatBonus: equipmentStatBonus,
|
||||
levelBonus: levelBonus
|
||||
}
|
||||
}
|
||||
}());
|
||||
@@ -52,6 +52,7 @@
|
||||
"js/services/challengeServices.js",
|
||||
"js/services/paymentServices.js",
|
||||
"js/services/questServices.js",
|
||||
"js/services/statServices.js",
|
||||
|
||||
"js/filters/money.js",
|
||||
"js/filters/roundLargeNumbers.js",
|
||||
|
||||
Reference in New Issue
Block a user