diff --git a/builder/doc.html b/builder/doc.html
index 9b735e8..0a52469 100644
--- a/builder/doc.html
+++ b/builder/doc.html
@@ -1376,6 +1376,7 @@
+
diff --git a/js/atree.js b/js/atree.js
index 623aa29..540d679 100644
--- a/js/atree.js
+++ b/js/atree.js
@@ -403,6 +403,7 @@ const atree_validate = new (class extends ComputeNode {
reachable.add(ability.id);
}
if (atree_to_add.length == _add.length) {
+ atree_to_add = _add;
break;
}
atree_to_add = _add;
@@ -1143,6 +1144,7 @@ function generateTooltip(UI_elem, node_elem, ability, atree_map) {
let apUsed = 0;
let maxAP = parseInt(document.getElementById("active_AP_cap").innerHTML);
let archChosen = 0;
+ let satisfiedDependencies = [];
let blockedBy = [];
for (let [id, node_wrap] of atree_map.entries()) {
if (!node_wrap.active || id == ability.id) {
@@ -1152,6 +1154,9 @@ function generateTooltip(UI_elem, node_elem, ability, atree_map) {
if (node_wrap.ability.archetype == ability.archetype) {
archChosen++;
}
+ if (ability.dependencies.includes(id)) {
+ satisfiedDependencies.push(id);
+ }
if (ability.blockers.includes(id)) {
blockedBy.push(node_wrap.ability.display_name);
}
@@ -1182,6 +1187,18 @@ function generateTooltip(UI_elem, node_elem, ability, atree_map) {
container.appendChild(archReq);
}
+ // dependencies
+ for (let i = 0; i < ability.dependencies.length; i++) {
+ let dependency = make_elem("p", ["scaled-font-sm", "my-0", "mx-1"], {});
+ if (satisfiedDependencies.includes(ability.dependencies[i])) {
+ dependency.innerHTML = reqYes;
+ } else {
+ dependency.innerHTML = reqNo;
+ }
+ dependency.innerHTML += " Required Ability: " + atree_map.get(ability.dependencies[i]).ability.display_name;
+ container.appendChild(dependency);
+ }
+
// blockers
for (let i = 0; i < blockedBy.length; i++) {
let blocker = make_elem("p", ["scaled-font-sm", "my-0", "mx-1"], {});
diff --git a/js/computation_graph.js b/js/computation_graph.js
index 0dcc8d8..d144e29 100644
--- a/js/computation_graph.js
+++ b/js/computation_graph.js
@@ -1,5 +1,6 @@
-let all_nodes = [];
+let all_nodes = new Set();
let node_debug_stack = [];
+let COMPUTE_GRAPH_DEBUG = false;
class ComputeNode {
/**
* Make a generic compute node.
@@ -21,7 +22,7 @@ class ComputeNode {
// 0: clean
this.inputs_dirty = new Map();
this.inputs_dirty_count = 0;
- all_nodes.push(this);
+ if (COMPUTE_GRAPH_DEBUG) { all_nodes.add(this); }
}
/**
@@ -34,7 +35,7 @@ class ComputeNode {
if (this.dirty === 0) {
return;
}
- node_debug_stack.push(this.name);
+ if (COMPUTE_GRAPH_DEBUG) { node_debug_stack.push(this.name); }
if (this.dirty == 2) {
let calc_inputs = new Map();
for (const input of this.inputs) {
@@ -46,7 +47,7 @@ class ComputeNode {
for (const child of this.children) {
child.mark_input_clean(this.name, this.value);
}
- node_debug_stack.pop();
+ if (COMPUTE_GRAPH_DEBUG) { node_debug_stack.pop(); }
return this;
}
@@ -190,7 +191,7 @@ function calcSchedule(node, timeout) {
}
node.mark_dirty();
node.update_task = setTimeout(function() {
- node_debug_stack = [];
+ if (COMPUTE_GRAPH_DEBUG) { node_debug_stack = []; }
node.update();
node.update_task = null;
}, timeout);