///
///
module Elements {
export var animationTime = 1000;
export var isMobile = /Mobi/i.test(navigator.userAgent); // This correctly lets Mobile users who requested the Desktop app or are on a sufficiently big tablet to get the right desktop version
export var screenWidth = document.body.clientWidth;
export var screenHeight = document.body.clientHeight;
export function getLinkElements (image? : boolean) {
if (CurrentTurnHandler == undefined) return [];
if (CurrentTurnHandler.isTurn() || image) {
return [CurrentTurnHandler.currentTurnTab];
} else {
return [HyperlinkHandler.linkedActionsTab, RoomHandler.currentRoomTab, HyperlinkHandler.commonActionsTab, CurrentTurnHandler.currentTurnTab, RoomHandler.currentRoomExits];
}
}
export function updateScreenSize () {
screenWidth = document.body.clientWidth;
screenHeight = document.body.clientHeight;
}
export var mainPage = document.getElementById("mainPage");
/**
* Adds the blur effect to the screen
*/
export function startTurn () {
mainPage.classList.add("turn");
}
/**
* Remove the blur effect from the screen
*/
export function endTurn () {
mainPage.classList.remove("turn");
}
/**
* Are we currently in a turn?
* @returns {boolean}
*/
export function isInTurn () {
return mainPage.classList.contains("turn");
}
let menuOutsideofTurn = false;
let menus = 0;
export function startMenu () {
if (!isInTurn()) {
menuOutsideofTurn = true;
startTurn();
}
mainPage.classList.add("mainmenu");
menus++;
Elements.CurrentTurnHandler.clear();
Controls.KeyHandler.reset();
}
export function endMenu () {
Elements.CurrentTurnHandler.clear();
if (--menus == 0) {
if (menuOutsideofTurn) {
endTurn();
}
resetMenus();
}
}
export function resetMenus () {
if (menus != 0) {
console.error("A menu wasn't finished properly. Please correct the dialogue.");
}
menus = 0;
menuOutsideofTurn = false;
mainPage.classList.remove("mainmenu");
}
export function clearMainScreen () {
Elements.CurrentTurnHandler.clear();
}
let loadingScreen = document.getElementById("loadingScreen");
export function stopLoading () {
document.body.removeChild(loadingScreen);
}
export async function waitForAnyKey () {
let say = new Say(Say.CENTERED, new SayBold("Press any key to continue."));
let elements = await say.getHTML("p", ["content"]);
Elements.CurrentTurnHandler.print(...elements);
await Controls.KeyHandler.getNextKey();
Elements.CurrentTurnHandler.unprint(...elements);
}
export async function waitForSpaceKey () {
let say = new Say(Say.CENTERED, new SayBold("Press Space to continue."));
let elements = await say.getHTML("p", ["content"]);
Elements.CurrentTurnHandler.print(...elements);
let lastKey = "notSpace";
while (lastKey != "Space" && lastKey != "Click") {
lastKey = (await Controls.KeyHandler.getNextKey()).evCode;
}
Elements.CurrentTurnHandler.unprint(...elements);
}
export function printObeliskLogo () {
let say = new Say(Say.CENTERED, new SayImage("introLogo"), Say.LINE_BREAK, new SayItalic("The Obelisk is an adult interactive fiction game set in a post-apocalyptic world ravaged by a magical structure."));
Elements.CurrentTurnHandler.printAsContent(say);
}
}
if (Elements.isMobile) {
Elements.mainPage.classList.add("mobile");
}
window.addEventListener("resize", function () {
Elements.updateScreenSize();
});
module MachineBegins {
export let HideLoadingDivRule = MachineBegins.rulebook.createAndAddRule({
name : "Hide loading div",
code : runner => {
Elements.stopLoading();
}
});
}
module TurnSequence {
export let LazilyFixMenus = TurnSequence.rulebook.createAndAddRule({
name : "Fix menus that were never closed because the dev is stupid",
firstPriority : Rule.PRIORITY_LOWEST,
priority : Rule.PRIORITY_LOWEST,
code : () => {
Elements.resetMenus();
}
})
}