blueshell
Advanced tools
Comparing version 1.4.0-graphviz.1 to 1.4.0-graphviz.2
@@ -11,3 +11,3 @@ import { Base } from './nodes/Base'; | ||
import * as decorators from './nodes/decorators'; | ||
import { toString, toConsole } from './utils/renderTree'; | ||
import { toString, toConsole, toDotString, toDotConsole } from './utils/renderTree'; | ||
export { Base as Action }; | ||
@@ -19,2 +19,4 @@ export { Base as Condition }; | ||
toConsole: typeof toConsole; | ||
toDotString: typeof toDotString; | ||
toDotConsole: typeof toDotConsole; | ||
}; |
@@ -28,3 +28,5 @@ "use strict"; | ||
toConsole: renderTree_1.toConsole, | ||
toDotString: renderTree_1.toDotString, | ||
toDotConsole: renderTree_1.toDotConsole, | ||
}; | ||
//# sourceMappingURL=index.js.map |
@@ -6,4 +6,5 @@ /** | ||
import { BlueshellState } from '../nodes/BlueshellState'; | ||
export declare function generateDigraphString<S extends BlueshellState, E>(tree: Base<S, E>, state?: S): string; | ||
export declare function toString<S extends BlueshellState, E>(tree: Base<S, E>, state?: S): string; | ||
export declare function toConsole<S extends BlueshellState, E>(tree: Base<S, E>, state?: S): void; | ||
export declare function toDotString<S extends BlueshellState, E>(tree: Base<S, E>, state?: S): any; | ||
export declare function toDotConsole<S extends BlueshellState, E>(tree: Base<S, E>, state?: S): void; |
"use strict"; | ||
Object.defineProperty(exports, "__esModule", { value: true }); | ||
const archy = require("archy"); | ||
const _ = require("lodash"); | ||
const Selector_1 = require("../nodes/Selector"); | ||
const LatchedSelector_1 = require("../nodes/LatchedSelector"); | ||
const LatchedSequence_1 = require("../nodes/LatchedSequence"); | ||
const Sequence_1 = require("../nodes/Sequence"); | ||
const IfElse_1 = require("../nodes/IfElse"); | ||
const decorators_1 = require("../nodes/decorators"); | ||
function buildArchyTree(node, state) { | ||
let nodeLabel = node.name; | ||
if (nodeLabel !== node.constructor.name) { | ||
nodeLabel += ' (' + node.constructor.name + ')'; | ||
} | ||
if (state) { | ||
let eventCounter = node.getTreeEventCounter(state); | ||
let lastEventSeen = node.getLastEventSeen(state); | ||
let lastResult = node.getLastResult(state); | ||
if (lastEventSeen === eventCounter && lastResult) { | ||
nodeLabel += ' => ' + lastResult; | ||
} | ||
} | ||
const archyTree = { | ||
label: nodeLabel, | ||
nodes: new Array(), | ||
}; | ||
if (node.children) { | ||
for (let child of node.children) { | ||
archyTree.nodes.push(buildArchyTree(child, state)); | ||
} | ||
} | ||
return archyTree; | ||
} | ||
function iterativePreOrderTraversal(root, visit, state) { | ||
if (!root) { | ||
return; | ||
} | ||
let nodesToVisit = []; | ||
let resultingString = ''; | ||
nodesToVisit.push(root); | ||
while (!_.isEmpty(nodesToVisit)) { | ||
let currentNode = nodesToVisit.pop(); | ||
resultingString += visit(currentNode, state); | ||
if (currentNode.children) { | ||
for (let child of [...currentNode.children].reverse()) { | ||
nodesToVisit.push(child); | ||
} | ||
} | ||
} | ||
return resultingString; | ||
} | ||
function nodeInDotLanguage(node, state) { | ||
let shape; | ||
if (node instanceof LatchedSelector_1.LatchedSelector) { | ||
shape = 'Mdiamond'; | ||
} | ||
else if (node instanceof Selector_1.Selector) { | ||
shape = 'diamond'; | ||
} | ||
else if (node instanceof LatchedSequence_1.LatchedSequence) { | ||
shape = 'doubleoctagon'; | ||
} | ||
else if (node instanceof Sequence_1.Sequence) { | ||
shape = 'octagon'; | ||
} | ||
else if (node instanceof IfElse_1.IfElse) { | ||
shape = 'invtriangle'; | ||
} | ||
else if (node instanceof decorators_1.Not) { | ||
shape = 'circle'; | ||
} | ||
else if (node instanceof decorators_1.RepeatOnResult) { | ||
shape = 'house'; | ||
} | ||
else if (node instanceof decorators_1.RepeatWhen) { | ||
shape = 'invhouse'; | ||
} | ||
else if (node instanceof decorators_1.ResultSwap) { | ||
shape = 'egg'; | ||
} | ||
else { | ||
shape = 'rectangle'; | ||
} | ||
let nodeLabel = node.name; | ||
if (nodeLabel !== node.constructor.name) { | ||
nodeLabel += ' (' + node.constructor.name + ')'; | ||
} | ||
return `\t${nodeLabel} [shape=${shape}];\n`; | ||
} | ||
function generateDigraphString(tree, state) { | ||
let digraphString = `digraph G { | ||
${iterativePreOrderTraversal(tree, nodeInDotLanguage, state)} | ||
}`; | ||
return digraphString; | ||
} | ||
exports.generateDigraphString = generateDigraphString; | ||
const archyTree_1 = require("./archyTree"); | ||
const dotTree_1 = require("./dotTree"); | ||
function toString(tree, state) { | ||
let a = buildArchyTree(tree, state); | ||
let renderedTree = archy(a); | ||
return renderedTree; | ||
return archyTree_1.serializeArchyTree(tree, state); | ||
} | ||
@@ -108,2 +13,10 @@ exports.toString = toString; | ||
exports.toConsole = toConsole; | ||
function toDotString(tree, state) { | ||
return dotTree_1.serializeDotTree(tree, state); | ||
} | ||
exports.toDotString = toDotString; | ||
function toDotConsole(tree, state) { | ||
console.log(toDotString(tree, state)); // eslint-disable-line no-console | ||
} | ||
exports.toDotConsole = toDotConsole; | ||
//# sourceMappingURL=renderTree.js.map |
@@ -11,4 +11,4 @@ "use strict"; | ||
RUNNING: 'RUNNING', | ||
ERROR: 'ERROR' | ||
ERROR: 'ERROR', | ||
}; | ||
//# sourceMappingURL=resultCodes.js.map |
@@ -13,3 +13,3 @@ import {Base} from './nodes/Base'; | ||
import {toString, toConsole} from './utils/renderTree'; | ||
import {toString, toConsole, toDotString, toDotConsole} from './utils/renderTree'; | ||
@@ -22,4 +22,6 @@ export {Base as Action}; | ||
export const renderTree = { | ||
toString, | ||
toConsole, | ||
toString, | ||
toConsole, | ||
toDotString, | ||
toDotConsole, | ||
}; |
@@ -6,119 +6,19 @@ /** | ||
import {BlueshellState} from '../nodes/BlueshellState'; | ||
import {serializeArchyTree} from './archyTree'; | ||
import {serializeDotTree} from './dotTree'; | ||
import * as archy from 'archy'; | ||
import {Data} from 'archy'; | ||
import * as _ from 'lodash'; | ||
import { Selector } from '../nodes/Selector'; | ||
import { LatchedSelector } from '../nodes/LatchedSelector'; | ||
import { LatchedSequence } from '../nodes/LatchedSequence'; | ||
import {Sequence} from '../nodes/Sequence'; | ||
import { IfElse } from '../nodes/IfElse'; | ||
import {Not, RepeatOnResult, RepeatWhen, ResultSwap} from '../nodes/decorators'; | ||
function buildArchyTree<S extends BlueshellState, E>(node: Base<S, E>, state?: S): Data { | ||
let nodeLabel = node.name; | ||
if (nodeLabel !== node.constructor.name) { | ||
nodeLabel += ' (' + node.constructor.name + ')'; | ||
} | ||
if (state) { | ||
let eventCounter = node.getTreeEventCounter(state); | ||
let lastEventSeen = node.getLastEventSeen(state); | ||
let lastResult = node.getLastResult(state); | ||
if (lastEventSeen === eventCounter && lastResult) { | ||
nodeLabel += ' => ' + lastResult; | ||
} | ||
} | ||
const archyTree = { | ||
label: nodeLabel, | ||
nodes: new Array<Data | string>(), | ||
}; | ||
if ((<any>node).children) { | ||
for (let child of (<any>node).children) { | ||
archyTree.nodes.push(buildArchyTree(<Base<S,E>>child, state)); | ||
} | ||
} | ||
return archyTree; | ||
export function toString<S extends BlueshellState, E>(tree: Base<S, E>, state?: S): string { | ||
return serializeArchyTree(tree, state); | ||
} | ||
function iterativePreOrderTraversal<S extends BlueshellState, E>(root: Base<S, E>, visit: (node: Base<S, E>, state?: S) => any, state?: S): any { | ||
if(!root) { | ||
return; | ||
} | ||
let nodesToVisit: Base<S, E>[] = []; | ||
let resultingString = ''; | ||
nodesToVisit.push(root); | ||
while(!_.isEmpty(nodesToVisit)) { | ||
let currentNode = nodesToVisit.pop(); | ||
resultingString += visit(currentNode!, state); | ||
if((<any>currentNode).children) { | ||
for (let child of [...(<any>currentNode).children].reverse()) { | ||
nodesToVisit.push(child); | ||
} | ||
} | ||
} | ||
return resultingString; | ||
export function toConsole<S extends BlueshellState, E>(tree: Base<S, E>, state?: S) { | ||
console.log(toString(tree, state)); // eslint-disable-line no-console | ||
} | ||
function nodeInDotLanguage<S extends BlueshellState, E>(node: Base<S, E>, state?: S): string { | ||
let shape; | ||
if(node instanceof LatchedSelector) { | ||
shape = 'Mdiamond'; | ||
} else if (node instanceof Selector) { | ||
shape = 'diamond'; | ||
} else if (node instanceof LatchedSequence) { | ||
shape = 'doubleoctagon'; | ||
} else if (node instanceof Sequence) { | ||
shape = 'octagon'; | ||
} else if (node instanceof IfElse) { | ||
shape = 'invtriangle'; | ||
} else if (node instanceof Not) { | ||
shape = 'circle'; | ||
} else if (node instanceof RepeatOnResult) { | ||
shape = 'house'; | ||
} else if (node instanceof RepeatWhen) { | ||
shape = 'invhouse'; | ||
} else if (node instanceof ResultSwap) { | ||
shape = 'egg'; | ||
} else { | ||
shape = 'rectangle'; | ||
} | ||
let nodeLabel = node.name; | ||
if (nodeLabel !== node.constructor.name) { | ||
nodeLabel += ' (' + node.constructor.name + ')'; | ||
} | ||
return `\t${nodeLabel} [shape=${shape}];\n`; | ||
export function toDotString<S extends BlueshellState, E>(tree: Base<S, E>, state?: S) { | ||
return serializeDotTree(tree, state); | ||
} | ||
export function generateDigraphString<S extends BlueshellState, E>(tree: Base<S, E>, state?: S): string { | ||
let digraphString = `digraph G { | ||
${iterativePreOrderTraversal(tree, nodeInDotLanguage, state)} | ||
}`; | ||
return digraphString; | ||
export function toDotConsole<S extends BlueshellState, E>(tree: Base<S, E>, state?: S) { | ||
console.log(toDotString(tree, state)); // eslint-disable-line no-console | ||
} | ||
export function toString<S extends BlueshellState, E>(tree: Base<S, E>, state?: S): string { | ||
let a = buildArchyTree(tree, state); | ||
let renderedTree = archy(a); | ||
return renderedTree; | ||
} | ||
export function toConsole<S extends BlueshellState, E>(tree: Base<S, E>, state?: S) { | ||
console.log(toString(tree, state)); // eslint-disable-line no-console | ||
} |
@@ -9,3 +9,3 @@ /** | ||
RUNNING: 'RUNNING', | ||
ERROR: 'ERROR' | ||
ERROR: 'ERROR', | ||
}; |
@@ -101,3 +101,3 @@ { | ||
"types": "dist/index.d.ts", | ||
"version": "1.4.0-graphviz.1" | ||
"version": "1.4.0-graphviz.2" | ||
} |
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
89569
78
2052