From 7c2b7419d965d94cd4af11976c4ede0b360f71d8 Mon Sep 17 00:00:00 2001 From: Stefan Zermatten Date: Thu, 24 Aug 2023 11:10:19 +0200 Subject: [PATCH] Fixed content weightless carried containers weight --- .../buildComputation/linkInventory.js | 20 ++++++------ .../aggregate/aggregateInventory.js | 32 +++++++++---------- 2 files changed, 26 insertions(+), 26 deletions(-) diff --git a/app/imports/api/engine/computation/buildComputation/linkInventory.js b/app/imports/api/engine/computation/buildComputation/linkInventory.js index ae092bd5..7961e4df 100644 --- a/app/imports/api/engine/computation/buildComputation/linkInventory.js +++ b/app/imports/api/engine/computation/buildComputation/linkInventory.js @@ -2,22 +2,22 @@ * Performs a depth first traversal of the character tree, summing the container * and inventory contents on the way up the tree */ -export default function linkInventory(forest, dependencyGraph){ +export default function linkInventory(forest, dependencyGraph) { // The stack of properties to still navigate const stack = [...forest]; // The current containers we are inside of const containerStack = []; - while(stack.length){ + while (stack.length) { const top = stack[stack.length - 1]; const prop = top.node; - if (prop._computationDetails.inventoryChildrenVisited){ + if (prop._computationDetails.inventoryChildrenVisited) { if (prop.type === 'container') containerStack.pop(); stack.pop(); handleProp(prop, containerStack, dependencyGraph); } else { // Add all containers to the stack when we first visit them - if (prop.type === 'container'){ + if (prop.type === 'container') { containerStack.push(top.node); } // Push children onto the stack and mark this as children are visited @@ -27,18 +27,18 @@ export default function linkInventory(forest, dependencyGraph){ } } -function handleProp(prop, containerStack, dependencyGraph){ +function handleProp(prop, containerStack, dependencyGraph) { // Skip props that aren't part of the inventory if (prop.type !== 'item' && prop.type !== 'container') return; // Determine if this property is carried, items are carried by default let carried = prop.type === 'container' ? prop.carried : true; // Item-specific links - if (prop.type === 'item'){ - if (prop.attuned){ + if (prop.type === 'item') { + if (prop.attuned) { dependencyGraph.addLink('itemsAttuned', prop._id, 'attunedItem'); } - if (prop.equipped){ + if (prop.equipped) { dependencyGraph.addLink('weightEquipment', prop._id, 'equippedItem'); dependencyGraph.addLink('valueEquipment', prop._id, 'equippedItem'); } @@ -47,14 +47,14 @@ function handleProp(prop, containerStack, dependencyGraph){ // Get the parent container const container = containerStack[containerStack.length - 1]; - if (container){ + if (container) { // The container depends on this prop for its contents data dependencyGraph.addLink(container._id, prop._id, 'containerContents'); } else { // There is no parent container, the character totals depend on this prop dependencyGraph.addLink('weightTotal', prop._id, 'inventoryStats'); dependencyGraph.addLink('valueTotal', prop._id, 'inventoryStats'); - if (carried){ + if (carried) { dependencyGraph.addLink('weightCarried', prop._id, 'inventoryStats'); dependencyGraph.addLink('valueCarried', prop._id, 'inventoryStats'); } diff --git a/app/imports/api/engine/computation/computeComputation/computeByType/computeVariable/aggregate/aggregateInventory.js b/app/imports/api/engine/computation/computeComputation/computeByType/computeVariable/aggregate/aggregateInventory.js index 6dd01ba2..a7291388 100644 --- a/app/imports/api/engine/computation/computeComputation/computeByType/computeVariable/aggregate/aggregateInventory.js +++ b/app/imports/api/engine/computation/computeComputation/computeByType/computeVariable/aggregate/aggregateInventory.js @@ -1,25 +1,25 @@ -export default function aggregateInventory({node, linkedNode, link}){ +export default function aggregateInventory({ node, linkedNode, link }) { let linkedProp = linkedNode.data || {}; const prop = node.data; - switch (link.data){ + switch (link.data) { case 'attunedItem': prop.baseValue = (prop.baseValue || 0) + 1; return; case 'equippedItem': - if (node.id === 'weightEquipment'){ + if (node.id === 'weightEquipment') { prop.baseValue = (prop.baseValue || 0) + weight(linkedProp); - } else if (node.id === 'valueEquipment'){ + } else if (node.id === 'valueEquipment') { prop.baseValue = (prop.baseValue || 0) + value(linkedProp); } return; case 'containerContents': // Add this property's weights and values to the container - if (!prop.weightless){ + if (!prop.weightless) { prop.contentsWeight = (prop.contentsWeight || 0) + weight(linkedProp); - if (prop.carried){ + if (prop.carried && !prop.contentsWeightless) { prop.carriedWeight = (prop.carriedWeight || 0) + carriedWeight(linkedProp); } } @@ -30,39 +30,39 @@ export default function aggregateInventory({node, linkedNode, link}){ return; case 'inventoryStats': - if (node.id === 'weightTotal'){ + if (node.id === 'weightTotal') { prop.baseValue = (prop.baseValue || 0) + weight(linkedProp); - } else if (node.id === 'valueTotal'){ + } else if (node.id === 'valueTotal') { prop.baseValue = (prop.baseValue || 0) + value(linkedProp); - } else if (node.id === 'weightCarried'){ + } else if (node.id === 'weightCarried') { prop.baseValue = (prop.baseValue || 0) + carriedWeight(linkedProp); - } else if (node.id === 'valueCarried'){ + } else if (node.id === 'valueCarried') { prop.baseValue = (prop.baseValue || 0) + carriedValue(linkedProp); } return; } } -function quantity(prop){ - if (typeof prop.quantity === 'number'){ +function quantity(prop) { + if (typeof prop.quantity === 'number') { return prop.quantity; } else { return 1; } } -function weight(prop){ +function weight(prop) { return (prop.weight || 0) * quantity(prop) + (prop.contentsWeight || 0); } -function carriedWeight(prop){ +function carriedWeight(prop) { return (prop.weight || 0) * quantity(prop) + (prop.carriedWeight || 0); } -function value (prop){ +function value(prop) { return (prop.value || 0) * quantity(prop) + (prop.contentsValue || 0); } -function carriedValue (prop){ +function carriedValue(prop) { return (prop.value || 0) * quantity(prop) + (prop.carriedValue || 0); }