/// /// /// /// /// module Elements.InventoryHandler { var container = document.getElementById("inventoryTarget"); function empty () { while (container.firstChild) { container.removeChild(container.firstChild); } } function printHeader (header : string) { let p = document.createElement("p"); p.classList.add("inventoryHeader"); p.appendChild(document.createTextNode(header + ":")); container.appendChild(p); } let currentRow : HTMLElement; export let LinkingThing = new Rulebook("Inventory - Links for a Thing"); export function printThingLink (shortcut : string, action : Action) { let nameLink = document.createElement("div"); nameLink.classList.add("inventoryLink"); nameLink.appendChild(document.createTextNode(shortcut)); currentRow.appendChild(nameLink); Controls.Links.makeLink(nameLink, action); } async function printThing (thing : Thing) { currentRow = document.createElement("div"); currentRow.classList.add("inventoryRow"); let nameLink = document.createElement("div"); nameLink.classList.add("inventoryLink", "name"); nameLink.appendChild(document.createTextNode(thing.getPrintedName())); currentRow.appendChild(nameLink); Controls.Links.makeLink(nameLink, new ActionExamine(WorldState.player, thing)); await LinkingThing.execute({noun : thing}); container.appendChild(currentRow); } export function thingSort (a : Thing, b : Thing) { let na = a.getPrintedName().toLowerCase(); let nb = b.getPrintedName().toLowerCase(); if (na < nb) return -1; if (na > nb) return 1; return 0; } export async function updateInventory () { let player = WorldState.player; empty(); let wielded = Thing.WieldRelation.getRight(player).sort(thingSort); let worn = Thing.WearRelation.getRight(player).sort(thingSort); let carried = Thing.CarryRelation.getRight(player).sort(thingSort); if (wielded.length > 0) { printHeader("Wielded"); for (let i = 0; i < wielded.length; i++) { await printThing(wielded[i]); } } if (worn.length > 0) { printHeader("Worn"); for (let i = 0; i < worn.length; i++) { await printThing(worn[i]); } } if (carried.length > 0) { printHeader("Carried"); for (let i = 0; i < carried.length; i++) { await printThing(carried[i]); } } let pouch = > Thing.CarryRelation.getRightType(WorldState.player, CoinPouch); if (pouch.length > 0) { let p = document.createElement("p"); p.classList.add("inventoryGold"); let s : Say; if (pouch[0].getCoins() > 0) { s = new Say("There are " + pouch[0].getCoins().toString() + " coins in your ", pouch[0], "."); } else { s = new Say("There are no coins in your ", pouch[0], "."); } await s.getPureElements().then(elements => { elements.forEach(element => { p.appendChild(element); }); }); container.appendChild(p); } } }