Backbone v1 for Backwater games
This commit is contained in:
@@ -0,0 +1,220 @@
|
||||
/**
|
||||
* (un)equips armor items
|
||||
* @param {object} trigger - The trigger that caused the function to be called
|
||||
* @param {object} attributes - The attribute values of the character
|
||||
* @param {object[]} sections - All the repeating section IDs
|
||||
* @param {object} casc - Expanded cascade object
|
||||
*/
|
||||
const equipArmor = function({trigger,attributes,sections,casc}){
|
||||
const [section,rowID,attr] = k.parseTriggerName(trigger.name);
|
||||
const row = section ?
|
||||
`${section}_${rowID}` :
|
||||
k.generateRowID('repeating_stored',sections);
|
||||
const armorAttrs = {
|
||||
equipped:{
|
||||
'armor':attributes[`${row}_armor_bonus`],
|
||||
'armor_name':attributes[`${row}_name`],
|
||||
'armor_details':attributes[`${row}_description`],
|
||||
'armor_size':attributes[`${row}_item_size`],
|
||||
},
|
||||
stored:{
|
||||
[`${row}_armor_bonus`]:attributes.armor,
|
||||
[`${row}_name`]:attributes.armor_name,
|
||||
[`${row}_description`]:attributes.armor_details,
|
||||
[`${row}_item_size`]:attributes.armor_size,
|
||||
}
|
||||
};
|
||||
const actionType = section ? 'equipped' : 'stored';
|
||||
const attrMap = armorAttrs[actionType];
|
||||
// If we are equipping a stored armor, then store the currently equipped armor in the stored items repeating section.
|
||||
if(section){
|
||||
equipArmor({trigger:{name:'armor_name'},attributes,sections,casc});
|
||||
}
|
||||
if(
|
||||
!section && attributes.armor_name
|
||||
){
|
||||
attrMap[`${row}_type`] = 'armor';
|
||||
}
|
||||
// copy the values to the target
|
||||
Object.entries(attrMap)
|
||||
.forEach(([key,val]) => {
|
||||
if(section || val){
|
||||
attributes[key] = val;
|
||||
}
|
||||
});
|
||||
// If we equipped a stored armor, remove it from the stored gear repeating section.
|
||||
if(section){
|
||||
k.removeRepeatingRow(row,attributes,sections);
|
||||
}else{
|
||||
Object.keys(armorAttrs.equipped).forEach(
|
||||
attr => attributes[attr] = ''
|
||||
);
|
||||
}
|
||||
};
|
||||
k.registerFuncs({equipArmor});
|
||||
|
||||
/**
|
||||
* Moves gear/weapon/armor items around on the sheet equip/unequip them.
|
||||
* @param {object} trigger - The trigger that caused the function to be called
|
||||
* @param {object} attributes - The attribute values of the character
|
||||
* @param {object[]} sections - All the repeating section IDs
|
||||
* @param {object} casc - Expanded cascade object
|
||||
*/
|
||||
const equipItem = function({trigger,attributes,sections,casc}){
|
||||
const [section,rowID,attr] = k.parseTriggerName(trigger.name);
|
||||
const row = `${section}_${rowID}`;
|
||||
if(
|
||||
section === 'repeating_stored' &&
|
||||
attributes[`${row}_type`] === 'armor'){
|
||||
equipArmor({trigger,attributes,sections,casc});
|
||||
return;
|
||||
}
|
||||
const newSection = section === 'repeating_stored' ?
|
||||
(
|
||||
attributes[`${row}_type`] === 'weapon' ?
|
||||
'repeating_weapon' :
|
||||
'repeating_equipped'
|
||||
):
|
||||
'repeating_stored';
|
||||
const newRow = k.generateRowID(newSection,sections);
|
||||
Object.keys(casc)
|
||||
.forEach(cascKey => {
|
||||
if(cascKey.startsWith(`attr_${row}`)){
|
||||
const attrRef = cascKey.replace(/attr_repeating_[^_]+_[^_]+_/,'');
|
||||
k.debug({[attrRef]:attributes[`${row}_${attrRef}`]})
|
||||
attributes[`${newRow}_${attrRef}`] = attributes[`${row}_${attrRef}`];
|
||||
}
|
||||
});
|
||||
attributes[`${newRow}_equipped`] = newSection.endsWith('stored') ?
|
||||
0 :
|
||||
1;
|
||||
debugger;
|
||||
if(section !== 'repeating_stored'){
|
||||
attributes[`${newRow}_type`] = section.endsWith('equipped') ?
|
||||
'gear' :
|
||||
'weapon';
|
||||
}else{
|
||||
attributes[`${newRow}_type`] = attributes[`${newRow}_type`] || 'gear';
|
||||
}
|
||||
k.removeRepeatingRow(row,attributes,sections);
|
||||
};
|
||||
k.registerFuncs({equipItem});
|
||||
|
||||
/**
|
||||
* Manipulates the classes on the npc skill containers to ensure that only those with an entered value are displayed in collapsed mode
|
||||
* @param {object} trigger - The trigger that caused the function to be called
|
||||
* @param {object} attributes - The attribute values of the character
|
||||
* @param {object[]} sections - All the repeating section IDs
|
||||
* @param {object} casc - Expanded cascade object
|
||||
*/
|
||||
const displayNPCSkill = function({trigger,attributes,sections,casc}){
|
||||
const skill = trigger.name;
|
||||
const rawSkillValue = attributes.attributes[skill];
|
||||
const action = rawSkillValue ?
|
||||
'removeClass' :
|
||||
'addClass';
|
||||
const $elem = $20(`.npc-${skill.replace(/\s+/g,'-').replace(/\(|\)|\//g,'')}-container`);
|
||||
$elem[action]('expanded');
|
||||
};
|
||||
k.registerFuncs({displayNPCSkill});
|
||||
|
||||
/**
|
||||
* Sets up the npc skill display based on the collected values by calling displayNPCSkill for each skill
|
||||
* @param {object} trigger - The trigger that caused the function to be called
|
||||
* @param {object} attributes - The attribute values of the character
|
||||
* @param {object[]} sections - All the repeating section IDs
|
||||
* @param {object} casc - Expanded cascade object
|
||||
*/
|
||||
const NPCSkillSetup = function({trigger,attributes,sections,casc}){
|
||||
Object
|
||||
.keys(skills)
|
||||
.forEach((skill) =>
|
||||
displayNPCSkill({trigger:{name:skill},attributes,sections,casc}));
|
||||
};
|
||||
k.registerFuncs({NPCSkillSetup},{type:['opener']});
|
||||
|
||||
/**
|
||||
*
|
||||
* @param {object} trigger - The trigger that caused the function to be called
|
||||
* @param {object} attributes - The attribute values of the character
|
||||
* @param {object[]} sections - All the repeating section IDs
|
||||
* @param {object} casc - Expanded cascade object
|
||||
*/
|
||||
const showConditions = function({trigger,attributes,sections,casc}){
|
||||
$20('#pc-conditions .sidebar-toggle,#pc-conditions').removeClass('fresh');
|
||||
$20('#pc-conditions').toggleClass('active');
|
||||
};
|
||||
k.registerFuncs({showConditions});
|
||||
|
||||
/**
|
||||
* Resets the tracker for a condition to 0 when the condition is turned off
|
||||
* @param {object} trigger - The trigger that caused the function to be called
|
||||
* @param {object} attributes - The attribute values of the character
|
||||
* @param {object[]} sections - All the repeating section IDs
|
||||
* @param {object} casc - Expanded cascade object
|
||||
*/
|
||||
const resetCondition = function({trigger,attributes,sections,casc}){
|
||||
if(attributes[trigger.name]){
|
||||
attributes[`track_${trigger.name}`] = '';
|
||||
}
|
||||
};
|
||||
k.registerFuncs({resetCondition});
|
||||
|
||||
/**
|
||||
* Decrements the indicated input
|
||||
* @param {object} trigger - The trigger that caused the function to be called
|
||||
* @param {object} attributes - The attribute values of the character
|
||||
* @param {object[]} sections - All the repeating section IDs
|
||||
* @param {object} casc - Expanded cascade object
|
||||
*/
|
||||
const decrementInput = function({trigger,attributes,sections,casc}){
|
||||
const [section,rowID,buttonName] = k.parseTriggerName(trigger.name);
|
||||
const attrName = buttonName.replace(/^decrement-/,'').replace(/-/g,'_');
|
||||
attributes[attrName] -= 1;
|
||||
};
|
||||
k.registerFuncs({decrementInput});
|
||||
|
||||
/**
|
||||
* Increments the indicated input
|
||||
* @param {object} trigger - The trigger that caused the function to be called
|
||||
* @param {object} attributes - The attribute values of the character
|
||||
* @param {object[]} sections - All the repeating section IDs
|
||||
* @param {object} casc - Expanded cascade object
|
||||
*/
|
||||
const incrementInput = function({trigger,attributes,sections,casc}){
|
||||
const [section,rowID,buttonName] = k.parseTriggerName(trigger.name);
|
||||
const attrName = buttonName.replace(/^increment-/,'').replace(/-/g,'_');
|
||||
attributes[attrName] += 1;
|
||||
};
|
||||
k.registerFuncs({incrementInput});
|
||||
|
||||
/**
|
||||
* Sets the pc/npc specific button displays
|
||||
* @param {object} trigger - The trigger that caused the function to be called
|
||||
* @param {object} attributes - The attribute values of the character
|
||||
* @param {object[]} sections - All the repeating section IDs
|
||||
* @param {object} casc - Expanded cascade object
|
||||
*/
|
||||
const sheetTypeDisplay = function({trigger,attributes,sections,casc}){
|
||||
if(attributes.character_type === 'pc'){
|
||||
$20('.tabs--backbone__button--pc').removeClass('inactive');
|
||||
$20('.tabs--backbone__button--npc').addClass('inactive');
|
||||
}else{
|
||||
$20('.tabs--backbone__button--pc').addClass('inactive');
|
||||
$20('.tabs--backbone__button--npc').removeClass('inactive');
|
||||
}
|
||||
};
|
||||
k.registerFuncs({sheetTypeDisplay},{type:['opener']});
|
||||
|
||||
|
||||
/**
|
||||
* Handles the necessary setup for adding a weapon
|
||||
* @param {object} trigger - The trigger that caused the function to be called
|
||||
* @param {object} attributes - The attribute values of the character
|
||||
* @param {object[]} sections - All the repeating section IDs
|
||||
* @param {object} casc - Expanded cascade object
|
||||
*/
|
||||
const addWeapon = function({trigger,attributes,sections,casc,newRow}){
|
||||
attributes[`${newRow}_type`] = 'weapon';
|
||||
};
|
||||
k.registerFuncs({addWeapon});
|
||||
Reference in New Issue
Block a user