/
utilities-compiled.js.map
1 lines (1 loc) · 20.9 KB
/
utilities-compiled.js.map
1
{"version":3,"sources":["utilities.js"],"names":[],"mappings":"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","file":"utilities-compiled.js","sourcesContent":["/**\n * Return a formatted number for inventory/shop use.\n * This is the worst code I've ever seen and I didn't write it.\n * I have absolutely no idea how it works. I just sort of replaced some vars\n * with lets and prayed to the various gods until it worked.\n */\nfunction numberToString(n) {\n\n function triplets(n){let c='',m=0;\n if (100<=n) {m=Math.floor(n/100);c+=triplets(m)+' Hundred';n-=m*100}\n n.toString().replace(/^[2-9](?=\\d)/,function(a){\n c+=(m?' and ':' ')+('Twenty,Thirty,Forty,Fifty,Sixty,Seventy,Eighty,Ninety'.split(',')[a-2]);n-=(+a)*10});\n if (n==0) return c;else if (c && n<10) c+='-';\n return c+' '+'One,Two,Three,Four,Five,Six,Seven,Eight,Nine,Ten,Eleven,Twelve,Thirteen,Fourteen,Fifteen,Sixteen,Seventeen,Eighteen,Nineteen'.split(',')[n-1];\n }\n\n function anyNumber(n){let lng,isS,chn='';\n let wds=',Thousand,Million,Thousand Million'.split(',');\n n.toString().replace(/(\\d{1,3})(?=((\\d\\d\\d)*)$)/g,function(a,b,c){\n lng=c.toString().length/3;\n let m = a.replace(/^0+/,'');\n isS=triplets(m);\n if (isS) chn+=((!lng) && m<100 && /Thousand$/.test(chn)?' and ':' ')+isS.replace(/- /g,'-')+' '+wds[lng];\n });\n return chn.replace(/\\s+/g,' ');\n }\n\n return anyNumber(n);\n}\n\n\n/** Load the save state from LocalStorage or similar. */\nfunction getSaveState() {\n return new Player(\"Bede\", DEFAULT_LOCATION, DEFAULT_MONEY, DEFAULT_HINTS);\n}\n\n\n/** Returns an array of all option-cards currently onscreen. */\nfunction currentOptionCards() {\n return [...$(\".option-card\")];\n}\n\n\n/** Returns an array of all inventory items currently onscreen. */\nfunction currentInventoryItems() {\n return [...$(\".inventory-item\")]\n}\n\n\n/** Add an option card to the screen. */\nfunction addOptionCard(option) {\n let card = $(`<button class=\"option-card\">${option.buttonText}</button>`);\n card.click(option.onClick);\n $(\"#options\").append(card);\n}\n\n\nfunction removeOptionCardWithName(name, noAnimate) {\n \"use strict\";\n let optionCards = currentOptionCards();\n for (let x of optionCards) {\n if (x.innerHTML == name) {\n if (!noAnimate) {\n $(x).fadeOut(500, () => x.remove());\n } else x.remove();\n break;\n }\n }\n}\n\n\n/**\n * Updates the location information on-screen.\n */\nfunction updateLocation() {\n \"use strict\";\n let location = g.player.location;\n $(\"title\").text(location.name);\n $(\"#location-header\").text(location.name);\n $(\"#location-description1\").text(location.descA);\n $(\"#location-description2\").text(location.descB);\n}\n\n\n/**\n * Update the options cards, inventory items and text on-screen.\n */\nfunction updateDisplayNoAnimate() {\n \"use strict\";\n /* Update the options cards. */\n let player = g.player, inventory = g.inventory;\n currentOptionCards().forEach(c => c.remove());\n player.getOptions().forEach(o => addOptionCard(o));\n\n /* Update the inventory items. */\n inventory.updateAll();\n\n /* Update the location information, description and page title. */\n updateLocation();\n}\n\n\n/**\n * Clear the current screen of option cards, and add all the new ones.\n */\nfunction updateDisplay(noAnimate) {\n if (!noAnimate) {\n $(\"#main-content\").fadeOut(500, ()=>{\n updateDisplayNoAnimate();\n $(\"#main-content\").fadeIn(500, ()=>{});\n });\n } else {\n updateDisplayNoAnimate();\n }\n}\n\n\nfunction divmod(x, y) {\n let div = Math.trunc(x/y);\n let rem = x % y;\n return [div, rem];\n}\n\n\nfunction priceFromPennies(n) {\n \"use strict\";\n let [pounds, pence] = divmod(n, 100);\n if (pounds && pence) {\n return numberToString(pounds) + \" Pounds, \" + numberToString(pence) + \" Pence\";\n } else if(pounds) {\n return numberToString(pounds) + \" Pounds\";\n } else if (pence) {\n return numberToString(pence) + \" Pence\";\n } else {\n return \"Free of Charge or Obligation\"\n }\n\n}\n\n\n/**\n HTML Structure for traders\n li.trader\n h3.trader-name\n p.trader-description\n h5.trader-subheading & buy\n table.trader-table & buy\n tbody\n tr\n td.product-name\n td.product-price\n h5.trader-subheading & sell\n table.trader-table & sell\n tbody\n tr\n td.product-price\n td.product-name\n h5.trader-subheading & trade\n table.trader-table & trade\n tbody\n tr\n td.product-name\n td.product-price\n*/\n\n\nfunction failToBuy(product) {\n \"use strict\";\n g.ledger.write(\n `Looks like you don't have enough to buy the ${product.product.name}.`\n );\n}\n\n\nfunction failToSell(product) {\n \"use strict\";\n g.ledger.write(\n `Looks like you don't have the ${product.product.name} to sell.`\n )\n}\n\n\nfunction tryToBuy(saleInfo) {\n \"use strict\";\n if (g.player.hasMoney(saleInfo.price)) {\n g.player.removeMoney(saleInfo.price);\n let product = new ItemStack(\n saleInfo.multipack,\n saleInfo.product\n );\n g.ledger.write(\n `You buy ${product.toString()} for \n ${priceFromPennies(saleInfo.price)}`\n );\n g.player.addItemStack(product);\n\n } else {\n failToBuy(saleInfo);\n }\n}\n\n\nfunction tryToSell(saleInfo) {\n \"use strict\";\n if (g.player.hasItemWithName(saleInfo.product.name, saleInfo.multipack)) {\n let product = new ItemStack(\n saleInfo.multipack, saleInfo.product\n );\n g.player.removeItemStack(product);\n g.player.addMoney(saleInfo.price);\n g.ledger.write(`You sell ${product.toString()} for\n ${priceFromPennies(saleInfo.price)}`);\n g.inventory.updateAllNoAnimate();\n } else {\n failToSell(saleInfo);\n }\n}\n\n\nfunction failToTrade(tradeInfo) {\n \"use strict\";\n g.ledger.write(\n `Looks like you don't have the ${tradeInfo.price.name} to trade.`\n )\n}\n\n\nfunction tryToTrade(tradeInfo) {\n \"use strict\";\n let price = new ItemStack(\n tradeInfo.priceMultipack,\n tradeInfo.price\n );\n if (g.player.hasItemStack(price)) {\n let product = new ItemStack(\n tradeInfo.productMultipack,\n tradeInfo.product\n );\n g.player.removeItemStack(price);\n g.player.addItemStack(product);\n\n g.ledger.write(`You trade ${price.toString()} in exchange for ${product.toString()}`);\n\n g.inventory.updateAllNoAnimate();\n } else {\n failToTrade(tradeInfo);\n }\n}\n\n\n/**\n * Add a trader's information to the list of traders.\n */\nfunction addTrader(traderInfo) {\n \"use strict\";\n let traders = $(\".traders\");\n let trader = $(`<li class=\"trader\"></li>`);\n let name = $(`<h3 class=\"trader-name\">${traderInfo.title}</h3>`);\n trader.append(name);\n\n let description = $(`<p class=\"trader-description\"></p>`);\n description.html(`\"${traderInfo.description}\"`);\n trader.append(description);\n console.log(traderInfo);\n if (traderInfo.willSell.length !== 0) {\n let buySubheading = $(`<h5>Buy</h5>`);\n trader.append(buySubheading);\n\n let table = $(`<table class=\"u-full-width trader-table buy\"></table>`);\n let tbody = $(`<tbody></tbody>`);\n for (let productToSell of traderInfo.willSell) {\n let tr = $(`<tr></tr>`);\n let productName = $(`<td class=\"product-name\"></td>`);\n productName.text(`${productToSell.multipack} x ${productToSell.product.name}`);\n tr.append(productName);\n\n let button = $(`<td><a class=\"buy-button\" href=\"#\">-></a></td>`);\n button.click(() => {\n tryToBuy(productToSell);\n });\n tr.append(button);\n\n let productPrice = $(`<td class=\"product-price\"></td>`);\n productPrice.text(priceFromPennies(productToSell.price));\n tr.append(productPrice);\n tbody.append(tr);\n }\n\n tbody.html();\n table.html(tbody);\n trader.append(table);\n }\n\n if (traderInfo.willBuy.length !== 0) {\n let sellSubheading = $(`<h5>Sell</h5>`);\n trader.append(sellSubheading);\n\n let table = $(`<table class=\"u-full-width trader-table sell\"></table>`);\n let tbody = $(`<tbody></tbody>`);\n for (let productToBuy of traderInfo.willBuy) {\n let tr = $(`<tr></tr>`);\n\n let productPrice = $(`<td class=\"product-price\"></td>`);\n productPrice.text(priceFromPennies(productToBuy.price));\n tr.append(productPrice);\n\n let button = $(`<td><a class=\"sell-button\" href=\"#\"><-</a></td>`);\n button.click(() => {\n tryToSell(productToBuy)\n });\n tr.append(button);\n\n let productName = $(`<td class=\"product-name\"></td>`);\n productName.text(`${productToBuy.multipack} x ${productToBuy.product.name}`);\n tr.append(productName);\n\n tbody.append(tr);\n }\n\n table.html(tbody);\n trader.append(table);\n }\n\n if (traderInfo.willTrade.length !== 0) {\n let tradeSubheading = $(`<h5>Trade</h5>`);\n trader.append(tradeSubheading);\n\n let table = $(`<table class=\"u-full-width trader-table trades\"></table>`);\n let tbody = $(`<tbody></tbody>`);\n for (let tradeInfo of traderInfo.willTrade) {\n let tr = $(`<tr></tr>`);\n\n let product = $(`<td class=\"product-price\"></td>`);\n product.html(`${tradeInfo.productMultipack} x ${tradeInfo.product.name}`);\n tr.append(product);\n\n let button = $(`<td><a class=\"trade-button\" href=\"#\"><-></a></td>`);\n button.click(() => {\n tryToTrade(tradeInfo);\n });\n tr.append(button);\n\n let price = $(`<td class=\"product-name\"></td>`);\n price.html(`${tradeInfo.priceMultipack} x ${tradeInfo.price.name}`);\n tr.append(price);\n\n tbody.append(tr);\n }\n\n table.html(tbody);\n trader.append(table);\n }\n\n traders.append(trader);\n }\n\n\n/**\n * Load data about each trader into the trading interface.\n */\nfunction loadTraders() {\n \"use strict\";\n let traders = $(\".traders\");\n traders.html(\"\");\n for (let trader of g.player.location.traders) {\n if (trader.isVisible()) addTrader(trader);\n }\n}\n\n\n/**\n * Load the data about the current location into the trading interface.\n */\nfunction loadTrading() {\n \"use strict\";\n let location = g.player.location.name;\n let backButton = `<span onclick=\"exitTrading();\">Exit</span>`;\n let html = `${location} | ${backButton}`;\n $(\".trading-title\").html(html);\n loadTraders();\n}\n\n\n/**\n * Replace the main interface with the trading interface.\n */\nfunction enterTrading() {\n $(\"#main-content\").fadeOut(500, () => {\n loadTrading();\n $(\"#trading\").fadeIn(500);\n });\n}\n\n\n/**\n * Replace the trading interface with the main interface.\n */\nfunction exitTrading() {\n \"use strict\";\n $(\"#trading\").fadeOut(500, () => {\n updateDisplayNoAnimate();\n $(\"#main-content\").fadeIn(500);\n });\n}\n\n\nfunction randomPop(set) {\n \"use strict\";\n let array = Array.from(set);\n let randNo = Math.floor(Math.random() * array.length);\n let elem = array[randNo];\n set.delete(elem);\n return elem;\n}\n\n\nfunction useHint() {\n \"use strict\";\n g.player.removeItemWithName(\"Whispered Hint\");\n let hint = randomPop(g.player.hints);\n if (hint) hint(g);\n g.inventory.updateAllNoAnimate();\n}"]}