/******/ (function(modules) { // webpackBootstrap /******/ // install a JSONP callback for chunk loading /******/ function webpackJsonpCallback(data) { /******/ var chunkIds = data[0]; /******/ var moreModules = data[1]; /******/ var executeModules = data[2]; /******/ /******/ // add "moreModules" to the modules object, /******/ // then flag all "chunkIds" as loaded and fire callback /******/ var moduleId, chunkId, i = 0, resolves = []; /******/ for(;i < chunkIds.length; i++) { /******/ chunkId = chunkIds[i]; /******/ if(Object.prototype.hasOwnProperty.call(installedChunks, chunkId) && installedChunks[chunkId]) { /******/ resolves.push(installedChunks[chunkId][0]); /******/ } /******/ installedChunks[chunkId] = 0; /******/ } /******/ for(moduleId in moreModules) { /******/ if(Object.prototype.hasOwnProperty.call(moreModules, moduleId)) { /******/ modules[moduleId] = moreModules[moduleId]; /******/ } /******/ } /******/ if(parentJsonpFunction) parentJsonpFunction(data); /******/ /******/ while(resolves.length) { /******/ resolves.shift()(); /******/ } /******/ /******/ // add entry modules from loaded chunk to deferred list /******/ deferredModules.push.apply(deferredModules, executeModules || []); /******/ /******/ // run deferred modules when all chunks ready /******/ return checkDeferredModules(); /******/ }; /******/ function checkDeferredModules() { /******/ var result; /******/ for(var i = 0; i < deferredModules.length; i++) { /******/ var deferredModule = deferredModules[i]; /******/ var fulfilled = true; /******/ for(var j = 1; j < deferredModule.length; j++) { /******/ var depId = deferredModule[j]; /******/ if(installedChunks[depId] !== 0) fulfilled = false; /******/ } /******/ if(fulfilled) { /******/ deferredModules.splice(i--, 1); /******/ result = __webpack_require__(__webpack_require__.s = deferredModule[0]); /******/ } /******/ } /******/ /******/ return result; /******/ } /******/ /******/ // The module cache /******/ var installedModules = {}; /******/ /******/ // object to store loaded and loading chunks /******/ // undefined = chunk not loaded, null = chunk preloaded/prefetched /******/ // Promise = chunk loading, 0 = chunk loaded /******/ var installedChunks = { /******/ "app": 0 /******/ }; /******/ /******/ var deferredModules = []; /******/ /******/ // The require function /******/ function __webpack_require__(moduleId) { /******/ /******/ // Check if module is in cache /******/ if(installedModules[moduleId]) { /******/ return installedModules[moduleId].exports; /******/ } /******/ // Create a new module (and put it into the cache) /******/ var module = installedModules[moduleId] = { /******/ i: moduleId, /******/ l: false, /******/ exports: {} /******/ }; /******/ /******/ // Execute the module function /******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__); /******/ /******/ // Flag the module as loaded /******/ module.l = true; /******/ /******/ // Return the exports of the module /******/ return module.exports; /******/ } /******/ /******/ /******/ // expose the modules object (__webpack_modules__) /******/ __webpack_require__.m = modules; /******/ /******/ // expose the module cache /******/ __webpack_require__.c = installedModules; /******/ /******/ // define getter function for harmony exports /******/ __webpack_require__.d = function(exports, name, getter) { /******/ if(!__webpack_require__.o(exports, name)) { /******/ Object.defineProperty(exports, name, { enumerable: true, get: getter }); /******/ } /******/ }; /******/ /******/ // define __esModule on exports /******/ __webpack_require__.r = function(exports) { /******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) { /******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' }); /******/ } /******/ Object.defineProperty(exports, '__esModule', { value: true }); /******/ }; /******/ /******/ // create a fake namespace object /******/ // mode & 1: value is a module id, require it /******/ // mode & 2: merge all properties of value into the ns /******/ // mode & 4: return value when already ns object /******/ // mode & 8|1: behave like require /******/ __webpack_require__.t = function(value, mode) { /******/ if(mode & 1) value = __webpack_require__(value); /******/ if(mode & 8) return value; /******/ if((mode & 4) && typeof value === 'object' && value && value.__esModule) return value; /******/ var ns = Object.create(null); /******/ __webpack_require__.r(ns); /******/ Object.defineProperty(ns, 'default', { enumerable: true, value: value }); /******/ if(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key)); /******/ return ns; /******/ }; /******/ /******/ // getDefaultExport function for compatibility with non-harmony modules /******/ __webpack_require__.n = function(module) { /******/ var getter = module && module.__esModule ? /******/ function getDefault() { return module['default']; } : /******/ function getModuleExports() { return module; }; /******/ __webpack_require__.d(getter, 'a', getter); /******/ return getter; /******/ }; /******/ /******/ // Object.prototype.hasOwnProperty.call /******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); }; /******/ /******/ // __webpack_public_path__ /******/ __webpack_require__.p = ""; /******/ /******/ var jsonpArray = window["webpackJsonp"] = window["webpackJsonp"] || []; /******/ var oldJsonpFunction = jsonpArray.push.bind(jsonpArray); /******/ jsonpArray.push = webpackJsonpCallback; /******/ jsonpArray = jsonpArray.slice(); /******/ for(var i = 0; i < jsonpArray.length; i++) webpackJsonpCallback(jsonpArray[i]); /******/ var parentJsonpFunction = oldJsonpFunction; /******/ /******/ /******/ // add entry module to deferred list /******/ deferredModules.push(["./src/main.ts","vendors"]); /******/ // run deferred modules when ready /******/ return checkDeferredModules(); /******/ }) /************************************************************************/ /******/ ({ /***/ "./src/Game/GameExtensions/PhaserSprite.ts": /*!*************************************************!*\ !*** ./src/Game/GameExtensions/PhaserSprite.ts ***! \*************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); class PhaserSprite { constructor(sprite) { this.sprite = sprite; } setOrigin(x, y) { this.sprite.setOrigin(x, y); } setFrame(frameIndex) { this.sprite.setFrame(frameIndex); } setTexture(textureKey, frameIndex) { this.sprite.setTexture(textureKey, frameIndex); } setDepth(depth) { this.sprite.setDepth(depth); } setX(x) { this.sprite.setX(x); } setY(y) { this.sprite.setY(y); } setVisible(visible) { this.sprite.setVisible(visible); } animate(key) { this.sprite.anims.play(key, true); } destroy() { this.sprite.destroy(); } isVisible() { return this.sprite.visible; } getSpriteKey() { return this.sprite.texture.key; } setInteractiveWithPointer() { this.sprite.setInteractive({ useHandCursor: true }); } } exports.PhaserSprite = PhaserSprite; /* Sprite depth values: <10 - background 10-20 sprites 100+ - hud */ /***/ }), /***/ "./src/Game/GameMap/GameMap.ts": /*!*************************************!*\ !*** ./src/Game/GameMap/GameMap.ts ***! \*************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); const GameMapCell_1 = __webpack_require__(/*! ./GameMapCell */ "./src/Game/GameMap/GameMapCell.ts"); const MapCellResolver_1 = __webpack_require__(/*! ./MapCellResolver */ "./src/Game/GameMap/MapCellResolver.ts"); const Items_1 = __webpack_require__(/*! ../Items */ "./src/Game/Items/index.ts"); const DummySprite_1 = __webpack_require__(/*! ./Tests/Testability/DummySprite */ "./src/Game/GameMap/Tests/Testability/DummySprite.ts"); class GameMap { constructor(player) { this.secretMountainKeyboardEnabled = false; this.mapCells = new Map(); this.player = player; player.moveOnGrid({ X: 49, Y: 49 }); this.mapCellResolver = new MapCellResolver_1.MapCellResolver(player); } canPlayerTeleport() { return this.player.hasTeleport(); } getCurrentBiome() { return this.getCell(this.player.getGridCoordinates()).getGameMapCellState(); } addMapCell(mapCell, tileSprite, moveableTargetSprite) { const gridCoordinates = { X: mapCell.X, Y: mapCell.Y }; if (this.hasCell(gridCoordinates)) { throw `Cell already exists in map at X:${mapCell.X} - Y:${mapCell.Y}`; } this.mapCells.set(`${gridCoordinates.X},${gridCoordinates.Y}`, new GameMapCell_1.GameMapCell(mapCell, tileSprite, moveableTargetSprite)); } getCell(gridCoordinates) { if (this.hasCell(gridCoordinates)) { return this.mapCells.get(`${gridCoordinates.X},${gridCoordinates.Y}`); } } addItemToCell(gridCoordinates, item) { const cell = this.getCell(gridCoordinates); if (cell) { cell.addItemToCell(item); } else { throw new Error(`Failed to get cell ${gridCoordinates.X}:${gridCoordinates.Y} for item ${item} to add.`); } } onClick(gridCoordinates, callback) { if (this.secretMountainKeyboardEnabled) { if (gridCoordinates.X === 22 && gridCoordinates.Y === 12) { this.player.moveOnGrid({ X: 54, Y: 9 }); this.onPlayerMoved(this.getCell({ X: 54, Y: 9 })); callback(68, new Items_1.Item(Items_1.ItemType.None, new DummySprite_1.DummySprite())); return; } if (gridCoordinates.X === 80 && gridCoordinates.Y === 23) { this.player.moveOnGrid({ X: 54, Y: 9 }); this.onPlayerMoved(this.getCell({ X: 54, Y: 9 })); callback(68, new Items_1.Item(Items_1.ItemType.None, new DummySprite_1.DummySprite())); return; } if (gridCoordinates.X === 53 && gridCoordinates.Y === 9) { this.player.moveOnGrid({ X: 22, Y: 13 }); this.onPlayerMoved(this.getCell({ X: 22, Y: 13 })); callback(68, new Items_1.Item(Items_1.ItemType.None, new DummySprite_1.DummySprite())); return; } } const playerCell = this.getCell(this.player.getGridCoordinates()); const targetCell = this.getCell(gridCoordinates); if (targetCell) { if (this.mapCellResolver.canMove(playerCell, targetCell)) { this.player.moveOnGrid(gridCoordinates); this.onPlayerMoved(targetCell); targetCell.onPlayerEnter(this.player, (eventId, item) => { this.raiseGameEvent(eventId, item, callback); }); } } } enableKeyBoardTeleportForSecretMountain() { this.secretMountainKeyboardEnabled = true; } raiseGameEvent(eventId, item, callback) { switch (eventId) { case 1: // xray open up lab 31,40 to sprite 107 const gateCell = this.getCell({ X: 31, Y: 40 }); gateCell.changeTileSprite(107); break; case 51: // fuel found if (this.player.hasAllFuel()) { callback(52, item); } break; case 100: // found left peak if (!this.player.FoundLeftPeak && !this.player.FoundRightPeak) { callback(102, item); // first peak discovery } this.player.FoundLeftPeak = true; if (this.player.FoundLeftPeak && this.player.FoundRightPeak && !this.player.FoundBothPeaks) { this.player.FoundBothPeaks = true; callback(103, item); // second peak discovery } break; case 101: // found right peak if (!this.player.FoundLeftPeak && !this.player.FoundRightPeak) { callback(102, item); // first peak discovery } this.player.FoundRightPeak = true; if (this.player.FoundLeftPeak && this.player.FoundRightPeak && !this.player.FoundBothPeaks) { this.player.FoundBothPeaks = true; callback(103, item); // second peak discovery } break; case 69: // home cell if (this.player.hasAllFuel()) { callback(70, new Items_1.Item(Items_1.ItemType.None, new DummySprite_1.DummySprite())); } break; default: callback(eventId, item); break; } } getCellPercentage() { let discoveredCount = 0; this.mapCells.forEach((cell) => { if (cell.isDiscovered()) { discoveredCount++; } }); if (discoveredCount === 788) { return 100; } return Math.floor((discoveredCount / 788) * 100); } useItem(itemType) { const playerCell = this.getCell(this.player.getGridCoordinates()); let tileBroke; if (itemType === Items_1.ItemType.Shovel && this.player.hasShovel()) { tileBroke = this.mapCellResolver.digTile(playerCell); } if (itemType === Items_1.ItemType.Hammer && this.player.hasHammer()) { if (!this.mapCellResolver.mineTile(playerCell)) { return false; } tileBroke = true; const cellsToHammer = this.getNeighbourCells(playerCell, 1); cellsToHammer.forEach((cell) => { this.mapCellResolver.mineTile(cell); }); } if (itemType === Items_1.ItemType.Recall && this.player.hasRecall()) { this.player.moveOnGrid({ X: 49, Y: 49 }); } this.discoverNeighbourCells(playerCell); return tileBroke; } keyboardMove(moveOnX, moveOnY, callback) { const playerCoords = this.player.getGridCoordinates(); this.onClick({ X: playerCoords.X + moveOnX, Y: playerCoords.Y + moveOnY }, callback); } getPlayerGridCoordinates() { return this.player.getGridCoordinates(); } discoverCell(gridCoordinates) { let cell = this.getCell(gridCoordinates); cell.makeVisible(); } onPlayerMoved(movedCell) { this.discoverNeighbourCells(movedCell); } discoverNeighbourCells(movedCell) { this.removeMoveableTargetsOnAllCells(); const neighbourCells = this.getNeighbourCells(movedCell, this.player.getViewRange()); neighbourCells.forEach((cell) => { if (this.mapCellResolver.canSee(movedCell, cell, this.player.getViewRange())) { cell.makeVisible(); if (!this.player.hasTeleport()) { this.addMoveableTarget(movedCell, cell); } } }); } getNeighbourCells(gameMapCell, neighbourRange) { const cells = []; for (let i = -neighbourRange; i < neighbourRange + 1; i++) { for (let j = -neighbourRange; j < neighbourRange + 1; j++) { const neighbourCell = this.getCell({ X: i + gameMapCell.getGridCoordinates().X, Y: j + gameMapCell.getGridCoordinates().Y, }); if (neighbourCell) { cells.push(neighbourCell); } } } return cells; } addMoveableTarget(movedCell, neighbourCell) { if (movedCell.getGridCoordinates().X === neighbourCell.getGridCoordinates().X && movedCell.getGridCoordinates().Y === neighbourCell.getGridCoordinates().Y) { return; } if (this.mapCellResolver.canMove(movedCell, neighbourCell)) { neighbourCell.addMoveableTarget(); } } removeMoveableTargetsOnAllCells() { this.mapCells.forEach((cell) => { cell.removeMoveableTarget(); }); } hasCell(gridCoordinates) { return this.mapCells.has(`${gridCoordinates.X},${gridCoordinates.Y}`); } } exports.GameMap = GameMap; /***/ }), /***/ "./src/Game/GameMap/GameMapCell.ts": /*!*****************************************!*\ !*** ./src/Game/GameMap/GameMapCell.ts ***! \*****************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); const Items_1 = __webpack_require__(/*! ../Items */ "./src/Game/Items/index.ts"); const GameMapCellState_1 = __webpack_require__(/*! ./GameMapCellState */ "./src/Game/GameMap/GameMapCellState.ts"); const MapCellResolver_1 = __webpack_require__(/*! ./MapCellResolver */ "./src/Game/GameMap/MapCellResolver.ts"); const DummySprite_1 = __webpack_require__(/*! ./Tests/Testability/DummySprite */ "./src/Game/GameMap/Tests/Testability/DummySprite.ts"); class GameMapCell { constructor(mapCell, tileSprite, moveableTargetSprite) { this.gridCoordinates = { X: mapCell.X, Y: mapCell.Y }; this.x = mapCell.X; this.y = mapCell.Y; this.spriteIndex = mapCell.SpriteIndex; this.tileSprite = tileSprite; this.tileSprite.setTexture(mapCell.SpriteSheet, this.spriteIndex); this.tileSprite.setOrigin(0, 0); this.tileSprite.setX(this.x * 32); this.tileSprite.setY(this.y * 32); this.gameMapCellState = GameMapCellState_1.GameMapCellState.Blank; if (mapCell.SpriteSheet === 'blankmap_snow') { this.gameMapCellState = GameMapCellState_1.GameMapCellState.BlankSnow; } if (mapCell.SpriteSheet === 'blankmap_cavern') { this.gameMapCellState = GameMapCellState_1.GameMapCellState.BlankCavern; } if (mapCell.SpriteSheet === 'blankmap_gas') { this.gameMapCellState = GameMapCellState_1.GameMapCellState.BlankGas; } this.tileSprite.setVisible(false); if (mapCell.X === 49 && mapCell.Y === 49) { this.tileSprite.setVisible(true); } this.moveableTargetSprite = moveableTargetSprite; } isDiscovered() { switch (this.gameMapCellState) { case GameMapCellState_1.GameMapCellState.Discovered: case GameMapCellState_1.GameMapCellState.DiscoveredCavern: case GameMapCellState_1.GameMapCellState.DiscoveredSnow: case GameMapCellState_1.GameMapCellState.DiscoveredGas: return true; } return false; } getGridCoordinates() { return this.gridCoordinates; } addItemToCell(item) { this.item = item; } onPlayerEnter(player, callback) { var _a; if ((_a = this.item) === null || _a === void 0 ? void 0 : _a.canPickUp()) { player.foundItem(this.item); this.item.pickUp(); if (this.item.ItemType === Items_1.ItemType.Xray) { callback(1, this.item); } callback(50, this.item); if (this.item.ItemType === Items_1.ItemType.fuel1 || this.item.ItemType === Items_1.ItemType.fuel2 || this.item.ItemType === Items_1.ItemType.fuel3 || this.item.ItemType === Items_1.ItemType.fuel4) { callback(51, this.item); } } let nullItem = new Items_1.Item(Items_1.ItemType.None, new DummySprite_1.DummySprite()); // left peak discovered if (this.gridCoordinates.X === 22 && this.gridCoordinates.Y === 13) { callback(100, nullItem); } // right peak discovered if (this.gridCoordinates.X === 80 && this.gridCoordinates.Y === 24) { callback(101, nullItem); } // made it home, nice if (this.gridCoordinates.X === 49 && this.gridCoordinates.Y === 49) { callback(69, nullItem); } if (this.gameMapCellState === GameMapCellState_1.GameMapCellState.Blank) { this.gameMapCellState = GameMapCellState_1.GameMapCellState.Discovered; this.tileSprite.setTexture('discoveredmap', this.spriteIndex); } if (this.gameMapCellState === GameMapCellState_1.GameMapCellState.BlankSnow) { this.gameMapCellState = GameMapCellState_1.GameMapCellState.DiscoveredSnow; this.tileSprite.setTexture('discoveredmap_snow', this.spriteIndex); } if (this.gameMapCellState === GameMapCellState_1.GameMapCellState.BlankCavern) { this.gameMapCellState = GameMapCellState_1.GameMapCellState.DiscoveredCavern; this.tileSprite.setTexture('discoveredmap_cavern', this.spriteIndex); } if (this.gameMapCellState === GameMapCellState_1.GameMapCellState.BlankGas) { this.gameMapCellState = GameMapCellState_1.GameMapCellState.DiscoveredGas; this.tileSprite.setTexture('discoveredmap_gas', this.spriteIndex); } } makeVisible() { this.tileSprite.setVisible(true); if (this.item) { this.item.makeVisible(); } } isVisible() { return this.tileSprite.isVisible(); } getCellWall() { return MapCellResolver_1.MapCellResolver.spriteIndexToCellWall(this.spriteIndex); } getGameMapCellState() { return this.gameMapCellState; } addMoveableTarget() { this.moveableTargetSprite.setVisible(true); this.moveableTargetSprite.setDepth(20); this.moveableTargetSprite.setOrigin(0, 0); this.moveableTargetSprite.setX(this.x * 32); this.moveableTargetSprite.setY(this.y * 32); } removeMoveableTarget() { this.moveableTargetSprite.setVisible(false); } getSpriteIndex() { return this.spriteIndex; } changeTileSprite(newSpriteIndex) { this.spriteIndex = newSpriteIndex; this.tileSprite.setFrame(newSpriteIndex); } digTile(newSpriteIndex) { if (newSpriteIndex !== this.spriteIndex) { this.spriteIndex = newSpriteIndex; this.tileSprite.setFrame(newSpriteIndex); return true; } return false; } } exports.GameMapCell = GameMapCell; /***/ }), /***/ "./src/Game/GameMap/GameMapCellState.ts": /*!**********************************************!*\ !*** ./src/Game/GameMap/GameMapCellState.ts ***! \**********************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); var GameMapCellState; (function (GameMapCellState) { GameMapCellState[GameMapCellState["Blank"] = 0] = "Blank"; GameMapCellState[GameMapCellState["Discovered"] = 1] = "Discovered"; GameMapCellState[GameMapCellState["BlankSnow"] = 2] = "BlankSnow"; GameMapCellState[GameMapCellState["DiscoveredSnow"] = 3] = "DiscoveredSnow"; GameMapCellState[GameMapCellState["BlankCavern"] = 4] = "BlankCavern"; GameMapCellState[GameMapCellState["DiscoveredCavern"] = 5] = "DiscoveredCavern"; GameMapCellState[GameMapCellState["BlankGas"] = 6] = "BlankGas"; GameMapCellState[GameMapCellState["DiscoveredGas"] = 7] = "DiscoveredGas"; })(GameMapCellState = exports.GameMapCellState || (exports.GameMapCellState = {})); /***/ }), /***/ "./src/Game/GameMap/GameMapCellWall.ts": /*!*********************************************!*\ !*** ./src/Game/GameMap/GameMapCellWall.ts ***! \*********************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); var GameMapCellWall; (function (GameMapCellWall) { GameMapCellWall[GameMapCellWall["None"] = 0] = "None"; GameMapCellWall[GameMapCellWall["Left"] = 1] = "Left"; GameMapCellWall[GameMapCellWall["Up"] = 2] = "Up"; GameMapCellWall[GameMapCellWall["Right"] = 4] = "Right"; GameMapCellWall[GameMapCellWall["Down"] = 8] = "Down"; })(GameMapCellWall = exports.GameMapCellWall || (exports.GameMapCellWall = {})); /***/ }), /***/ "./src/Game/GameMap/MapCellResolver.ts": /*!*********************************************!*\ !*** ./src/Game/GameMap/MapCellResolver.ts ***! \*********************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); const GameMapCellWall_1 = __webpack_require__(/*! ./GameMapCellWall */ "./src/Game/GameMap/GameMapCellWall.ts"); const GameMapCellState_1 = __webpack_require__(/*! ./GameMapCellState */ "./src/Game/GameMap/GameMapCellState.ts"); class MapCellResolver { constructor(player) { this.player = player; } canMove(originCell, targetCell) { if (this.player.hasTeleport() && targetCell.isVisible()) { return true; } if (this.isWallBetween(originCell, targetCell)) { return false; } if (!this.canMoveInBiome(targetCell)) { return false; } return this.canBasicMove(originCell.getGridCoordinates(), targetCell.getGridCoordinates()); } canSee(originCell, neighbourCell, playerViewRange) { const absX = this.getAbsoluteNumber(originCell.getGridCoordinates().X, neighbourCell.getGridCoordinates().X); const absY = this.getAbsoluteNumber(originCell.getGridCoordinates().Y, neighbourCell.getGridCoordinates().Y); if ((absX <= playerViewRange && absY === 0) || (absY <= playerViewRange && absX === 0)) { if (!this.isWallBetween(originCell, neighbourCell) || this.player.hasXray()) { return true; } } } digTile(gameMapCell) { return gameMapCell.digTile(MapCellResolver.diggableSpriteIndexToPlainSpriteIndex(gameMapCell.getSpriteIndex())); } mineTile(gameMapCell) { return gameMapCell.digTile(MapCellResolver.mineableSpriteIndexToPlainSpriteIndex(gameMapCell.getSpriteIndex())); } canBasicMove(originCoordinates, targetCoordinates) { const absX = this.getAbsoluteNumber(originCoordinates.X, targetCoordinates.X); const absY = this.getAbsoluteNumber(originCoordinates.Y, targetCoordinates.Y); const playerMaxX = this.player.getMaxMovementX(); let playerMaxY = this.player.getMaxMovementYDown(); if (originCoordinates.Y - targetCoordinates.Y > 0) { playerMaxY = this.player.getMaxMovementYUp(); } return (absX <= playerMaxX && absY === 0) || (absY <= playerMaxY && absX === 0); } getAbsoluteNumber(x, y) { return Math.abs(x - y); } canMoveInBiome(targetCell) { if (targetCell.getGameMapCellState() === GameMapCellState_1.GameMapCellState.BlankSnow || targetCell.getGameMapCellState() === GameMapCellState_1.GameMapCellState.DiscoveredSnow) { if (this.player.canMoveInSnow()) { return true; } return false; } if (targetCell.getGameMapCellState() === GameMapCellState_1.GameMapCellState.BlankCavern || targetCell.getGameMapCellState() === GameMapCellState_1.GameMapCellState.DiscoveredCavern) { if (this.player.canMoveInCavern()) { return true; } return false; } if (targetCell.getGameMapCellState() === GameMapCellState_1.GameMapCellState.BlankGas || targetCell.getGameMapCellState() === GameMapCellState_1.GameMapCellState.DiscoveredGas) { if (this.player.canMoveInGas()) { return true; } return false; } return true; } isWallBetween(originCell, targetCell) { let direction; if (targetCell.getGridCoordinates().X > originCell.getGridCoordinates().X) { direction = GameMapCellWall_1.GameMapCellWall.Right; } if (targetCell.getGridCoordinates().X < originCell.getGridCoordinates().X) { direction = GameMapCellWall_1.GameMapCellWall.Left; } if (targetCell.getGridCoordinates().Y > originCell.getGridCoordinates().Y) { direction = GameMapCellWall_1.GameMapCellWall.Down; } if (targetCell.getGridCoordinates().Y < originCell.getGridCoordinates().Y) { direction = GameMapCellWall_1.GameMapCellWall.Up; } return (originCell.getCellWall() & direction) > 0; } static diggableSpriteIndexToPlainSpriteIndex(spriteIndex) { let plainSpriteIndex = spriteIndex; switch (spriteIndex) { case 120: plainSpriteIndex = 47; break; case 121: plainSpriteIndex = 62; break; case 122: plainSpriteIndex = 5; break; } return plainSpriteIndex; } static mineableSpriteIndexToPlainSpriteIndex(spriteIndex) { let plainSpriteIndex = spriteIndex; switch (spriteIndex) { case 123: plainSpriteIndex = 6; break; case 124: plainSpriteIndex = 6; break; case 125: plainSpriteIndex = 15; break; } return plainSpriteIndex; } static spriteIndexToCellWall(spriteIndex) { switch (spriteIndex) { case 1: case 46: case 47: case 48: return GameMapCellWall_1.GameMapCellWall.Up; case 17: case 64: case 79: case 94: return GameMapCellWall_1.GameMapCellWall.Right; case 31: case 106: case 107: case 108: case 121: return GameMapCellWall_1.GameMapCellWall.Down; case 15: case 60: case 75: case 90: return GameMapCellWall_1.GameMapCellWall.Left; case 2: case 49: return GameMapCellWall_1.GameMapCellWall.Up | GameMapCellWall_1.GameMapCellWall.Right; case 6: case 120: return GameMapCellWall_1.GameMapCellWall.Up | GameMapCellWall_1.GameMapCellWall.Down; case 0: case 45: return GameMapCellWall_1.GameMapCellWall.Up | GameMapCellWall_1.GameMapCellWall.Left; case 32: case 109: return GameMapCellWall_1.GameMapCellWall.Right | GameMapCellWall_1.GameMapCellWall.Down; case 5: case 125: return GameMapCellWall_1.GameMapCellWall.Right | GameMapCellWall_1.GameMapCellWall.Left; case 30: case 105: return GameMapCellWall_1.GameMapCellWall.Down | GameMapCellWall_1.GameMapCellWall.Left; // all but down case 3: return GameMapCellWall_1.GameMapCellWall.Up | GameMapCellWall_1.GameMapCellWall.Right | GameMapCellWall_1.GameMapCellWall.Left; // all but left case 4: case 123: return GameMapCellWall_1.GameMapCellWall.Up | GameMapCellWall_1.GameMapCellWall.Right | GameMapCellWall_1.GameMapCellWall.Down; // all but up case 18: case 122: return GameMapCellWall_1.GameMapCellWall.Right | GameMapCellWall_1.GameMapCellWall.Left | GameMapCellWall_1.GameMapCellWall.Down; // all but right case 19: case 124: return GameMapCellWall_1.GameMapCellWall.Up | GameMapCellWall_1.GameMapCellWall.Down | GameMapCellWall_1.GameMapCellWall.Left; } } } exports.MapCellResolver = MapCellResolver; /***/ }), /***/ "./src/Game/GameMap/MapObjectApplier.ts": /*!**********************************************!*\ !*** ./src/Game/GameMap/MapObjectApplier.ts ***! \**********************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); const PhaserSprite_1 = __webpack_require__(/*! ../GameExtensions/PhaserSprite */ "./src/Game/GameExtensions/PhaserSprite.ts"); const Items_1 = __webpack_require__(/*! ../Items */ "./src/Game/Items/index.ts"); class MapObjectApplier { applyMapObjects(gameScene, gameMap, mapObjects) { mapObjects.forEach((mapObject) => { const gridCoordinateX = Number(mapObject.properties.find((p) => p.name === 'GridCoordinateX').value); const gridCoordinateY = Number(mapObject.properties.find((p) => p.name === 'GridCoordinateY').value); const spriteKey = mapObject.properties.find((p) => p.name === 'SpriteKey').value; if (isNaN(gridCoordinateX) || isNaN(gridCoordinateY)) { throw new Error(`Loading map object ${mapObject.name} coordinates failed.`); } if (!(mapObject.name in Items_1.ItemType)) { throw new Error('// todo'); } const itemType = mapObject.name; const item = new Items_1.Item(itemType, new PhaserSprite_1.PhaserSprite(gameScene.add.sprite(gridCoordinateX * 32 + 16, gridCoordinateY * 32 + 16, spriteKey))); gameMap.addItemToCell({ X: gridCoordinateX, Y: gridCoordinateY }, item); }); } } exports.MapObjectApplier = MapObjectApplier; /***/ }), /***/ "./src/Game/GameMap/Tests/Testability/DummySprite.ts": /*!***********************************************************!*\ !*** ./src/Game/GameMap/Tests/Testability/DummySprite.ts ***! \***********************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); class DummySprite { setOrigin(x, y) { } setFrame(frameIndex) { } setTexture(textureKey, frameIndex) { } setDepth(depth) { } setX(x) { } setY(y) { } setVisible(visible) { } animate(key) { } destroy() { } isVisible() { return true; } getSpriteKey() { return ''; } setInteractiveWithPointer() { } } exports.DummySprite = DummySprite; /***/ }), /***/ "./src/Game/Items/Inventory.ts": /*!*************************************!*\ !*** ./src/Game/Items/Inventory.ts ***! \*************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); class Inventory { } exports.Inventory = Inventory; /***/ }), /***/ "./src/Game/Items/Item.ts": /*!********************************!*\ !*** ./src/Game/Items/Item.ts ***! \********************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); class Item { constructor(itemType, sprite) { this.sprite = sprite; this.sprite.setDepth(10); this.sprite.setVisible(false); this.ItemType = itemType; } destroy() { this.sprite.destroy(); } makeVisible() { this.sprite.setVisible(true); } canPickUp() { return !this.pickedUp; } pickUp() { this.pickedUp = true; this.sprite.setTexture('tiles', 4); } getSpriteKey() { return this.sprite.getSpriteKey(); } } exports.Item = Item; /***/ }), /***/ "./src/Game/Items/ItemType.ts": /*!************************************!*\ !*** ./src/Game/Items/ItemType.ts ***! \************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); var ItemType; (function (ItemType) { ItemType["None"] = "None"; ItemType["Shovel"] = "Shovel"; ItemType["Hammer"] = "Hammer"; ItemType["Recall"] = "Recall"; ItemType["GrapplingHook"] = "GrapplingHook"; ItemType["Torch"] = "Torch"; ItemType["MountainGear"] = "MountainGear"; ItemType["GasMask"] = "GasMask"; ItemType["Xray"] = "Xray"; ItemType["Teleport"] = "Teleport"; ItemType["fuel1"] = "fuel1"; ItemType["fuel2"] = "fuel2"; ItemType["fuel3"] = "fuel3"; ItemType["fuel4"] = "fuel4"; ItemType["note1"] = "note1"; ItemType["note2"] = "note2"; ItemType["note3"] = "note3"; ItemType["note4"] = "note4"; ItemType["note5"] = "note5"; ItemType["note6"] = "note6"; ItemType["note7"] = "note7"; ItemType["note8"] = "note8"; ItemType["note9"] = "note9"; ItemType["note10"] = "note10"; })(ItemType = exports.ItemType || (exports.ItemType = {})); /***/ }), /***/ "./src/Game/Items/index.ts": /*!*********************************!*\ !*** ./src/Game/Items/index.ts ***! \*********************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { "use strict"; function __export(m) { for (var p in m) if (!exports.hasOwnProperty(p)) exports[p] = m[p]; } Object.defineProperty(exports, "__esModule", { value: true }); __export(__webpack_require__(/*! ./Inventory */ "./src/Game/Items/Inventory.ts")); __export(__webpack_require__(/*! ./Item */ "./src/Game/Items/Item.ts")); __export(__webpack_require__(/*! ./ItemType */ "./src/Game/Items/ItemType.ts")); /***/ }), /***/ "./src/Game/Player.ts": /*!****************************!*\ !*** ./src/Game/Player.ts ***! \****************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); const ItemType_1 = __webpack_require__(/*! ./Items/ItemType */ "./src/Game/Items/ItemType.ts"); class Player { constructor(sprite, itemCollection) { this.sprite = sprite; this.sprite.setDepth(10); this.inventory = itemCollection; } moveOnGrid(coordinates) { this.x = coordinates.X; this.y = coordinates.Y; this.sprite.setX(coordinates.X * 32 + 16); this.sprite.setY(coordinates.Y * 32 + 16); } getGridCoordinates() { return { X: this.x, Y: this.y }; } getMaxMovementX() { return 1; } getMaxMovementYUp() { if (this.inventory.GrapplingHook) { return 1; } return 0; } getMaxMovementYDown() { return 1; } getViewRange() { return 1; } foundItem(item) { switch (item.ItemType) { case ItemType_1.ItemType.GrapplingHook: this.inventory.GrapplingHook = true; break; case ItemType_1.ItemType.MountainGear: this.inventory.MountainGear = true; break; case ItemType_1.ItemType.Shovel: this.inventory.Shovel = true; break; case ItemType_1.ItemType.Hammer: this.inventory.Hammer = true; break; case ItemType_1.ItemType.Torch: this.inventory.Torch = true; break; case ItemType_1.ItemType.Recall: this.inventory.Recall = true; break; case ItemType_1.ItemType.Teleport: this.inventory.Teleport = true; break; case ItemType_1.ItemType.GasMask: this.inventory.GasMask = true; break; case ItemType_1.ItemType.Xray: this.inventory.Xray = true; break; case ItemType_1.ItemType.fuel1: this.inventory.fuel1 = true; break; case ItemType_1.ItemType.fuel2: this.inventory.fuel2 = true; break; case ItemType_1.ItemType.fuel3: this.inventory.fuel3 = true; break; case ItemType_1.ItemType.fuel4: this.inventory.fuel4 = true; break; } } hasShovel() { return this.inventory.Shovel; } hasHammer() { return this.inventory.Hammer; } hasRecall() { return this.inventory.Recall; } hasXray() { return this.inventory.Xray; } hasTeleport() { return this.inventory.Teleport; } canMoveInSnow() { return this.inventory.MountainGear; } canMoveInCavern() { return this.inventory.Torch; } canMoveInGas() { return this.inventory.GasMask; } hasAllFuel() { return this.inventory.fuel1 && this.inventory.fuel2 && this.inventory.fuel3 && this.inventory.fuel4; } animate() { this.sprite.animate('player'); } } exports.Player = Player; /***/ }), /***/ "./src/Game/Scenes/BadDomainScene.ts": /*!*******************************************!*\ !*** ./src/Game/Scenes/BadDomainScene.ts ***! \*******************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); const sceneConfig = { active: false, visible: false, key: 'BadDomain', }; class BadDomainScene extends Phaser.Scene { constructor() { super(sceneConfig); } preload() { } create() { this.add.text(50, 300, "This game can only be played on coolmathgames.com and coolmath-games.com"); } } exports.BadDomainScene = BadDomainScene; /***/ }), /***/ "./src/Game/Scenes/ControlsScene.ts": /*!******************************************!*\ !*** ./src/Game/Scenes/ControlsScene.ts ***! \******************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); const sceneConfig = { active: false, visible: false, key: 'Controls', }; class ControlsScene extends Phaser.Scene { constructor() { super(sceneConfig); } create(data) { const backgroundTile = this.add.tileSprite(0, 0, 3200, 3200, 'tiles', 0); backgroundTile.setOrigin(0, 0); let controlstext = this.add.text(50, 50, '', { color: '#ffffff' }); controlstext.setScale(1.2, 1.2); let allControls = []; allControls.push('Mouse Controls'); allControls.push(''); allControls.push('Simply point and click to move your character.'); allControls.push('Click and drag to move the map, mouse wheel to zoom.'); allControls.push('Click on tools to use them, hover over items for more details.'); allControls.push(''); allControls.push(''); allControls.push('Keyboard Controls'); allControls.push(''); allControls.push('Press WASD or the arrow keys to move.'); allControls.push('Press IJKL to move the map and QEUO to zoom in and out.'); allControls.push('Press the number keys to use tools you’ve found.'); allControls.push(''); allControls.push('(Click or any key to return.)'); controlstext.setText(allControls); this.input.keyboard.on('keydown', () => { this.scene.resume(data.callingScene); this.scene.stop(); }, this); this.input.on('pointerdown', () => { this.scene.resume(data.callingScene); this.scene.stop(); }, this); } } exports.ControlsScene = ControlsScene; /***/ }), /***/ "./src/Game/Scenes/CreditsScene.ts": /*!*****************************************!*\ !*** ./src/Game/Scenes/CreditsScene.ts ***! \*****************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); const sceneConfig = { active: false, visible: false, key: 'Credits', }; class CreditsScene extends Phaser.Scene { constructor() { super(sceneConfig); } create(data) { const backgroundTile = this.add.tileSprite(0, 0, 3200, 3200, 'tiles', 0); backgroundTile.setOrigin(0, 0); let controlstext = this.add.text(50, 50, '', { color: '#ffffff' }); controlstext.setScale(1.2, 1.2); let allControls = []; allControls.push('Thanks to:'); allControls.push(''); allControls.push('Aaron and Dave: Testing and moral support.'); allControls.push('Caz and Zoe: Always encouraging me to go on.'); allControls.push(''); allControls.push('Phaser Discord Community'); allControls.push('Without their help and support, '); allControls.push('I would not have learned as much as I did.'); allControls.push(''); allControls.push('Tileset for corner biome pictures:'); allControls.push('Karliszabers Metroidvania Tileset on itch.io'); allControls.push(''); allControls.push('All other "art" & programming: me'); allControls.push(''); controlstext.setText(allControls); this.input.keyboard.on('keydown', () => { this.scene.resume(data.callingScene); this.scene.stop(); }, this); this.input.on('pointerdown', () => { this.scene.resume(data.callingScene); this.scene.stop(); }, this); } } exports.CreditsScene = CreditsScene; /***/ }), /***/ "./src/Game/Scenes/EndScene.ts": /*!*************************************!*\ !*** ./src/Game/Scenes/EndScene.ts ***! \*************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); const sceneConfig = { active: false, visible: false, key: 'End', }; class EndScene extends Phaser.Scene { constructor() { super(sceneConfig); } create(data) { const backgroundTile = this.add.tileSprite(0, 0, 3200, 3200, 'tiles', 0); backgroundTile.setOrigin(0, 0); let totalSeconds = data.finishTime / 60; const totalFinishSeconds = totalSeconds; const hours = Math.floor(totalSeconds / 3600); totalSeconds -= hours * 3600; const minutes = Math.floor(totalSeconds / 60); totalSeconds -= minutes * 60; const seconds = Math.floor(totalSeconds); const padHours = hours < 10 ? '0' : ''; const padMinutes = minutes < 10 ? '0' : ''; const padSeconds = seconds < 10 ? '0' : ''; const winText = this.add.text(50, 50, '', { color: '#ffffff' }); winText.setScale(1.2, 1.2); let timedMessage = 'You make it home in time for dinner.'; if (data.finishTime > 36000) { timedMessage = 'You spent so long out there you missed dinner.'; } const allControls = []; allControls.push('You are win.'); allControls.push(''); allControls.push(`Item Rate: ${data.itemPercentage}%`); allControls.push(`Map discovered: ${data.mapPercentage}%`); allControls.push(`Finish Time: ${padHours}${hours}:${padMinutes}${minutes}:${padSeconds}${seconds}`); allControls.push(''); allControls.push(''); allControls.push(timedMessage); allControls.push('Maybe one day you will explore another deserted planet'); allControls.push('but have to find all those tools again for no apparent reason.'); allControls.push(''); allControls.push('See you next time!'); winText.setText(allControls); } } exports.EndScene = EndScene; /***/ }), /***/ "./src/Game/Scenes/HudScene.ts": /*!*************************************!*\ !*** ./src/Game/Scenes/HudScene.ts ***! \*************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); const ItemType_1 = __webpack_require__(/*! ../Items/ItemType */ "./src/Game/Items/ItemType.ts"); const PhaserSprite_1 = __webpack_require__(/*! ../GameExtensions/PhaserSprite */ "./src/Game/GameExtensions/PhaserSprite.ts"); const GameMapCellState_1 = __webpack_require__(/*! ../GameMap/GameMapCellState */ "./src/Game/GameMap/GameMapCellState.ts"); const sceneConfig = { active: false, visible: false, key: 'Hud', }; class HudScene extends Phaser.Scene { constructor() { super(sceneConfig); this.itemFoundCount = 0; this.totalItems = 23; } create() { this.createDefaultRectangle(0, 0, 800, 90, 0x000000); this.biomeImage = this.add.image(620, 0, 'biomemap').setOrigin(0, 0).setDepth(255); this.mapPercentText = this.add.text(10, 10, 'Map: 0%', { color: '#ffffff' }); this.mapPercentText.setOrigin(0, 0); this.mapPercentText.setDepth(255); this.itemPercentText = this.add.text(10, 30, 'Items: 0%', { color: '#ffffff' }); this.itemPercentText.setOrigin(0, 0); this.itemPercentText.setDepth(255); let controlsButton = this.add.image(120, 7, 'controlsbutton'); controlsButton.setOrigin(0, 0); controlsButton.setDepth(255); controlsButton.setInteractive({ useHandCursor: true }); controlsButton.on('pointerdown', () => { controlsButton.setTint(0x0ff00); this.time.delayedCall(100, () => { controlsButton.clearTint(); }); this.scene.pause('Map'); this.scene.launch('Controls', { callingScene: 'Map' }); }, this); this.scene.get('Map').events.on('itemFound', this.onItemFound, this); this.scene.get('Map').events.on('mapPercentUpdate', this.onMapPercentUpdate, this); this.scene.get('Map').events.on('mapBiomeMove', this.onMapBiomeMove, this); } onMapBiomeMove(cellState) { switch (cellState) { case GameMapCellState_1.GameMapCellState.Blank: case GameMapCellState_1.GameMapCellState.Discovered: this.biomeImage.setTexture('biomemap'); break; case GameMapCellState_1.GameMapCellState.BlankCavern: case GameMapCellState_1.GameMapCellState.DiscoveredCavern: this.biomeImage.setTexture('biomecavern'); break; case GameMapCellState_1.GameMapCellState.BlankSnow: case GameMapCellState_1.GameMapCellState.DiscoveredSnow: this.biomeImage.setTexture('biomesnow'); break; case GameMapCellState_1.GameMapCellState.BlankGas: case GameMapCellState_1.GameMapCellState.DiscoveredGas: this.biomeImage.setTexture('biomegas'); break; } } updateItemFoundCount() { this.itemFoundCount++; let itemPercent = Math.floor((this.itemFoundCount / this.totalItems) * 100); if (this.itemFoundCount === this.totalItems) { itemPercent = 100; } this.itemPercentText.setText(`Items: ${itemPercent}%`); this.events.emit('itemPercentageUpdated', itemPercent); } onMapPercentUpdate(percent) { this.mapPercentText.setText(`Map: ${percent}%`); } onItemFound(item) { switch (item.ItemType) { case ItemType_1.ItemType.Shovel: this.enableHudItem(10, 45, 'shovel', 'shoveltooltip', item.ItemType); break; case ItemType_1.ItemType.Hammer: this.enableHudItem(48, 45, 'hammer', 'hammertooltip', item.ItemType); break; case ItemType_1.ItemType.Recall: this.enableHudItem(86, 45, 'recall', 'recalltooltip', item.ItemType); break; case ItemType_1.ItemType.GrapplingHook: this.enableHudItem(239, 7, 'grapplinghook', 'untitled', item.ItemType); break; case ItemType_1.ItemType.Torch: this.enableHudItem(277, 7, 'torch', 'untitled', item.ItemType); break; case ItemType_1.ItemType.MountainGear: this.enableHudItem(315, 7, 'mountaingear', 'untitled', item.ItemType); break; case ItemType_1.ItemType.GasMask: this.enableHudItem(353, 7, 'gasmask', 'untitled', item.ItemType); break; case ItemType_1.ItemType.Xray: this.enableHudItem(391, 7, 'xray', 'untitled', item.ItemType); break; case ItemType_1.ItemType.Teleport: this.enableHudItem(429, 7, 'teleport', 'untitled', item.ItemType); break; case ItemType_1.ItemType.fuel1: this.enableHudItem(467, 7, 'fuel1', 'untitled', item.ItemType); break; case ItemType_1.ItemType.fuel2: this.enableHudItem(505, 7, 'fuel2', 'untitled', item.ItemType); break; case ItemType_1.ItemType.fuel3: this.enableHudItem(543, 7, 'fuel3', 'untitled', item.ItemType); break; case ItemType_1.ItemType.fuel4: this.enableHudItem(581, 7, 'fuel4', 'untitled', item.ItemType); break; case ItemType_1.ItemType.note1: this.enableHudItem(239, 45, 'note', 'untitled', item.ItemType); break; case ItemType_1.ItemType.note2: this.enableHudItem(277, 45, 'note', 'untitled', item.ItemType); break; case ItemType_1.ItemType.note3: this.enableHudItem(315, 45, 'note', 'untitled', item.ItemType); break; case ItemType_1.ItemType.note4: this.enableHudItem(353, 45, 'note', 'untitled', item.ItemType); break; case ItemType_1.ItemType.note5: this.enableHudItem(391, 45, 'note', 'untitled', item.ItemType); break; case ItemType_1.ItemType.note6: this.enableHudItem(429, 45, 'note', 'untitled', item.ItemType); break; case ItemType_1.ItemType.note7: this.enableHudItem(467, 45, 'note', 'untitled', item.ItemType); break; case ItemType_1.ItemType.note8: this.enableHudItem(505, 45, 'note', 'untitled', item.ItemType); break; case ItemType_1.ItemType.note9: this.enableHudItem(543, 45, 'note', 'untitled', item.ItemType); break; case ItemType_1.ItemType.note10: this.enableHudItem(581, 45, 'note', 'untitled', item.ItemType); break; } this.updateItemFoundCount(); } tryUseHudItem(itemType, sprite) { this.events.emit('hudToolUsed', itemType); switch (itemType) { case ItemType_1.ItemType.Shovel: case ItemType_1.ItemType.Hammer: case ItemType_1.ItemType.Recall: sprite.setTint(0x00ff00); break; } this.time.delayedCall(100, () => { sprite.clearTint(); }); } enableHudItem(x, y, spriteKey, toolTipSpriteKey, itemType) { const sprite = this.add .sprite(x, y, spriteKey) .setDepth(255) .setOrigin(0, 0) .setInteractive({ useHandCursor: true }) .on('pointerover', () => this.showHudItem(itemType), this) .on('pointerout', this.hideHudItem, this) .on('pointerdown', () => { this.tryUseHudItem(itemType, sprite); }, this); switch (itemType) { case ItemType_1.ItemType.Shovel: this.input.keyboard.on('keyup-ONE', () => this.tryUseHudItem(itemType, sprite), this); this.input.keyboard.on('keyup-NUMPAD_ONE', () => this.tryUseHudItem(itemType, sprite), this); break; case ItemType_1.ItemType.Hammer: this.input.keyboard.on('keyup-TWO', () => this.tryUseHudItem(itemType, sprite), this); this.input.keyboard.on('keyup-NUMPAD_TWO', () => this.tryUseHudItem(itemType, sprite), this); break; case ItemType_1.ItemType.Recall: this.input.keyboard.on('keyup-THREE', () => this.tryUseHudItem(itemType, sprite), this); this.input.keyboard.on('keyup-NUMPAD_THREE', () => this.tryUseHudItem(itemType, sprite), this); break; } } showHudItem(itemType) { this.toolTipSprite = new PhaserSprite_1.PhaserSprite(this.add.sprite(0, 0, itemType.toLowerCase() + 'tooltip')); this.toolTipSprite.setDepth(255); this.toolTipSprite.setX(400); this.toolTipSprite.setY(150); } hideHudItem() { this.toolTipSprite.destroy(); } addLogText(logText) { this.logText.setText(logText); } createDefaultRectangle(x, y, width, height, color) { const rectangle = this.add.rectangle(x, y, width, height, color).setOrigin(0, 0).setDepth(250); return rectangle; } } exports.HudScene = HudScene; /***/ }), /***/ "./src/Game/Scenes/LoadScene.ts": /*!**************************************!*\ !*** ./src/Game/Scenes/LoadScene.ts ***! \**************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); const sceneConfig = { active: false, visible: false, key: 'Load', }; class LoadScene extends Phaser.Scene { constructor() { super(sceneConfig); } preload() { const progressBar = this.add.graphics(); const progressBox = this.add.graphics(); const progressText = this.add.text(240, 240, 'Loading: 0%', { color: '#ffffff' }); const fileText = this.add.text(240, 330, 'loading file: ', { color: '#ffffff' }); progressBox.fillStyle(0x948953, 0.8); progressBox.fillRect(240, 270, 320, 50); this.load.on('progress', (value) => { const percent = value * 100; progressBar.clear(); progressBar.fillStyle(0x555943, 1); progressBar.fillRect(250, 280, 300 * value, 30); progressText.setText(`Loading: ${Math.floor(percent)}%`); }, this); this.load.on('fileprogress', (file) => { fileText.setText(`loading file: ${file.key}`); }); this.load.on('complete', () => { progressBox.destroy(); progressBar.destroy(); progressText.destroy(); fileText.destroy(); this.scene.start('Menu'); }, this); this.loadAssets(); } create() { let graphics = this.add.graphics(); graphics.fillStyle(0xffffff, 1); graphics.fillCircle(4, 4, 4); graphics.generateTexture('mapDot', 8, 8); graphics.destroy(); graphics = this.add.graphics(); graphics.lineStyle(2, 0xffffff, 1); graphics.strokeCircle(4, 4, 4); graphics.generateTexture('mapCircle', 8, 8); graphics.destroy(); } loadAssets() { const options = { frameWidth: 32, frameHeight: 32, spacing: 1 }; const basepath = `assets`; this.load.spritesheet('tiles', `${basepath}/tiles.png`, options); this.load.image('biomemap', `${basepath}/biomes/biomemap.png`); this.load.image('biomecavern', `${basepath}/biomes/biomecavern.png`); this.load.image('biomesnow', `${basepath}/biomes/biomesnow.png`); this.load.image('biomegas', `${basepath}/biomes/biomegas.png`); this.load.image('mainmenu', `${basepath}/maps/mainmenu.png`); this.load.image('controlsbutton', `${basepath}/controlsbutton.png`); this.load.image('shovel', `${basepath}/equipment/shovel.png`); this.load.image('hammer', `${basepath}/equipment/hammer.png`); this.load.image('recall', `${basepath}/equipment/recall.png`); this.load.image('grapplinghook', `${basepath}/equipment/grapplinghook.png`); this.load.image('torch', `${basepath}/equipment/torch.png`); this.load.image('mountaingear', `${basepath}/equipment/mountaingear.png`); this.load.image('gasmask', `${basepath}/equipment/gasmask.png`); this.load.image('xray', `${basepath}/equipment/xray.png`); this.load.image('teleport', `${basepath}/equipment/teleport.png`); this.load.image('fuel1', `${basepath}/equipment/fuel1.png`); this.load.image('fuel2', `${basepath}/equipment/fuel2.png`); this.load.image('fuel3', `${basepath}/equipment/fuel3.png`); this.load.image('fuel4', `${basepath}/equipment/fuel4.png`); this.load.image('note', `${basepath}/equipment/note.png`); this.load.image('shovelmap', `${basepath}/equipment/shovelmap.png`); this.load.image('hammermap', `${basepath}/equipment/hammermap.png`); this.load.image('recallmap', `${basepath}/equipment/recallmap.png`); this.load.image('grapplinghookmap', `${basepath}/equipment/grapplinghookmap.png`); this.load.image('torchmap', `${basepath}/equipment/torchmap.png`); this.load.image('mountaingearmap', `${basepath}/equipment/mountaingearmap.png`); this.load.image('gasmaskmap', `${basepath}/equipment/gasmaskmap.png`); this.load.image('xraymap', `${basepath}/equipment/xraymap.png`); this.load.image('teleportmap', `${basepath}/equipment/teleportmap.png`); this.load.image('fuel1map', `${basepath}/equipment/fuel1map.png`); this.load.image('fuel2map', `${basepath}/equipment/fuel2map.png`); this.load.image('fuel3map', `${basepath}/equipment/fuel3map.png`); this.load.image('fuel4map', `${basepath}/equipment/fuel4map.png`); this.load.image('notemap', `${basepath}/equipment/notemap.png`); this.load.image('startmodal', `${basepath}/tooltips/startmodal.png`); this.load.image('endmodal', `${basepath}/tooltips/endmodal.png`); this.load.image('vp1modal', `${basepath}/tooltips/vp1modal.png`); this.load.image('vp2modal', `${basepath}/tooltips/vp2modal.png`); this.load.image('shovelmodal', `${basepath}/tooltips/shovelmodal.png`); this.load.image('hammermodal', `${basepath}/tooltips/hammermodal.png`); this.load.image('recallmodal', `${basepath}/tooltips/recallmodal.png`); this.load.image('grapplinghookmodal', `${basepath}/tooltips/grapplinghookmodal.png`); this.load.image('torchmodal', `${basepath}/tooltips/torchmodal.png`); this.load.image('mountaingearmodal', `${basepath}/tooltips/mountaingearmodal.png`); this.load.image('gasmaskmodal', `${basepath}/tooltips/gasmaskmodal.png`); this.load.image('xraymodal', `${basepath}/tooltips/xraymodal.png`); this.load.image('teleportmodal', `${basepath}/tooltips/teleportmodal.png`); this.load.image('note1modal', `${basepath}/tooltips/note1modal.png`); this.load.image('note2modal', `${basepath}/tooltips/note2modal.png`); this.load.image('note3modal', `${basepath}/tooltips/note3modal.png`); this.load.image('note4modal', `${basepath}/tooltips/note4modal.png`); this.load.image('note5modal', `${basepath}/tooltips/note5modal.png`); this.load.image('note6modal', `${basepath}/tooltips/note6modal.png`); this.load.image('note7modal', `${basepath}/tooltips/note7modal.png`); this.load.image('note8modal', `${basepath}/tooltips/note8modal.png`); this.load.image('note9modal', `${basepath}/tooltips/note9modal.png`); this.load.image('note10modal', `${basepath}/tooltips/note10modal.png`); this.load.image('fuel1modal', `${basepath}/tooltips/fuel1modal.png`); this.load.image('fuel2modal', `${basepath}/tooltips/fuel2modal.png`); this.load.image('fuel3modal', `${basepath}/tooltips/fuel3modal.png`); this.load.image('fuel4modal', `${basepath}/tooltips/fuel4modal.png`); this.load.image('allfuelmodal', `${basepath}/tooltips/allfuelmodal.png`); this.load.image('shoveltooltip', `${basepath}/tooltips/shoveltooltip.png`); this.load.image('hammertooltip', `${basepath}/tooltips/hammertooltip.png`); this.load.image('recalltooltip', `${basepath}/tooltips/recalltooltip.png`); this.load.image('grapplinghooktooltip', `${basepath}/tooltips/grapplinghooktooltip.png`); this.load.image('torchtooltip', `${basepath}/tooltips/torchtooltip.png`); this.load.image('mountaingeartooltip', `${basepath}/tooltips/mountaingeartooltip.png`); this.load.image('gasmasktooltip', `${basepath}/tooltips/gasmasktooltip.png`); this.load.image('xraytooltip', `${basepath}/tooltips/xraytooltip.png`); this.load.image('teleporttooltip', `${basepath}/tooltips/teleporttooltip.png`); this.load.image('grapplinghooktooltip', `${basepath}/tooltips/grapplinghooktooltip.png`); this.load.image('note1tooltip', `${basepath}/tooltips/note1tooltip.png`); this.load.image('note2tooltip', `${basepath}/tooltips/note2tooltip.png`); this.load.image('note3tooltip', `${basepath}/tooltips/note3tooltip.png`); this.load.image('note4tooltip', `${basepath}/tooltips/note4tooltip.png`); this.load.image('note5tooltip', `${basepath}/tooltips/note5tooltip.png`); this.load.image('note6tooltip', `${basepath}/tooltips/note6tooltip.png`); this.load.image('note7tooltip', `${basepath}/tooltips/note7tooltip.png`); this.load.image('note8tooltip', `${basepath}/tooltips/note8tooltip.png`); this.load.image('note9tooltip', `${basepath}/tooltips/note9tooltip.png`); this.load.image('note10tooltip', `${basepath}/tooltips/note10tooltip.png`); this.load.image('fuel1tooltip', `${basepath}/tooltips/fuel1tooltip.png`); this.load.image('fuel2tooltip', `${basepath}/tooltips/fuel2tooltip.png`); this.load.image('fuel3tooltip', `${basepath}/tooltips/fuel3tooltip.png`); this.load.image('fuel4tooltip', `${basepath}/tooltips/fuel4tooltip.png`); this.load.spritesheet('blankmap', `${basepath}/maps/blankmap.png`, options); this.load.spritesheet('discoveredmap', `${basepath}/maps/discoveredmap.png`, options); this.load.spritesheet('blankmap_snow', `${basepath}/maps/blankmap_snow.png`, options); this.load.spritesheet('discoveredmap_snow', `${basepath}/maps/discoveredmap_snow.png`, options); this.load.spritesheet('blankmap_gas', `${basepath}/maps/blankmap_gas.png`, options); this.load.spritesheet('discoveredmap_gas', `${basepath}/maps/discoveredmap_gas.png`, options); this.load.spritesheet('blankmap_cavern', `${basepath}/maps/blankmap_cavern.png`, options); this.load.spritesheet('discoveredmap_cavern', `${basepath}/maps/discoveredmap_cavern.png`, options); this.load.json('100json', `${basepath}/maps/100.json`); } } exports.LoadScene = LoadScene; /***/ }), /***/ "./src/Game/Scenes/MapScene.ts": /*!*************************************!*\ !*** ./src/Game/Scenes/MapScene.ts ***! \*************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); const GameMap_1 = __webpack_require__(/*! ../GameMap/GameMap */ "./src/Game/GameMap/GameMap.ts"); const MapImporter_1 = __webpack_require__(/*! ../../MapImporter/MapImporter */ "./src/MapImporter/MapImporter.ts"); const JsonMap_1 = __webpack_require__(/*! ../../MapImporter/JsonMap */ "./src/MapImporter/JsonMap.ts"); const Player_1 = __webpack_require__(/*! ../Player */ "./src/Game/Player.ts"); const PhaserSprite_1 = __webpack_require__(/*! ../GameExtensions/PhaserSprite */ "./src/Game/GameExtensions/PhaserSprite.ts"); const Inventory_1 = __webpack_require__(/*! ../Items/Inventory */ "./src/Game/Items/Inventory.ts"); const MapObjectApplier_1 = __webpack_require__(/*! ../GameMap/MapObjectApplier */ "./src/Game/GameMap/MapObjectApplier.ts"); const phaser_1 = __webpack_require__(/*! phaser */ "./node_modules/phaser/src/phaser.js"); const ItemType_1 = __webpack_require__(/*! ../Items/ItemType */ "./src/Game/Items/ItemType.ts"); const sceneConfig = { active: false, visible: false, key: 'Map', }; class MapScene extends Phaser.Scene { constructor() { super(sceneConfig); this.updateTicks = 0; this.fuelModalShownDelay = 0; this.shipFlyOff = false; } create() { this.events.on('pause', this.input.keyboard.resetKeys, this.input.keyboard); this.events.on('sleep', this.input.keyboard.resetKeys, this.input.keyboard); this.setupMap(); this.setupCamera(); this.input.on('pointerdown', () => { this.mapClick(); }); this.scene.launch('Hud'); this.input.on('wheel', this.onMouseWheel, this); this.game.canvas.onwheel = (e) => e.preventDefault(); this.scene.get('Hud').events.on('hudToolUsed', this.onToolUse, this); this.scene.get('Hud').events.on('itemPercentageUpdated', this.onItemPercentageUpdate, this); this.shipSprite = this.add.sprite(49 * 32 + 16, 49 * 32 + 16, 'tiles', 5); } setupMap() { const backgroundTile = this.add.tileSprite(0, 0, 3200, 3200, 'tiles', 0); backgroundTile.setOrigin(0, 0); const rawJson = this.cache.json.get('100json'); const jsonMap = JsonMap_1.JsonMap.JsonToMap(rawJson); const mapImporter = new MapImporter_1.MapImporter(); const mapCells = mapImporter.importJsonMapCells(jsonMap); const mapObjects = mapImporter.importJsonMapObjects(jsonMap); this.gameMap = new GameMap_1.GameMap(this.createDefaultPlayer()); mapCells.forEach((cell) => { this.gameMap.addMapCell(cell, new PhaserSprite_1.PhaserSprite(this.add.sprite(0, 0, 'blankmap')), new PhaserSprite_1.PhaserSprite(this.add.sprite(0, 0, 'tiles', 3))); }); this.gameMap.onClick({ X: 49, Y: 49 }, () => { }); new MapObjectApplier_1.MapObjectApplier().applyMapObjects(this, this.gameMap, mapObjects); this.showModalWindow('start'); } setupCamera() { const camera = this.cameras.main; camera .setBounds(0, 0, 3200, 3200) .setViewport(0, 90, 800, 600 - 90) .centerOn(1600, 1600); this.input.on('pointermove', (pointer) => { if (!pointer.isDown) return; camera.scrollX -= (pointer.x - pointer.prevPosition.x) / camera.zoom; camera.scrollY -= (pointer.y - pointer.prevPosition.y) / camera.zoom; }); } update() { const { keyboard } = this.input; if (this.checkKeysDown(keyboard, 'ESC') || this.checkKeysDown(keyboard, 'P')) { this.scene.launch('Controls', { callingScene: 'Map' }); this.scene.pause(); } if (this.checkKeysDown(keyboard, 'W') || this.checkKeysDown(keyboard, 'UP')) { this.tryMove(0, -1); } if (this.checkKeysDown(keyboard, 'A') || this.checkKeysDown(keyboard, 'LEFT')) { this.tryMove(-1, 0); } if (this.checkKeysDown(keyboard, 'S') || this.checkKeysDown(keyboard, 'DOWN')) { this.tryMove(0, 1); } if (this.checkKeysDown(keyboard, 'D') || this.checkKeysDown(keyboard, 'RIGHT')) { this.tryMove(1, 0); } if (this.mapPercentage !== this.gameMap.getCellPercentage()) { this.mapPercentage = this.gameMap.getCellPercentage(); this.events.emit('mapPercentUpdate', this.mapPercentage); } if (this.shipSprite.y > 1560 && !this.shipGoDown) { this.shipSprite.y -= 0.05; } if (this.shipSprite.y < 1600 && this.shipGoDown) { this.shipSprite.y += 0.05; } if (this.shipSprite.y > 1587) { this.shipGoDown = false; } if (this.shipSprite.y < 1583) { this.shipGoDown = true; } if (this.shipFlyOff) { this.shipSprite.y -= 2; } const camera = this.cameras.main; if (this.checkKeysDown(keyboard, 'I')) { camera.scrollY -= 60; } if (this.checkKeysDown(keyboard, 'J')) { camera.scrollX -= 60; } if (this.checkKeysDown(keyboard, 'K')) { camera.scrollY += 60; } if (this.checkKeysDown(keyboard, 'L')) { camera.scrollX += 60; } if (this.checkKeysDown(keyboard, 'Q') || this.checkKeysDown(keyboard, 'U')) { this.zoomCamera(100); } if (this.checkKeysDown(keyboard, 'E') || this.checkKeysDown(keyboard, 'O')) { this.zoomCamera(-100); } if (this.allFuelFound && this.fuelModalShownDelay === 30) { this.showModalWindow('allfuel'); this.fuelModalShownDelay++; } if (this.allFuelFound && this.fuelModalShownDelay < 30) { this.fuelModalShownDelay++; } if (this.canMoveToMountainsKeyboard) { this.enableMoveToMountainsKeyboard(); } this.updateTicks++; } onItemPercentageUpdate(percent) { this.itemPercentage = percent; } checkKeysDown(keyboard, character) { return keyboard.checkDown(keyboard.addKey(character), 200); } tryMove(xDirection, yDirection) { this.checkCamera(this.gameMap.getPlayerGridCoordinates()); this.gameMap.keyboardMove(xDirection, yDirection, (eventId, item) => { this.raiseGameEvent(eventId, item); }); let cellType = this.gameMap.getCurrentBiome(); this.events.emit('mapBiomeMove', cellType); } checkCamera(gridCoordinates) { const [playerX, playerY] = [gridCoordinates.X * 32, gridCoordinates.Y * 32]; const camera = this.cameras.main; const x = camera.worldView.x + 200; const y = camera.worldView.y + 150; const width = camera.worldView.width - 400; const height = camera.worldView.height - 300; const cameraViewEdge = new phaser_1.Geom.Rectangle(x, y, width, height); if (!cameraViewEdge.contains(playerX, playerY)) { camera.pan(playerX, playerY); } } onToolUse(itemType) { let tileBroke = this.gameMap.useItem(itemType); if (tileBroke) { this.cameras.main.shake(500, 0.01); } if (itemType === ItemType_1.ItemType.Recall) { this.checkCamera(this.gameMap.getPlayerGridCoordinates()); } } onMouseWheel(pointer, gameObject, deltaX, deltaY, deltaZ, eventData) { this.zoomCamera(deltaY); } zoomCamera(delta) { const camera = this.cameras.main; camera.zoom -= delta / 1000; if (camera.zoom < 0.5) { camera.zoom = 0.5; } if (camera.zoom > 2) { camera.zoom = 2; } } mapClick() { const { worldX, worldY } = this.input.activePointer; const gridX = Math.floor(worldX / 32); const gridY = Math.floor(worldY / 32); this.gameMap.onClick({ X: gridX, Y: gridY }, (eventId, item) => { this.raiseGameEvent(eventId, item); }); let cellType = this.gameMap.getCurrentBiome(); this.events.emit('mapBiomeMove', cellType); } raiseGameEvent(eventId, item) { switch (eventId) { case 50: this.showModalWindow(item.ItemType.toLowerCase()); this.events.emit('itemFound', item); break; case 52: // all fuel found this.allFuelFound = true; break; case 68: // repan camera this.checkCamera(this.gameMap.getPlayerGridCoordinates()); break; case 70: // end game this.shipFlyOff = true; this.showModalWindow('end'); this.cameras.main.zoomTo(0.75, 300); this.cameras.main.pan(49 * 32, 49 * 32); this.cameras.main.shake(1500, 0.05); this.time.delayedCall(3000, () => { this.cameras.main.fadeOut(1500); this.time.delayedCall(1500, () => { this.scene.start('End', { finishTime: this.updateTicks, mapPercentage: this.mapPercentage, itemPercentage: this.itemPercentage }); }, null, this); }, null, this); break; case 102: // one peak this.showModalWindow('vp1'); break; case 103: // two peaks this.showModalWindow('vp2'); this.gameMap.discoverCell({ X: 54, Y: 9 }); this.canMoveToMountainsKeyboard = true; break; } } enableMoveToMountainsKeyboard() { if (this.gameMap.canPlayerTeleport()) { this.add.sprite(22 * 32 + 16, 12 * 32 + 16, 'tiles', 3).setDepth(255); this.add.sprite(80 * 32 + 16, 23 * 32 + 16, 'tiles', 3).setDepth(255); this.add.sprite(53 * 32 + 16, 9 * 32 + 16, 'tiles', 3).setDepth(255); this.gameMap.enableKeyBoardTeleportForSecretMountain(); this.canMoveToMountainsKeyboard = false; } } createDefaultPlayer() { const player = new Player_1.Player(new PhaserSprite_1.PhaserSprite(this.add.sprite(0, 0, 'tiles', 1)), new Inventory_1.Inventory()); this.anims.create({ key: 'player', frames: this.anims.generateFrameNumbers('tiles', { start: 1, end: 2 }), frameRate: 1, repeat: -1 }); player.animate(); return player; } showModalWindow(spriteKey) { this.scene.launch('Modal', { spriteKey: spriteKey }); this.scene.pause(); } } exports.MapScene = MapScene; class ModalScene extends Phaser.Scene { constructor() { super('Modal'); } init(data) { let sprite = this.add.sprite(this.cameras.main.worldView.x + 400, this.cameras.main.worldView.y + 300, data.spriteKey + 'modal'); sprite.setDepth(255); sprite.setInteractive(); this.scene.bringToTop(); this.time.delayedCall(1500, () => { this.input.keyboard.on('keydown', () => { sprite.destroy(); this.scene.resume('Map'); this.scene.stop(); }, this); this.input.on('pointerdown', () => { sprite.destroy(); this.scene.resume('Map'); this.scene.stop(); }, this); }); } } exports.ModalScene = ModalScene; /***/ }), /***/ "./src/Game/Scenes/MenuScene.ts": /*!**************************************!*\ !*** ./src/Game/Scenes/MenuScene.ts ***! \**************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); const sceneConfig = { active: false, visible: false, key: 'Menu', }; class MenuScene extends Phaser.Scene { constructor() { super(sceneConfig); this.menuIndex = 0; } create() { let background = this.add.image(0, 0, 'mainmenu'); background.setOrigin(0, 0); this.menuSprite = this.add.sprite(250, 315, 'tiles', 5); let startButton = this.add.text(290, 300, 'Start Game', { color: '#ffffff' }); startButton.setScale(2, 2); startButton.setInteractive({ useHandCursor: true }); startButton.on('pointerdown', () => { this.scene.start('Map'); }); let controlsButton = this.add.text(290, 375, 'Controls', { color: '#ffffff' }); controlsButton.setScale(2, 2); controlsButton.setInteractive({ useHandCursor: true }); controlsButton.on('pointerdown', () => { this.scene.launch('Controls', { callingScene: 'Menu' }); this.scene.pause(); }); let creditsButton = this.add.text(290, 450, 'Credits', { color: '#ffffff' }); creditsButton.setScale(2, 2); creditsButton.setInteractive({ useHandCursor: true }); creditsButton.on('pointerdown', () => { this.scene.launch('Credits', { callingScene: 'Menu' }); this.scene.pause(); }); this.input.keyboard.on('keyup-UP', () => { this.changeMenu(-1); }, this); this.input.keyboard.on('keyup-W', () => { this.changeMenu(-1); }, this); this.input.keyboard.on('keyup-DOWN', () => { this.changeMenu(1); }, this); this.input.keyboard.on('keyup-S', () => { this.changeMenu(1); }, this); this.input.keyboard.on('keydown-SPACE', () => { this.enterMenu(); }, this); this.input.keyboard.on('keydown-ENTER', () => { this.enterMenu(); }, this); this.input.keyboard.on('keydown-Z', () => { this.enterMenu(); }, this); this.input.keyboard.addCapture('UP'); this.input.keyboard.addCapture('DOWN'); this.input.keyboard.addCapture('LEFT'); this.input.keyboard.addCapture('RIGHT'); this.input.keyboard.addCapture('SPACE'); } enterMenu() { switch (this.menuIndex) { case 0: this.scene.start('Map'); break; case 1: this.scene.launch('Controls', { callingScene: 'Menu' }); this.scene.pause(); break; case 2: this.scene.launch('Credits', { callingScene: 'Menu' }); this.scene.pause(); break; } } changeMenu(index) { this.menuIndex = this.menuIndex + index; if (this.menuIndex < 0) { this.menuIndex = 0; } if (this.menuIndex > 2) { this.menuIndex = 2; } switch (this.menuIndex) { case 0: this.menuSprite.setY(315); break; case 1: this.menuSprite.setY(390); break; case 2: this.menuSprite.setY(465); break; } } } exports.MenuScene = MenuScene; /***/ }), /***/ "./src/Game/Scenes/SplashScene.ts": /*!****************************************!*\ !*** ./src/Game/Scenes/SplashScene.ts ***! \****************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); const domainName_1 = __webpack_require__(/*! ../../domainName */ "./src/domainName.js"); const sceneConfig = { active: false, visible: false, key: 'Splash', }; class SplashScene extends Phaser.Scene { constructor() { super(sceneConfig); } preload() { const basepath = `assets`; } create() { this.scene.start('Load'); } } exports.SplashScene = SplashScene; /***/ }), /***/ "./src/Game/Scenes/index.ts": /*!**********************************!*\ !*** ./src/Game/Scenes/index.ts ***! \**********************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { "use strict"; function __export(m) { for (var p in m) if (!exports.hasOwnProperty(p)) exports[p] = m[p]; } Object.defineProperty(exports, "__esModule", { value: true }); __export(__webpack_require__(/*! ./HudScene */ "./src/Game/Scenes/HudScene.ts")); __export(__webpack_require__(/*! ./LoadScene */ "./src/Game/Scenes/LoadScene.ts")); __export(__webpack_require__(/*! ./MapScene */ "./src/Game/Scenes/MapScene.ts")); __export(__webpack_require__(/*! ./MenuScene */ "./src/Game/Scenes/MenuScene.ts")); __export(__webpack_require__(/*! ./ControlsScene */ "./src/Game/Scenes/ControlsScene.ts")); __export(__webpack_require__(/*! ./CreditsScene */ "./src/Game/Scenes/CreditsScene.ts")); __export(__webpack_require__(/*! ./EndScene */ "./src/Game/Scenes/EndScene.ts")); __export(__webpack_require__(/*! ./SplashScene */ "./src/Game/Scenes/SplashScene.ts")); __export(__webpack_require__(/*! ./BadDomainScene */ "./src/Game/Scenes/BadDomainScene.ts")); /***/ }), /***/ "./src/MapImporter/JsonMap.ts": /*!************************************!*\ !*** ./src/MapImporter/JsonMap.ts ***! \************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); class JsonMap { static JsonToMap(rawJson) { const jsonMap = new JsonMap(); jsonMap.width = rawJson.width; jsonMap.height = rawJson.height; jsonMap.layers = rawJson.layers; return jsonMap; } } exports.JsonMap = JsonMap; /***/ }), /***/ "./src/MapImporter/MapCell.ts": /*!************************************!*\ !*** ./src/MapImporter/MapCell.ts ***! \************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); class MapCell { constructor(x, y, spriteIndex, spriteSheet) { this.X = x; this.Y = y; this.SpriteIndex = spriteIndex; this.SpriteSheet = spriteSheet; } } exports.MapCell = MapCell; /***/ }), /***/ "./src/MapImporter/MapImporter.ts": /*!****************************************!*\ !*** ./src/MapImporter/MapImporter.ts ***! \****************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); const MapCell_1 = __webpack_require__(/*! ./MapCell */ "./src/MapImporter/MapCell.ts"); class MapImporter { importJsonMapCells(jsonMap) { const blankData = jsonMap.layers.find((l) => l.name === 'MapLayer').data; const width = jsonMap.width; const height = jsonMap.height; const cells = []; let index = 0; for (let y = 0; y < height; y++) { for (let x = 0; x < width; x++) { const indexData = blankData[index]; if (indexData > 0) { cells.push(new MapCell_1.MapCell(x, y, indexData - 1, 'blankmap')); } index++; } } const snowData = jsonMap.layers.find((l) => l.name === 'SnowLayer').data; index = 0; for (let y = 0; y < height; y++) { for (let x = 0; x < width; x++) { const indexData = snowData[index] - 289; if (indexData > 0) { cells.push(new MapCell_1.MapCell(x, y, indexData - 1, 'blankmap_snow')); } index++; } } const cavernData = jsonMap.layers.find((l) => l.name === 'CavernLayer').data; index = 0; for (let y = 0; y < height; y++) { for (let x = 0; x < width; x++) { const indexData = cavernData[index] - 514; if (indexData > 0) { cells.push(new MapCell_1.MapCell(x, y, indexData - 1, 'blankmap_cavern')); } index++; } } const gasData = jsonMap.layers.find((l) => l.name === 'GasLayer').data; index = 0; for (let y = 0; y < height; y++) { for (let x = 0; x < width; x++) { const indexData = gasData[index] - 739; if (indexData > 0) { cells.push(new MapCell_1.MapCell(x, y, indexData - 1, 'blankmap_gas')); } index++; } } return cells; } importJsonMapObjects(jsonMap) { return jsonMap.layers.find((l) => l.name === 'Objects').objects; } } exports.MapImporter = MapImporter; /***/ }), /***/ "./src/domainName.js": /*!***************************!*\ !*** ./src/domainName.js ***! \***************************/ /*! exports provided: getDomainName */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getDomainName", function() { return getDomainName; }); function getDomainName(){ return window.location.hostname; } /***/ }), /***/ "./src/main.ts": /*!*********************!*\ !*** ./src/main.ts ***! \*********************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { "use strict"; var __importStar = (this && this.__importStar) || function (mod) { if (mod && mod.__esModule) return mod; var result = {}; if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k]; result["default"] = mod; return result; }; Object.defineProperty(exports, "__esModule", { value: true }); const Phaser = __importStar(__webpack_require__(/*! phaser */ "./node_modules/phaser/src/phaser.js")); const Scenes_1 = __webpack_require__(/*! ./Game/Scenes */ "./src/Game/Scenes/index.ts"); const gameConfig = { title: 'Maptroid', type: Phaser.AUTO, scale: { width: 800, height: 600, }, physics: { default: 'arcade', arcade: { debug: true, }, }, render: { pixelArt: true, }, scene: [Scenes_1.SplashScene, Scenes_1.LoadScene, Scenes_1.MenuScene, Scenes_1.MapScene, Scenes_1.HudScene, Scenes_1.ModalScene, Scenes_1.ControlsScene, Scenes_1.CreditsScene, Scenes_1.EndScene, Scenes_1.BadDomainScene], parent: 'game', backgroundColor: '#000000', audio: { noAudio: true }, }; exports.game = new Phaser.Game(gameConfig); /***/ }) /******/ }); //# sourceMappingURL=app.bundle.js.map