fixed: Show only the last event with a var name
This commit is contained in:
@@ -1,8 +1,8 @@
|
||||
export default function computeAction(computation, node){
|
||||
export default function computeAction(computation, node) {
|
||||
const prop = node.data;
|
||||
if (prop.uses){
|
||||
if (prop.uses) {
|
||||
prop.usesLeft = prop.uses.value - (prop.usesUsed || 0);
|
||||
if (!prop.usesLeft){
|
||||
if (!prop.usesLeft) {
|
||||
prop.insufficientResources = true;
|
||||
}
|
||||
}
|
||||
@@ -10,19 +10,19 @@ export default function computeAction(computation, node){
|
||||
if (!prop.resources) return;
|
||||
prop.resources.itemsConsumed.forEach(itemConsumed => {
|
||||
if (!itemConsumed.itemId) return;
|
||||
if (itemConsumed.available < itemConsumed.quantity?.value){
|
||||
if (itemConsumed.available < itemConsumed.quantity?.value) {
|
||||
prop.insufficientResources = true;
|
||||
}
|
||||
});
|
||||
prop.resources.attributesConsumed.forEach(attConsumed => {
|
||||
if (!attConsumed.variableName) return;
|
||||
if (attConsumed.available < attConsumed.quantity?.value){
|
||||
if (attConsumed.available < attConsumed.quantity?.value) {
|
||||
prop.insufficientResources = true;
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
function computeResources(computation, node){
|
||||
function computeResources(computation, node) {
|
||||
const resources = node.data?.resources;
|
||||
if (!resources) return;
|
||||
resources.attributesConsumed.forEach(attConsumed => {
|
||||
|
||||
@@ -7,7 +7,7 @@ import computeVariableAsToggle from './computeVariable/computeVariableAsToggle.j
|
||||
import computeImplicitVariable from './computeVariable/computeImplicitVariable.js';
|
||||
import VARIABLE_NAME_REGEX from '/imports/constants/VARIABLE_NAME_REGEX.js';
|
||||
|
||||
export default function computeVariable(computation, node){
|
||||
export default function computeVariable(computation, node) {
|
||||
const scope = computation.scope;
|
||||
if (!node.data) node.data = {};
|
||||
aggregateLinks(computation, node);
|
||||
@@ -15,7 +15,7 @@ export default function computeVariable(computation, node){
|
||||
// Don't add to the scope if the node id is not a legitimate variable name
|
||||
// Without this `some.thing` could break the entire sheet as a database key
|
||||
if (!VARIABLE_NAME_REGEX.test(node.id)) return;
|
||||
if (node.data.definingProp){
|
||||
if (node.data.definingProp) {
|
||||
// Add the defining variable to the scope
|
||||
scope[node.id] = node.data.definingProp
|
||||
} else {
|
||||
@@ -24,7 +24,7 @@ export default function computeVariable(computation, node){
|
||||
}
|
||||
}
|
||||
|
||||
function aggregateLinks(computation, node){
|
||||
function aggregateLinks(computation, node) {
|
||||
computation.dependencyGraph.forEachLinkedNode(
|
||||
node.id,
|
||||
(linkedNode, link) => {
|
||||
@@ -32,11 +32,12 @@ function aggregateLinks(computation, node){
|
||||
// Ignore inactive props
|
||||
if (linkedNode.data.inactive) return;
|
||||
// Apply all the aggregations
|
||||
let arg = {node, linkedNode, link, computation};
|
||||
let arg = { node, linkedNode, link, computation };
|
||||
aggregate.classLevel(arg);
|
||||
aggregate.damageMultiplier(arg);
|
||||
aggregate.definition(arg);
|
||||
aggregate.effect(arg);
|
||||
aggregate.eventDefinition(arg);
|
||||
aggregate.inventory(arg);
|
||||
aggregate.proficiency(arg);
|
||||
},
|
||||
@@ -44,7 +45,7 @@ function aggregateLinks(computation, node){
|
||||
);
|
||||
}
|
||||
|
||||
function combineAggregations(computation, node){
|
||||
function combineAggregations(computation, node) {
|
||||
combineMultiplierAggregator(node);
|
||||
node.data.overridenProps?.forEach(prop => {
|
||||
computeVariableProp(computation, node, prop);
|
||||
@@ -52,51 +53,51 @@ function combineAggregations(computation, node){
|
||||
computeVariableProp(computation, node, node.data.definingProp);
|
||||
}
|
||||
|
||||
function computeVariableProp(computation, node, prop){
|
||||
function computeVariableProp(computation, node, prop) {
|
||||
if (!prop) return;
|
||||
|
||||
// Combine damage multipliers in all props so that they can't be overridden
|
||||
if (node.data.immunity){
|
||||
if (node.data.immunity) {
|
||||
prop.immunity = node.data.immunity;
|
||||
prop.immunities = node.data.immunities;
|
||||
}
|
||||
if (node.data.resistance){
|
||||
if (node.data.resistance) {
|
||||
prop.resistance = node.data.resistance;
|
||||
prop.resistances = node.data.resistances;
|
||||
}
|
||||
if (node.data.vulnerability){
|
||||
if (node.data.vulnerability) {
|
||||
prop.vulnerability = node.data.vulnerability;
|
||||
prop.vulnerabilities = node.data.vulnerabilities;
|
||||
}
|
||||
|
||||
if (prop.type === 'attribute'){
|
||||
if (prop.type === 'attribute') {
|
||||
computeVariableAsAttribute(computation, node, prop);
|
||||
} else if (prop.type === 'skill'){
|
||||
} else if (prop.type === 'skill') {
|
||||
computeVariableAsSkill(computation, node, prop);
|
||||
} else if (prop.type === 'constant'){
|
||||
} else if (prop.type === 'constant') {
|
||||
computeVariableAsConstant(computation, node, prop);
|
||||
} else if (prop.type === 'class'){
|
||||
} else if (prop.type === 'class') {
|
||||
computeVariableAsClass(computation, node, prop);
|
||||
} else if (prop.type === 'toggle'){
|
||||
} else if (prop.type === 'toggle') {
|
||||
computeVariableAsToggle(computation, node, prop);
|
||||
}
|
||||
}
|
||||
|
||||
function combineMultiplierAggregator(node){
|
||||
function combineMultiplierAggregator(node) {
|
||||
// get a reference to the aggregator
|
||||
const aggregator = node.data.multiplierAggregator;
|
||||
if (!aggregator) return;
|
||||
|
||||
// Combine
|
||||
if (aggregator.immunities?.length){
|
||||
if (aggregator.immunities?.length) {
|
||||
node.data.immunity = true;
|
||||
node.data.immunities = aggregator.immunities;
|
||||
}
|
||||
if (aggregator.resistances?.length){
|
||||
if (aggregator.resistances?.length) {
|
||||
node.data.resistance = true;
|
||||
node.data.resistances = aggregator.resistances;
|
||||
}
|
||||
if (aggregator.vulnerabilities?.length){
|
||||
if (aggregator.vulnerabilities?.length) {
|
||||
node.data.vulnerability = true;
|
||||
node.data.vulnerabilities = aggregator.vulnerabilities;
|
||||
}
|
||||
|
||||
@@ -0,0 +1,22 @@
|
||||
|
||||
export default function aggregateEventDefinition({ node, linkedNode, link }) {
|
||||
// Look at all event definition links
|
||||
if (link.data !== 'eventDefinition') return;
|
||||
|
||||
// Store which property is THE defining event and which are overridden
|
||||
const prop = linkedNode.data;
|
||||
// get current defining event
|
||||
const definingEvent = node.data.definingEvent;
|
||||
// Find the last defining event
|
||||
if (
|
||||
!definingEvent ||
|
||||
prop.order > definingEvent.order
|
||||
) {
|
||||
// override the current defining prop
|
||||
if (definingEvent) definingEvent.overridden = true;
|
||||
// set this prop as the new defining prop
|
||||
node.data.definingEvent = prop;
|
||||
} else {
|
||||
prop.overridden = true;
|
||||
}
|
||||
}
|
||||
@@ -1,6 +1,7 @@
|
||||
import definition from './aggregateDefinition.js';
|
||||
import damageMultiplier from './aggregateDamageMultiplier.js';
|
||||
import effect from './aggregateEffect.js';
|
||||
import eventDefinition from './aggregateEventDefinition.js';
|
||||
import proficiency from './aggregateProficiency.js';
|
||||
import classLevel from './aggregateClassLevel.js';
|
||||
import inventory from './aggregateInventory.js';
|
||||
@@ -10,6 +11,7 @@ export default Object.freeze({
|
||||
damageMultiplier,
|
||||
definition,
|
||||
effect,
|
||||
eventDefinition,
|
||||
inventory,
|
||||
proficiency,
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user