Use direct property access to speed everything up

This commit is contained in:
hppeng 2022-07-17 03:38:12 -05:00
parent 3294494c53
commit efad0b5fdd
3 changed files with 22 additions and 15 deletions

View file

@ -396,6 +396,9 @@ window.onerror = function(message, source, lineno, colno, error) {
const codestart = Date.now();
init();
const end = Date.now();
console.log(`builder calculation took ${(end-codestart)/ 1000} seconds.`);
console.log(`builder total took ${(end-start)/ 1000} seconds.`);
const calc_str = `builder calculation took ${(end-codestart)/ 1000} seconds.`;
const total_str = `builder total took ${(end-start)/ 1000} seconds.`;
console.log(calc_str);
console.log(total_str);
document.getElementById('stack-box').textContent += calc_str + total_str;
})();

View file

@ -1143,6 +1143,6 @@ function builder_graph_init() {
// this will propagate the update to the `stat_agg_node`, and then to damage calc
console.log("Set up graph");
let INPUT_UPDATE = true;
INPUT_UPDATE = true;
}

View file

@ -6,16 +6,22 @@ function calculate_skillpoints(equipment, weapon) {
let consider = [];
let noboost = [];
let crafted = [];
weapon.skillpoints = weapon.get('skillpoints');
weapon.reqs = weapon.get('reqs');
weapon.set = weapon.get('set');
for (const item of equipment) {
item.skillpoints = item.get('skillpoints');
item.reqs = item.get('reqs');
item.set = item.get('set');
if (item.get("crafted")) {
crafted.push(item);
}
else if (item.get("reqs").every(x => x === 0) && item.get("skillpoints").every(x => x >= 0)) {
else if (item.get("reqs").every(x => x === 0) && item.skillpoints.every(x => x >= 0)) {
// All reqless item without -skillpoints.
fixed.push(item);
}
// TODO hack: We will treat ALL set items as unsafe :(
else if (item.get("skillpoints").every(x => x === 0) && item.get("set") === null) {
else if (item.skillpoints.every(x => x === 0) && item.set === null) {
noboost.push(item);
}
else {
@ -24,10 +30,10 @@ function calculate_skillpoints(equipment, weapon) {
}
function apply_skillpoints(skillpoints, item, activeSetCounts) {
for (let i = 0; i < 5; i++) {
skillpoints[i] += item.get("skillpoints")[i];
skillpoints[i] += item.skillpoints[i];
}
const setName = item.get("set");
const setName = item.set;
if (setName) { // undefined/null means no set.
let setCount = activeSetCounts.get(setName);
let old_bonus = {};
@ -52,17 +58,17 @@ function calculate_skillpoints(equipment, weapon) {
let applied = [0, 0, 0, 0, 0];
let total = 0;
for (let i = 0; i < 5; i++) {
if (item.get("skillpoints")[i] < 0 && skillpoint_min[i]) {
const unadjusted = skillpoints[i] + item.get("skillpoints")[i];
if (item.skillpoints[i] < 0 && skillpoint_min[i]) {
const unadjusted = skillpoints[i] + item.skillpoints[i];
const delta = skillpoint_min[i] - unadjusted;
if (delta > 0) {
applied[i] += delta;
total += delta;
}
}
if (item.get("reqs")[i] == 0) continue;
skillpoint_min[i] = Math.max(skillpoint_min[i], item.get("reqs")[i] + item.get("skillpoints")[i]);
const req = item.get("reqs")[i];
if (item.reqs[i] == 0) continue;
skillpoint_min[i] = Math.max(skillpoint_min[i], item.reqs[i] + item.skillpoints[i]);
const req = item.reqs[i];
const cur = skillpoints[i];
if (req > cur) {
const diff = req - cur;
@ -71,7 +77,7 @@ function calculate_skillpoints(equipment, weapon) {
}
}
const setName = item.get("set");
const setName = item.set;
if (setName) { // undefined/null means no set.
const setCount = activeSetCounts.get(setName);
if (setCount) {
@ -113,9 +119,7 @@ function calculate_skillpoints(equipment, weapon) {
// Try every combination and pick the best one.
for (let permutation of perm(consider)) {
let activeSetCounts = new Map(static_activeSetCounts);
let has_skillpoint = allFalse.slice();
permutation = permutation.concat(noboost);
let skillpoints_applied = [0, 0, 0, 0, 0];