Fixing UI for 2.1 data changes

This commit is contained in:
Thaum Rystra
2024-03-23 16:02:28 +02:00
parent 293deaa592
commit 359d645f6b
40 changed files with 2142 additions and 510 deletions

View File

@@ -8,12 +8,12 @@ interface CreatureProperty {
}
export default class CreatureComputation {
originalPropsById: object;
propsById: object;
propsWithTag: object;
scope: object;
originalPropsById: Record<string, CreatureProperty>;
propsById: Record<string, CreatureProperty>;
propsWithTag: Record<string, string[]>;
scope: Record<string, any>;
props: Array<CreatureProperty>;
dependencyGraph: Graph;
dependencyGraph: Graph<any, string>;
errors: Array<object>;
creature: object;
variables: object;

View File

@@ -27,7 +27,7 @@ function isActive(prop: CreatureProperty): boolean {
return true;
}
function childrenActive(prop): boolean {
function childrenActive(prop: CreatureProperty): boolean {
// Children of disabled properties are always inactive
if (prop.disabled) return false;
switch (prop.type) {

View File

@@ -1,7 +1,12 @@
import walkDown from '/imports/api/engine/computation/utility/walkdown';
import { getEffectTagTargets } from '/imports/api/engine/computation/buildComputation/linkTypeDependencies';
import { Forest, TreeNode } from '/imports/api/parenting/parentingFunctions';
import { CreatureProperty } from '/imports/api/creature/creatureProperties/CreatureProperties';
import CreatureComputation from '/imports/api/engine/computation/CreatureComputation';
export default function computeToggleDependencies(node, dependencyGraph, computation, forest) {
export default function computeToggleDependencies(
node: TreeNode<CreatureProperty>, computation: CreatureComputation, forest: Forest<CreatureProperty>
) {
const prop = node.doc
// Only for toggles
if (prop.type !== 'toggle') return;
@@ -12,11 +17,11 @@ export default function computeToggleDependencies(node, dependencyGraph, computa
const target = forest.nodeIndex[targetId];
if (!target) return;
target.doc._computationDetails.toggleAncestors.push(prop);
dependencyGraph.addLink(target.doc._id, prop._id, 'toggle');
computation.dependencyGraph.addLink(target.doc._id, prop._id, 'toggle');
walkDown(target.children, child => {
// The child nodes depend on the toggle
child.doc._computationDetails.toggleAncestors.push(prop);
dependencyGraph.addLink(child.doc._id, prop._id, 'toggle');
computation.dependencyGraph.addLink(child.doc._id, prop._id, 'toggle');
});
});
}
@@ -27,6 +32,6 @@ export default function computeToggleDependencies(node, dependencyGraph, computa
walkDown(node.children, child => {
// The child nodes depend on the toggle
child.doc._computationDetails.toggleAncestors.push(prop);
dependencyGraph.addLink(child.doc._id, prop._id, 'toggle');
computation.dependencyGraph.addLink(child.doc._id, prop._id, 'toggle');
});
}

View File

@@ -4,7 +4,7 @@
*/
export default function linkInventory(forest, dependencyGraph) {
// The stack of properties to still navigate
const stack = [...forest];
const stack = [...forest.trees];
// The current containers we are inside of
const containerStack = [];

View File

@@ -1,5 +1,5 @@
import { applyNestedSetProperties, calculateNestedSetOperations } from '/imports/api/parenting/parentingFunctions';
import { DenormalisedOnlyCreaturePropertySchema as denormSchema }
import { applyNestedSetProperties } from '/imports/api/parenting/parentingFunctions';
import { CreatureProperty, DenormalisedOnlyCreaturePropertySchema as denormSchema }
from '/imports/api/creature/creatureProperties/CreatureProperties';
import { getProperties, getCreature, getVariables } from '/imports/api/engine/loadCreatures';
import computedOnlySchemas from '/imports/api/properties/computedOnlyPropertySchemasIndex';
@@ -29,7 +29,7 @@ import removeSchemaFields from './buildComputation/removeSchemaFields';
* computed toggles
*/
export default function buildCreatureComputation(creatureId) {
export default function buildCreatureComputation(creatureId: string) {
const creature = getCreature(creatureId);
const variables = getVariables(creatureId);
const properties = getProperties(creatureId);
@@ -37,7 +37,9 @@ export default function buildCreatureComputation(creatureId) {
return computation;
}
export function buildComputationFromProps(properties, creature, variables) {
export function buildComputationFromProps(
properties: CreatureProperty[], creature, variables
) {
const computation = new CreatureComputation(properties, creature, variables);
// Dependency graph where edge(a, b) means a depends on b
@@ -89,13 +91,13 @@ export function buildComputationFromProps(properties, creature, variables) {
const forest = applyNestedSetProperties(properties);
// Walk the property trees computing things that need to be inherited
walkDown(forest, node => {
walkDown(forest.trees, node => {
computeInactiveStatus(node);
});
// Inactive status must be complete for the whole tree before toggle deps
// are calculated
walkDown(forest, node => {
computeToggleDependencies(node, dependencyGraph, computation, forest);
walkDown(forest.trees, node => {
computeToggleDependencies(node, computation, forest);
computeSlotQuantityFilled(node, dependencyGraph);
});

View File

@@ -1,7 +1,7 @@
import { buildComputationFromProps } from '/imports/api/engine/computation/buildCreatureComputation.js';
import { buildComputationFromProps } from '/imports/api/engine/computation/buildCreatureComputation';
import { assert } from 'chai';
import computeCreatureComputation from '../../computeCreatureComputation.js';
import clean from '../../utility/cleanProp.testFn.js';
import computeCreatureComputation from '../../computeCreatureComputation';
import clean from '../../utility/cleanProp.testFn';
export default async function () {
const computation = buildComputationFromProps(testProperties);

View File

@@ -1,7 +1,7 @@
import { buildComputationFromProps } from '/imports/api/engine/computation/buildCreatureComputation.js';
import { buildComputationFromProps } from '/imports/api/engine/computation/buildCreatureComputation';
import { assert } from 'chai';
import computeCreatureComputation from '../../computeCreatureComputation.js';
import { propsFromForest } from '/imports/api/properties/tests/propTestBuilder.testFn.js';
import computeCreatureComputation from '../../computeCreatureComputation';
import { propsFromForest } from '/imports/api/properties/tests/propTestBuilder.testFn';
export default async function () {
const computation = buildComputationFromProps(testProperties);

View File

@@ -1,8 +0,0 @@
export default function walkDown(tree, callback){
let stack = [...tree];
while(stack.length){
let node = stack.pop();
callback(node, stack);
stack.push(...node.children);
}
}

View File

@@ -0,0 +1,14 @@
import { TreeDoc } from '/imports/api/parenting/ChildSchema';
import { TreeNode } from '/imports/api/parenting/parentingFunctions';
export default function walkDown<T extends TreeDoc>(
trees: TreeNode<T>[], callback: (node: TreeNode<T>, stack: TreeNode<T>[]) => any
) {
const stack = [...trees];
while (stack.length) {
const node = stack.pop();
if (!node) return;
callback(node, stack);
stack.push(...node.children);
}
}