Files
roll20-character-sheets-tester/Paladin/src/js/scripts.js
T
EvilAnemone d6f4d15166 Paladin (mod of Pendragon 5,2) (#6051)
* Paladin first draft

Paladin: Warriors of Charlemagne mod of Pendragon 5.2 character sheet.

* Font update.

Importing Google font families.

* Tweaks to repeating fields, fonts

* New preview image
2020-03-30 11:51:15 -07:00

91 lines
2.3 KiB
JavaScript

const attributes = {
damage: ['strength', 'size'],
healing: ['strength', 'constitution'],
movement: ['strength', 'dexterity'],
hp: ['size', 'constitution'],
unconcious: ['total_hit_points'],
knights: ['old_knights', 'middle_aged_knights', 'young_knights']
}
attributes.movement.forEach(attr => {
on(`change:${attr}`, (eventinfo) => {
attributeSumDivide(attributes.movement, 'movement_rate');
});
})
attributes.damage.forEach(attr => {
on(`change:${attr}`, (eventinfo) => {
attributeSumDivide(attributes.damage, 'damage');
});
})
attributes.healing.forEach(attr => {
on(`change:${attr}`, (eventinfo) => {
attributeSumDivide(attributes.healing, 'healing_rate');
});
})
attributes.hp.forEach(attr => {
on(`change:${attr}`, (eventinfo) => {
sumOfCalculator(attributes.hp, 'total_hit_points');
});
})
attributes.unconcious.forEach(attr => {
on(`change:${attr}`, (eventinfo) => {
unconciousCalculator(attributes.unconcious, 'unconcious');
});
})
attributes.knights.forEach(attr => {
on(`change:${attr}`, (eventinfo) => {
sumOfCalculator(attributes.knights, 'total_family_knights');
});
})
//When performing calculations in Paladin, round
//0.5 and higher fractions upward and lesser fractions downward.
//For example, a character with a Damage value of 4.43 would
//have an effective value of 4, while a character with a Damage val-
//ue of 4.5 would have a 5.
const roundFraction = sum => sum >= 0.5 ? Math.ceil(sum) : Math.floor(sum)
const divideBy = (sum, num) => sum/num;
const totalAttributes = values => {
let sum = 0
Object.values(values).forEach(num => sum += parseInt(num) || 0)
return sum
}
const attributeSumDivide = (attributes, set) => {
getAttrs(attributes, (values) => {
const divide = set == 'damage' ? 6 : 10;
let sum = totalAttributes(values);
sum = divideBy(sum, divide) ;
setAttrs({
[`${set}`]: roundFraction(sum)
});
});
};
const sumOfCalculator = (attributes, set) => {
getAttrs(attributes, (values) => {
setAttrs({
[`${set}`]: totalAttributes(values)
});
});
};
const unconciousCalculator = (attributes, set) => {
getAttrs(attributes, (values) => {
let sum = totalAttributes(values);
sum = divideBy(sum, 4) ;
setAttrs({
[`${set}`]: roundFraction(sum)
});
});
};