38 lines
1.1 KiB
JavaScript
38 lines
1.1 KiB
JavaScript
import { cloneDeep } from 'lodash';
|
|
import createGraph from 'ngraph.graph';
|
|
|
|
export default class CreatureComputation {
|
|
constructor(properties){
|
|
// Set up fields
|
|
this.originalPropsById = {};
|
|
this.propsById = {};
|
|
this.propsByType = {};
|
|
this.propsByVariableName = {};
|
|
this.scope = {};
|
|
this.props = properties;
|
|
this.dependencyGraph = createGraph();
|
|
|
|
// Store properties for easy access later
|
|
properties.forEach(prop => {
|
|
// Store a copy of the unmodified prop
|
|
this.originalPropsById[prop._id] = cloneDeep(prop);
|
|
|
|
// Store by id
|
|
this.propsById[prop._id] = prop;
|
|
|
|
// Store by type
|
|
this.propsByType[prop.type] ?
|
|
this.propsByType[prop.type].push(prop) :
|
|
this.propsByType[prop.type] = [prop];
|
|
|
|
// Store by variableName
|
|
this.propsByVariableName[prop.variableName] ?
|
|
this.propsByVariableName[prop.variableName].push(prop) :
|
|
this.propsByVariableName[prop.variableName]= [prop];
|
|
|
|
// Store the prop in the dependency graph
|
|
this.dependencyGraph.addNode(prop._id, prop);
|
|
});
|
|
}
|
|
}
|