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);