From 9f9d1ae5d5e43bca7c2d0ef5db768a2055bfa1c1 Mon Sep 17 00:00:00 2001 From: Oskar Wiksten Date: Wed, 30 Jan 2013 17:52:41 +0100 Subject: [PATCH] Refactor content editor - Simplify monster exp calculation. --- AndorsTrailEdit/js/controllers/monster.js | 75 +++++++++------------- AndorsTrailEdit/partials/edit_monster.html | 2 +- 2 files changed, 31 insertions(+), 46 deletions(-) diff --git a/AndorsTrailEdit/js/controllers/monster.js b/AndorsTrailEdit/js/controllers/monster.js index 5abc33442..b46b61ffb 100644 --- a/AndorsTrailEdit/js/controllers/monster.js +++ b/AndorsTrailEdit/js/controllers/monster.js @@ -1,49 +1,34 @@ var ATEditor = (function(ATEditor, model) { + function getExperience(obj) { + var EXP_FACTOR_DAMAGERESISTANCE = 9; + var EXP_FACTOR_SCALING = 0.7; + + var div100 = function(v) { return v / 100; } + var v = function(i) { return i ? i : 0; } + + var attacksPerTurn = Math.floor(v(obj.maxAP) / v(obj.attackCost)); + var avgDamagePotential = 0; + if (obj.attackDamage) { avgDamagePotential = (v(obj.attackDamage.min) + v(obj.attackDamage.max)) / 2; } + var avgCrit = 0; + if (obj.hasCritical) { + avgCrit = div100(v(obj.criticalSkill)) * v(obj.criticalMultiplier); + } + var avgAttackHP = attacksPerTurn * div100(v(obj.attackChance)) * avgDamagePotential * (1 + avgCrit); + var avgDefenseHP = v(obj.maxHP) * (1 + div100(v(obj.blockChance))) + EXP_FACTOR_DAMAGERESISTANCE * v(obj.damageResistance); + var attackConditionBonus = 0; + if (obj.hitEffect && obj.hitEffect.conditionsTarget && v(obj.hitEffect.conditionsTarget.length) > 0) { + attackConditionBonus = 50; + } + var experience = (avgAttackHP * 3 + avgDefenseHP) * EXP_FACTOR_SCALING + attackConditionBonus; + + return Math.ceil(experience); + }; + function MonsterController($scope, $routeParams) { - $scope.datasource = model.monsters; - var m = $scope.datasource.findById($routeParams.id) || {}; - $scope.obj = m; - $scope.getExperience = function(obj) { - var EXP_FACTOR_DAMAGERESISTANCE = 9; - var EXP_FACTOR_SCALING = 0.7; - - var div100 = function(v) { return v / 100; } - var v = function(i) { return i ? i : 0; } - - var attacksPerTurn = Math.floor(v(obj.maxAP) / v(obj.attackCost)); - var avgDamagePotential = 0; - if (obj.attackDamage) { avgDamagePotential = (v(obj.attackDamage.min) + v(obj.attackDamage.max)) / 2; } - var avgCrit = 0; - if (obj.hasCritical) { - avgCrit = div100(v(obj.criticalSkill)) * v(obj.criticalMultiplier); - } - var avgAttackHP = attacksPerTurn * div100(v(obj.attackChance)) * avgDamagePotential * (1 + avgCrit); - var avgDefenseHP = v(obj.maxHP) * (1 + div100(v(obj.blockChance))) + EXP_FACTOR_DAMAGERESISTANCE * v(obj.damageResistance); - var attackConditionBonus = 0; - if (obj.hitEffect && obj.hitEffect.conditionsTarget && v(obj.hitEffect.conditionsTarget.length) > 0) { - attackConditionBonus = 50; - } - var experience = (avgAttackHP * 3 + avgDefenseHP) * EXP_FACTOR_SCALING + attackConditionBonus; - - return Math.ceil(experience); - }; - $scope.recalculateExperience = function() { - $scope.experience = $scope.getExperience($scope.obj); - }; - $scope.recalculateExperience(); - $scope.$watch('obj.maxAP', $scope.recalculateExperience); - $scope.$watch('obj.attackCost', $scope.recalculateExperience); - $scope.$watch('obj.attackDamage.min', $scope.recalculateExperience); - $scope.$watch('obj.attackDamage.max', $scope.recalculateExperience); - $scope.$watch('obj.attackChance', $scope.recalculateExperience); - $scope.$watch('obj.hasCritical', $scope.recalculateExperience); - $scope.$watch('obj.criticalSkill', $scope.recalculateExperience); - $scope.$watch('obj.criticalMultiplier', $scope.recalculateExperience); - $scope.$watch('obj.maxHP', $scope.recalculateExperience); - $scope.$watch('obj.blockChance', $scope.recalculateExperience); - $scope.$watch('obj.damageResistance', $scope.recalculateExperience); - $scope.$watch('obj.hitEffect.conditionsTarget.length', $scope.recalculateExperience); + $scope.obj = model.monsters.findById($routeParams.id) || {}; + $scope.getExperience = function() { return getExperience($scope.obj); } + $scope.addCondition = function(list) { list.push({magnitude:1, duration:1, chance:100}); }; @@ -51,10 +36,10 @@ var ATEditor = (function(ATEditor, model) { var idx = list.indexOf(cond); list.splice(idx, 1); }; - }; + } ATEditor.controllers = ATEditor.controllers || {}; ATEditor.controllers.MonsterController = MonsterController; - + return ATEditor; })(ATEditor, ATEditor.model); diff --git a/AndorsTrailEdit/partials/edit_monster.html b/AndorsTrailEdit/partials/edit_monster.html index 289b0a6c7..3d4bef30c 100644 --- a/AndorsTrailEdit/partials/edit_monster.html +++ b/AndorsTrailEdit/partials/edit_monster.html @@ -92,7 +92,7 @@ Combat
- +