JSFiddle - React, Tailwind, and code Playground
by Daedalus
HTML
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.3.15/angular.min.js"></script>
<div ng-app="dc_gen">
<div ng-controller="dc">
Minimum endurance:<input type="number" ng-model="model.minEnd" ng-change="averageDCs()" /><br />
Maximum endurance:<input type="number" ng-model="model.maxEnd" ng-change="averageDCs()" /><br />
Entrants:<input type="number" ng-model="model.entrants" ng-change="averageDCs()" /><br />
Champion DC multiplier:<input type="number" step=".1" ng-model="model.champMult" ng-change="averageDCs()" /><br />
<div ng-repeat="average in averages">
<strong>Level: </strong>{{average.level}}<br />
<strong>Average roll: </strong>d{{average.baseDie}}+{{average.bonus}}<br />
<strong>Max roll: </strong>{{average.maxRoll}}<br />
<strong>Qualify DC: </strong>{{average.qualify}}<br />
<strong>Bronze DC: </strong>{{average.bronze}}<br />
<strong>Silver DC: </strong>{{average.silver}}<br />
<strong>Gold DC: </strong>{{average.gold}}<br />
<strong>Champion DC: </strong>{{average.champ}}<br />
<br />
<br />
</div>
</div>
</div>
JavaScript
var dc_gen = angular.module('dc_gen', []).controller('dc', ['$scope', function ($scope) {
var rand = function (min, max) {
return Math.floor((Math.random() * max) + min);
}
var averageDCs = function (minEnd, maxEnd, entrants, champMult) {
var minEnd = parseInt(minEnd, 10),
maxEnd = parseInt(maxEnd, 10),
entrants = parseInt(entrants, 10),
champMult = parseFloat(champMult, 10);
var averages = [];
for (var level = 10; level <= 50; level = level + 10) {
var average = 0;
for (var i = 0; i < entrants; i++) {
var bonus = Math.floor(rand(minEnd, maxEnd) / 10) + 15 + 5 + level;
average += bonus;
}
var average_bonus = average / entrants,
baseDie = ((Math.floor((average_bonus / 5)) * 5) * 2 + 10);
averages.push({
level: level,
baseDie: baseDie,
bonus: Math.floor(average_bonus),
maxRoll: baseDie + Math.floor(average_bonus),
qualify: Math.floor((baseDie + Math.floor(average_bonus)) / 5),
bronze: Math.floor((baseDie + Math.floor(average_bonus)) / 4),
silver: Math.floor(((baseDie + Math.floor(average_bonus)) / 4) * 2),
gold: Math.floor(((baseDie + Math.floor(average_bonus)) / 4) * 3),
champ: Math.floor(((baseDie + Math.floor(average_bonus)) / 4) * champMult),
});
}
return averages;
}
$scope.model = {
minEnd: 50,
maxEnd: 300,
entrants: 10,
champMult: 3.5
};
$scope.averageDCs = function () {
var averages = averageDCs($scope.model.minEnd, $scope.model.maxEnd, $scope.model.entrants, $scope.model.champMult);
angular.copy(averages, $scope.averages);
}
$scope.averages = [];
$scope.averageDCs();
}]);