/// /// module Elements.HyperlinkHandler { export var linkedActionsTab = document.getElementById("linkActions"); export var commonActionsTab = document.getElementById("commonActionsTab"); var currentCommand = document.createTextNode(""); document.getElementById("currentCommand").appendChild(currentCommand); var currentActionTarget = document.createTextNode(""); document.getElementById("linkTarget").appendChild(currentActionTarget); var commonActions = []; var availableActions = []; export function resetCommonActions () { commonActions.splice(0, commonActions.length); while (commonActionsTab.firstChild) { commonActionsTab.removeChild(commonActionsTab.firstChild); } } export function addCommonAction (name : string, action : Action) { commonActions.push([name, action]); } function resetAvailableActions () { availableActions = []; currentActionTarget.nodeValue = ""; while (linkedActionsTab.firstChild) { linkedActionsTab.removeChild(linkedActionsTab.firstChild); } } export function addAvailableAction (name : string, action : Action) { availableActions.push([name, action]); } export function hoverAction (action : Action) { currentCommand.nodeValue = action.getCommandText().toLowerCase(); } export function unhoverAction () { currentCommand.nodeValue = ""; } export async function hyperlinkObject (thing? : any) { resetAvailableActions(); if (thing instanceof Thing && thing != WorldState.player) { await HyperlinkingRulebook.execute({noun: thing}); if (availableActions.length > 0) { currentActionTarget.nodeValue = thing.getPrintedName() + ": "; for (let i = 0, value = availableActions[i]; value != undefined; value = availableActions[++i]) { let link = createLink(value); link.classList.add("columnLink"); Controls.KeyHandler.applyCode(link, Controls.KeyHandler.getSecondKeyCode()); linkedActionsTab.appendChild(link); } } } } function createLink (value : Array) { let link = document.createElement("a"); link.appendChild(document.createTextNode(value[0])); Controls.Links.makeLink(link, value[1]); return link; } export async function hyperlinkCommonActions () { resetCommonActions(); await CommonActionsRulebook.execute({}); for (let i = 0, value = commonActions[i]; value != undefined; value = commonActions[++i]) { let link = createLink(value); link.classList.add("lineLink"); Controls.KeyHandler.applyCode(link, Controls.KeyHandler.getThirdKeyCode()); commonActionsTab.appendChild(link); } } /** * The hyperlinking rulebook is ran over the last thing the player interacted with. * It populates the hyperlinks tab with information on the thing that was interacted with. * @type {Rulebook} */ export var HyperlinkingRulebook = new Rulebook("Hyperlinking something"); /** * The common actions rulebook serves to set up all the available common actions for the player. * It should check the player's current state to see if a command is applicable and * then ADD said command to the HyperlinkHandler. * @type {Rulebook} */ export var CommonActionsRulebook = new Rulebook("Common Actions Rulebook"); }