Files
roll20-character-sheets/backbone/source/mixins/_sheetmixins.pug
T

264 lines
9.4 KiB
Plaintext

-
const conditions = [
'bewildered',
'bleeding',
'blinded',
'burned',
'confused',
'deafened',
'incapacitated',
'infuriated',
'intoxicated',
'plagued',
'poisoned',
'panicked',
'sleeping',
'spellbound',
'wounded',
'comatose',
'death',
'in extremis',
'prone',
'restrained',
'unconscious'
];
-
const characteristics = {
'aptitude':{name:'aptitude',affects:['reflex goal']},
'athletics':{name:'athletics',affects:['reflex goal','movement rate','sprint speed','item_slots_max']},
'charisma':{name:'charisma',affects:['intuition goal']},
'logic':{name:'logic',affects:['vigilance goal']},
'wisdom':{name:'wisdom',affects:['intuition goal']},
'size':{name:'size',affects:['build goal','item_slots_max']},
'stamina':{name:'stamina',affects:['build goal']},
'willpower':{name:'willpower',affects:['vigilance goal']}
};
- varObjects.characteristics = characteristics;
- const attributes = ['vigilance','build','intuition','reflex'];
-
varObjects.attributesDetails = {
vigilance_goal:['logic','willpower'],
build_goal:['size','stamina'],
intuition_goal:['charisma','wisdom'],
reflex_goal:['athletics','aptitude']
};
-
const movementArmor = [
{name:'armor',value:0,trigger:{}},
{name:'movement rate',trigger:{calculation:'calcMovement'}},
{name:'sprint speed',trigger:{calculation:'calcSprint'}}
];
-
const basicSkills = {
assess:{name:'assess',characteristic:'wisdom'},
deceive:{name:'deceive',characteristic:'charisma'},
deduce:{name:'deduce',characteristic:'logic'},
disguise:{name:'disguise',characteristic:'charisma'},
encrypt:{name:'encrypt',characteristic:'logic'},
'first aid':{name:'first aid',characteristic:'wisdom'},
hide:{name:'hide',characteristic:'wisdom'},
legerdemain:{name:'legerdemain',characteristic:'aptitude'},
locksmith:{name:'locksmith',characteristic:'aptitude'},
'nurse (ment)':{name:'nurse (ment)',characteristic:'logic'},
'nurse (phys)':{name:'nurse (phys)',characteristic:'logic'},
persuade:{name:'persuade',characteristic:'charisma'},
research:{name:'research',characteristic:'logic'},
'ride/steer':{name:'ride/steer',characteristic:'athletics'},
search:{name:'search',characteristic:'wisdom'},
sneak:{name:'sneak',characteristic:'athletics'},
stunt:{name:'stunt',characteristic:'athletics'},
survive:{name:'survive',characteristic:'wisdom'},
threaten:{name:'threaten',characteristic:'charisma'},
tinker:{name:'tinker',characteristic:'aptitude'}
};
-
const combatSkills = {
melee:{name:'melee',characteristic:'athletics'},
ranged:{name:'ranged',characteristic:'aptitude'}
};
- varObjects.skills = {...basicSkills,...combatSkills};
mixin statContainer(divObj)
- divObj = divObj || {};
.stat-container&attributes(divObj)&attributes(attributes)
block
//- End Mixin
mixin skillSelect(selectObj = {name:'skill',class:'underlined'},defaultValue)
+select-label({
inputObj:selectObj,
spanObj:{'data-i18n':'skill'},
divObj:attributes
})
if !defaultValue
+option({value:'','data-i18n':'select one',selected:''})
each skill in [...Object.keys(basicSkills),...Object.keys(combatSkills)]
- const optObj = {value:replaceSpaces(skill),'data-i18n':skill}
if skill === defaultValue || optObj.value === defaultValue
- optObj.selected = '';
+option(optObj)
//- End Mixin
mixin characteristicOptions(defaultValue)
if !defaultValue
+option({value:'','data-i18n':'select one',selected:''})
each value in Object.keys(characteristics)
- const optObj = {value:replaceSpaces(value),'data-i18n':value}
if value === defaultValue || optObj.value === defaultValue
- optObj.selected = '';
+option(optObj)
//- End Mixin
mixin plusControl({name,defaultValue,classAdd,trigger})
div(class=`plus-container${classAdd ? classAdd : ''}`)
//- +hidden({name:`${name} modded`,class:'mod-control',value:'',trigger:{affects:[replaceSpaces(name)]}})
-
const trueDefault = defaultValue === undefined ?
0 :
defaultValue;
+hidden({name,class:'plus-control',value:trueDefault,trigger})
+span({class:`plus-display${classAdd ? ` ${classAdd}` : ''}`,name})
|#{trueDefault}
//- End mixin
mixin skillRows(skills)
each obj,name in skills
div(class=`skill-${name}`).skill-row
+roller({name,role:'heading','aria-level':3,'data-i18n':name,trigger:{
triggeredFuncs:['rollSkill']
}})
+fillLeft({
radioObj:{name:`${name} proficiency`,value:-1},
divObj:{class:'proficiency'},
valueArray:[-1,0,1,2,3,4],
noClear:true,
displayValues:['-1','+0','+1','+2','+3','+4']
})
.parens-holder
span.parentheses (
+input-label({
inputObj:{name:obj.characteristic,type:'number',readonly:true},
spanObj:{'data-i18n':`+${obj.characteristic} abbreviation`},
divObj:{class:'stacked'}
})
span.parentheses )
+checkbox({name:`${name} mastery`,value:1,class:'mastery'})
//- End Mixin
mixin sectionControl(inputObj)
- inputObj.hidden = '';
-
inputObj.class = inputObj.class ?
`${inputObj.class} section-control` :
'section-control';
+checkbox(inputObj)
.section-display&attributes(attributes)
block
//- End Mixin
mixin sizeAndSlot
.flex-box.justify-center.span-all.half-gap.expanded
+input-label({
inputObj:{name:'uses_slot',type:'checkbox',value:1,checked:'',class:'underlined',trigger:{affects:['item_slots']}},
spanObj:{'data-i18n':'uses slot'}
})
+select-label({
inputObj:{name:'item size',class:'underlined'},
spanObj:{'data-i18n':'size'}
})
+option({value:'','data-i18n':'select size',selected:''})
each size in ['small','medium','large']
+option({value:size,'data-i18n':size})
//- End Mixin
mixin weaponDetails(equipped)
+collapse
- const equippedCheckObj = {name:'equipped',class:'equipped',value:1,trigger:{triggeredFuncs:['equipItem'],affects:['item_slots']}};
if equipped
- equippedCheckObj.checked = '';
.flex-box.span-all.half-gap
+checkbox(equippedCheckObj)
+text({name:'name',class:'underlined flex-min-content'})
if !equipped
+select({name:'type',class:'underlined'})
+option({value:'','data-i18n':'select'})
each value in ['gear','armor','weapon']
+option({value,'data-i18n':value})
+checkbox({name:'type',value:'weapon',hidden:'',class:'section-control'})
+input-label({
inputObj:{name:'wear',type:'number',class:'underlined'},
spanObj:{'data-i18n':'wear',role:'heading','aria-level':4},
divObj:{class:'wear section-display'}
})
else
+input-label({
inputObj:{name:'wear',type:'number',class:'underlined'},
spanObj:{'data-i18n':'wear',role:'heading','aria-level':4},
divObj:{clas:'wear'}
})
+roller({name:'roll',trigger:{
triggeredFuncs:['rollRepeating']
}})
+checkbox({name:'type',value:'weapon',hidden:'',class:'section-control',trigger:{defaultValue:''}})
.section-display.expanded.weapon-section
+skillSelect
+input-label({
inputObj:{name:'properties',type:'text',class:'underlined'},
spanObj:{'data-i18n':'properties',role:'heading','aria-level':4},
divObj:{class:'blitz'}
})
.input-label.input-label--dual.damage
span(data-i18n='damage' role='heading' aria-level=4)
+text({name:'damage',class:'underlined'})
span.slash +
+select({name:'damage characteristic',class:'underlined'})
+characteristicOptions
+input-label({
inputObj:{name:'range',type:'text',class:'underlined'},
spanObj:{'data-i18n':'range',role:'heading','aria-level':4},
divObj:{class:'range'}
})
mixin attributeHolder(name)
- const trigger = {calculation:'calcAttribute',affects:[`${name}`]};
+statContainer({class:name})&attributes(attributes)
+roller-label({
inputObj:{name:`${name} goal`,value:11,class:'underlined',type:'number',trigger},
buttonObj:{name,'data-i18n':name,role:'heading','aria-level':3,trigger:{
triggeredFuncs:['rollAttribute']
}},
divObj:{class:'stacked center no-gap'}
})
.parens-holder
span.parentheses (
+plusControl({name:`${name}`,value:0,trigger:{calculation:'calcAttributeMod'}})
span.parentheses )
mixin conditionCheck(condition)
.condition-holder
label.text-check.tooltip--control
+checkbox({name:condition,value:1,hidden:''})
span(data-i18n=condition).basic-border
span(data-i18n=`${condition}-description`).tooltip-display
//- End Mixin
mixin bestWorstToggle
ul.best-worst-toggle.flex-box.half-gap.flex-wrap
each value,state in {'best-of-two':'2d20kh1','normal':'1d20','worst-of-two':'2d20kl1','take time':'1D20'}
li.no-list
label(title='@{roll_state}').text-check
- const checkObj = {name:'roll state',value,hidden:''};
if state === 'normal'
- checkObj.checked = '';
+radio(checkObj)
span(data-i18n=state).basic-border
//- End Mixin
mixin inputWithControls(inputObj)
- const nameBase = inputObj.name;
.input-controls
+action({name:`decrement ${nameBase}`,class:'input-control--button',trigger:{
triggeredFuncs:['decrementInput']
}})
|-
+input(inputObj)
+action({name:`increment ${nameBase}`,class:'input-control--button',trigger:{
triggeredFuncs:['incrementInput']
}})
|+