import walkDown from '/imports/api/engine/computation/utility/walkdown.js'; export default function computeInactiveStatus(node) { const prop = node.node; if (!isActive(prop)) { // Mark prop inactive due to self prop.inactive = true; prop.deactivatedBySelf = true; } if (!childrenActive(prop)) { // Mark children as inactive due to ancestor walkDown(node.children, child => { child.node.inactive = true; child.node.deactivatedByAncestor = true; }); } } function isActive(prop) { if (prop.disabled) return false; switch (prop.type) { // Unprepared spells are inactive case 'spell': return !!prop.prepared || !!prop.alwaysPrepared; default: return true; } } function childrenActive(prop) { // Children of disabled properties are always inactive if (prop.disabled) return false; switch (prop.type) { // Only equipped items with non-zero quantity have active children case 'item': return !!prop.equipped && prop.quantity !== 0; // The children of actions, spells, and triggers are always inactive case 'action': return false; case 'spell': return false; case 'trigger': return false; // Other children are active default: return true; } }