diff --git a/js/build_encode_decode.js b/js/build_encode_decode.js index b4619f5..a5f88d0 100644 --- a/js/build_encode_decode.js +++ b/js/build_encode_decode.js @@ -1,7 +1,7 @@ let player_build; let build_powders; -function getItemNameFromID(id) { return idMap[id]; } +function getItemNameFromID(id) { return idMap.get(id); } function getTomeNameFromID(id) { return tomeIDMap.get(id); } function parsePowdering(powder_info) { diff --git a/js/builder.js b/js/builder.js index d5c7b32..215ef22 100644 --- a/js/builder.js +++ b/js/builder.js @@ -164,8 +164,8 @@ function init_autocomplete() { let item_arr = []; if (eq == 'weapon') { for (const weaponType of weapon_keys) { - for (const weapon of itemLists[weaponType]) { - let item_obj = itemMap[weapon]; + for (const weapon of itemLists.get(weaponType)) { + let item_obj = itemMap.get(weapon); if (item_obj["restrict"] && item_obj["restrict"] === "DEPRECATED") { continue; } @@ -176,8 +176,8 @@ function init_autocomplete() { } } } else { - for (const item of itemLists[eq.replace(/[0-9]/g, '')]) { - let item_obj = itemMap[item]; + for (const item of itemLists.get(eq.replace(/[0-9]/g, ''))) { + let item_obj = itemMap.get(item); if (item_obj["restrict"] && item_obj["restrict"] === "DEPRECATED") { continue; } @@ -220,7 +220,7 @@ function init_autocomplete() { class: "scaled-font search-item", selected: "dark-5", element: (item, data) => { - item.classList.add(itemMap[data.value].tier); + item.classList.add(itemMap.get(data.value).tier); }, }, events: { @@ -390,15 +390,7 @@ window.onerror = function(message, source, lineno, colno, error) { }; (async function() { - const start = Date.now(); let load_promises = [ load_init(), load_ing_init(), load_tome_init() ]; await Promise.all(load_promises); - const codestart = Date.now(); init(); - const end = Date.now(); - 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; })(); diff --git a/js/builder_graph.js b/js/builder_graph.js index db7c231..f836986 100644 --- a/js/builder_graph.js +++ b/js/builder_graph.js @@ -154,7 +154,7 @@ class ItemInputNode extends InputNode { let item; if (item_text.slice(0, 3) == "CI-") { item = getCustomFromHash(item_text); } else if (item_text.slice(0, 3) == "CR-") { item = getCraftFromHash(item_text); } - else if (itemMap[item_text]) { item = new Item(itemMap[item_text]); } + else if (itemMap.has(item_text)) { item = new Item(itemMap.get(item_text)); } else if (tomeMap.has(item_text)) { item = new Item(tomeMap.get(item_text)); } if (item) { @@ -1143,6 +1143,5 @@ function builder_graph_init() { // this will propagate the update to the `stat_agg_node`, and then to damage calc console.log("Set up graph"); - INPUT_UPDATE = true; } diff --git a/js/computation_graph.js b/js/computation_graph.js index d32554d..1f13851 100644 --- a/js/computation_graph.js +++ b/js/computation_graph.js @@ -174,24 +174,20 @@ class ValueCheckComputeNode extends ComputeNode { } -let INPUT_UPDATE = false; - /** * Schedule a ComputeNode to be updated. * * @param node : ComputeNode to schedule an update for. */ function calcSchedule(node, timeout) { - if (INPUT_UPDATE) { - if (node.update_task !== null) { - clearTimeout(node.update_task); - } - node.mark_dirty(); - node.update_task = setTimeout(function() { - node.update(); - node.update_task = null; - }, timeout); + if (node.update_task !== null) { + clearTimeout(node.update_task); } + node.mark_dirty(); + node.update_task = setTimeout(function() { + node.update(); + node.update_task = null; + }, timeout); } class PrintNode extends ComputeNode { diff --git a/js/craft.js b/js/craft.js index 59c1446..db30aef 100644 --- a/js/craft.js +++ b/js/craft.js @@ -34,7 +34,7 @@ function getCraftFromHash(hash) { if (version === "1") { let ingreds = []; for (let i = 0; i < 6; i ++ ) { - ingreds.push( expandIngredient(ingMap[ingIDMap[Base64.toInt(name.substring(2*i,2*i+2))]]) ); + ingreds.push( expandIngredient(ingMap.get(ingIDMap.get(Base64.toInt(name.substring(2*i,2*i+2))))) ); } let recipe = expandRecipe(recipeMap.get(recipeIDMap.get(Base64.toInt(name.substring(12,14))))); diff --git a/js/crafter.js b/js/crafter.js index f4f461b..865b740 100644 --- a/js/crafter.js +++ b/js/crafter.js @@ -32,6 +32,15 @@ let player_craft; function init_crafter() { //no ing + + console.log("all ingredients"); + console.log(ingMap); + console.log("all recipes"); + console.log(recipeMap); + /*console.log(ingList); + console.log(recipeList); + console.log(ingIDMap); + console.log(recipeIDMap);*/ try { document.getElementById("recipe-choice").addEventListener("change", (event) => { updateMaterials(); @@ -140,7 +149,7 @@ function calculateCraft() { for (i = 1; i < 7; i++) { console.log("ing-choice-"+i); // console.log(getValue("ing-choice-"+i)); - getValue("ing-choice-" + i) === "" ? ingreds.push(expandIngredient(ingMap["No Ingredient"])) : ingreds.push(expandIngredient(ingMap[getValue("ing-choice-" + i)])); + getValue("ing-choice-" + i) === "" ? ingreds.push(expandIngredient(ingMap.get("No Ingredient"))) : ingreds.push(expandIngredient(ingMap.get(getValue("ing-choice-" + i)))); } let atkSpd = "NORMAL"; //default attack speed will be normal. for (const b of ["slow-atk-button", "normal-atk-button", "fast-atk-button"]) { @@ -205,7 +214,7 @@ function decodeCraft(ing_url_tag) { if (version === "1") { ingreds = []; for (let i = 0; i < 6; i ++ ) { - setValue("ing-choice-"+(i+1), ingIDMap[Base64.toInt(tag.substring(2*i,2*i+2))]); + setValue("ing-choice-"+(i+1), ingIDMap.get(Base64.toInt(tag.substring(2*i,2*i+2)))); //console.log(Base64.toInt(tag.substring(2*i,2*i+2))); } recipe = recipeIDMap.get(Base64.toInt(tag.substring(12,14))); diff --git a/js/customizer.js b/js/customizer.js index a916bca..059a849 100644 --- a/js/customizer.js +++ b/js/customizer.js @@ -331,7 +331,7 @@ function populateFields() { class_list.appendChild(el); } let item_list = document.getElementById("base-list"); - for (const name of Object.keys(itemMap)) { + for (const name of itemMap.keys()) { let el = document.createElement("option"); el.value = name; item_list.appendChild(el); @@ -368,7 +368,7 @@ function useBaseItem(elem) { let baseItem; //Check items db. - for (const [name,itemObj] of Object.entries(itemMap)) { + for (const [name,itemObj] of itemMap) { if (itemName === name) { baseItem = expandItem(itemObj); break; diff --git a/js/display.js b/js/display.js index 0633063..24813a9 100644 --- a/js/display.js +++ b/js/display.js @@ -1871,18 +1871,18 @@ function displayIDProbabilities(parent_id, item, amp) { if (amp != 0) {toggleButton("cork_amp_" + amp)} let item_name = item.get("displayName"); - console.log(itemMap[item_name]) + console.log(itemMap.get(item_name)) let table_elem = document.createElement("table"); parent_elem.appendChild(table_elem); - for (const [id,val] of Object.entries(itemMap[item_name])) { + for (const [id,val] of Object.entries(itemMap.get(item_name))) { if (rolledIDs.includes(id)) { if (!item.get("maxRolls").get(id)) { continue; } let min = item.get("minRolls").get(id); let max = item.get("maxRolls").get(id); //Apply corkian amps if (val > 0) { - let base = val; + let base = itemMap.get(item_name)[id]; if (reversedIDs.includes(id)) {max = Math.max( Math.round((0.3 + 0.05*amp) * base), 1)} else {min = Math.max( Math.round((0.3 + 0.05*amp) * base), 1)} } diff --git a/js/item.js b/js/item.js index d2734cb..4371afe 100644 --- a/js/item.js +++ b/js/item.js @@ -17,15 +17,16 @@ let amp_state = 0; //the level of corkian map used for ID purposes. Default 0. function init_itempage() { //console.log(item_url_tag); + //displayExpandedItem(expandItem(itemMap.get(item_url_tag).statMap, []), "item-view"); try{ - item = expandItem(itemMap[item_url_tag.replaceAll("%20"," ")], []); + item = expandItem(itemMap.get(item_url_tag.replaceAll("%20"," ")), []); if (item.get('category') === 'weapon') { item.set('powders', []); apply_weapon_powders(item); } - displaysq2ExpandedItem(item, "item-view"); - displaysq2AdditionalInfo("additional-info", item); - displaysq2IDCosts("identification-costs", item); + displayExpandedItem(item, "item-view"); + displayAdditionalInfo("additional-info", item); + displayIDCosts("identification-costs", item); if (item.get("set") && sets[item.get("set")]) { displayAllSetBonuses("set-bonus-info",item.get("set")); } diff --git a/js/load.js b/js/load.js index 2f957c0..c425c97 100644 --- a/js/load.js +++ b/js/load.js @@ -7,15 +7,10 @@ let load_complete = false; let load_in_progress = false; let items; let sets = new Map(); -let itemMap = {}; -let idMap = {}; +let itemMap; +let idMap; let redirectMap; -let itemLists = {}; -// List of 'raw' "none" items (No Helmet, etc), in order helmet, chestplate... ring1, ring2, brace, neck, weapon. -for (const it of itemTypes) { - itemLists[it] = []; -} - +let itemLists = new Map(); /* * Load item set from local DB. Calls init() on success. */ @@ -194,6 +189,11 @@ async function load_init() { }); } +// List of 'raw' "none" items (No Helmet, etc), in order helmet, chestplate... ring1, ring2, brace, neck, weapon. +for (const it of itemTypes) { + itemLists.set(it, []); +} + let none_items = [ ["armor", "helmet", "No Helmet"], ["armor", "chestplate", "No Chestplate"], @@ -232,15 +232,27 @@ for (let i = 0; i < none_items.length; i++) { } function init_maps() { - for (const item of items) { - itemLists[item.type].push(item.displayName); - itemMap[item.displayName] = item; - idMap[item.id] = item.displayName; - } - for (const item of none_items) { - itemLists[item.type].push(item.displayName); - itemMap[item.displayName] = item; - idMap[item.id] = ""; - } + //warp + itemMap = new Map(); + /* Mapping from item names to set names. */ + idMap = new Map(); + redirectMap = new Map(); items = items.concat(none_items); + //console.log(items); + for (const item of items) { + if (item.remapID === undefined) { + itemLists.get(item.type).push(item.displayName); + itemMap.set(item.displayName, item); + if (none_items.includes(item)) { + idMap.set(item.id, ""); + } + else { + idMap.set(item.id, item.displayName); + } + } + else { + redirectMap.set(item.id, item.remapID); + } + } + console.log(itemMap); } diff --git a/js/load_ing.js b/js/load_ing.js index 0e8e676..7652efb 100644 --- a/js/load_ing.js +++ b/js/load_ing.js @@ -9,13 +9,13 @@ let iload_complete = false; let ings; let recipes; -let ingMap = {}; +let ingMap = new Map(); let ingList = []; let recipeMap; let recipeList = []; -let ingIDMap = {}; +let ingIDMap = new Map(); let recipeIDMap; /* @@ -178,9 +178,9 @@ function init_ing_maps() { posMods: {"left": 0, "right": 0, "above": 0, "under": 0, "touching": 0, "notTouching": 0}, id: 4000 }; - ingMap[ing.displayName] = ing; + ingMap.set(ing.displayName, ing); ingList.push(ing.displayName); - ingIDMap[ing.id] = ing.displayName; + ingIDMap.set(ing.id, ing.displayName); let numerals = new Map([[1, "I"], [2, "II"], [3, "III"], [4, "IV"], [5, "V"], [6, "VI"]]); for (let i = 0; i < 5; i ++) { for (const powderIng of powderIngreds) { @@ -215,17 +215,17 @@ function init_ing_maps() { ing.itemIDs["agiReq"] = powderIng["skpReq"]; break; } - ingMap[ing.displayName] = ing; + ingMap.set(ing.displayName, ing); ingList.push(ing.displayName); - ingIDMap[ing.id] = ing.displayName; + ingIDMap.set(ing.id, ing.displayName); } } for (const ing of ings) { - ingMap[ing.displayName] = ing; + ingMap.set(ing.displayName, ing); ingList.push(ing.displayName); - ingIDMap[ing.id] = ing.displayName; + ingIDMap.set(ing.id, ing.displayName); } for (const recipe of recipes) { recipeMap.set(recipe.name, recipe); diff --git a/js/skillpoints.js b/js/skillpoints.js index 9ce7b7c..4faceff 100644 --- a/js/skillpoints.js +++ b/js/skillpoints.js @@ -1,5 +1,5 @@ function calculate_skillpoints(equipment, weapon) { - const start = Date.now(); + const start = performance.now(); // Calculate equipment equipping order and required skillpoints. // Return value: [equip_order, best_skillpoints, final_skillpoints, best_total]; let fixed = []; @@ -211,7 +211,7 @@ function calculate_skillpoints(equipment, weapon) { // best_skillpoints: manually assigned (before any gear) // final_skillpoints: final totals (5 individ) // best_total: total skillpoints assigned (number) - const end = Date.now(); + const end = performance.now(); const output_msg = `skillpoint calculation took ${(end-start)/ 1000} seconds.`; console.log(output_msg); document.getElementById('stack-box').textContent += output_msg;