diff --git a/js-src/conquer/fight-selector-slide.ts b/js-src/conquer/fight-selector-slide.ts new file mode 100644 index 0000000..2cdbd7f --- /dev/null +++ b/js-src/conquer/fight-selector-slide.ts @@ -0,0 +1,53 @@ +import Conquer from '@burguillosinfo/conquer' +export default class FightSelectorSlide { + private callbacks: Record void>> = {} + + public on(eventName: string, callback: () => void): void { + if (this.callbacks[eventName] === undefined) { + this.callbacks[eventName] = [] + } + this.callbacks[eventName].push(callback) + } + + private runCallbacks(eventName: string) { + const callbacks = this.callbacks[eventName]; + if (callbacks === undefined) { + return + } + for (const callback of callbacks) { + callback() + } + } + + private getSelectorSlide(): HTMLElement { + const selectorSlide = document.querySelector('#fight-battle-selector-slide'); + if (!(selectorSlide instanceof HTMLElement)) { + Conquer.fail('selectorSlide is not HTMLElement'); + } + return selectorSlide; + } + public startHook(): void { + this.createEventListeners(); + } + + public getGlobalBattleButton(): HTMLElement { + const globalBattleButton = this.getSelectorSlide().querySelector('button.fight-global-button'); + if (!(globalBattleButton instanceof HTMLElement)) { + Conquer.fail('globalBattleButton is not HTMLElement'); + } + return globalBattleButton; + } + + private createEventListeners(): void { + const globalBattleButton = this.getGlobalBattleButton(); + globalBattleButton.addEventListener('click', () => { + this.runCallbacks('global-battle'); + }); + } + public show(): void { + this.getSelectorSlide().classList.remove('conquer-display-none'); + } + public hide(): void { + this.getSelectorSlide().classList.add('conquer-display-none'); + } +} diff --git a/js-src/conquer/index.ts b/js-src/conquer/index.ts index e1dab82..89eae86 100644 --- a/js-src/conquer/index.ts +++ b/js-src/conquer/index.ts @@ -26,6 +26,9 @@ import NewTeamUI from '@burguillosinfo/conquer/interface/new-team' import WebSocket from '@burguillosinfo/conquer/websocket' import JsonSerializer from '@burguillosinfo/conquer/serializer'; import ConquerUser from '@burguillosinfo/conquer/user' +import FightSelectorSlide from '@burguillosinfo/conquer/fight-selector-slide'; +import SelectFightUI from '@burguillosinfo/conquer/interface/select-fight'; +import ConquerUserCurrentEnemy from '@burguillosinfo/conquer/user-current-enemy' type StylesInterface = Record @@ -55,6 +58,8 @@ export default class Conquer { private serverNodes: Record = {} private coordinate_1 = 0; private coordinate_2 = 0; + private fightSelectorSlide: FightSelectorSlide; + private loggedIn = false; public getServerNodes(): Record { return this.serverNodes @@ -75,7 +80,18 @@ export default class Conquer { this.state |= state this.refreshState() } + + private refreshFightSlide(): void { + if (this.loggedIn && (this.getState() & MapState.NORMAL) !== 0) { + this.fightSelectorSlide.show(); + } + if (!this.loggedIn) { + this.fightSelectorSlide.hide(); + } + } + private refreshState(): void { + this.refreshFightSlide(); this.createNodeObject.refreshState() return } @@ -222,6 +238,8 @@ export default class Conquer { } async onLoginSuccess(): Promise { + this.loggedIn = true; + this.refreshFightSlide(); this.clearIntervalSendCoordinates(); this.createIntervalSendCoordinates(); this.clearIntervalPollNearbyNodes(); @@ -333,9 +351,28 @@ export default class Conquer { }); conquerLogin.start() this.conquerLogin = conquerLogin + this.fightSelectorSlide = new FightSelectorSlide(); + this.fightSelectorSlide.on('global-battle', () => { + this.startGlobalBattleSelector(); + }); + this.fightSelectorSlide.startHook(); + } + + private async startGlobalBattleSelector(): Promise { + const enemies = await ConquerUserCurrentEnemy.getGlobalEnemies(); + if (enemies !== null) { + const selectFightUI = new SelectFightUI(enemies); + selectFightUI.on('close', () => { + this.interfaceManager.remove(selectFightUI); + }); + this.interfaceManager.push(selectFightUI); + } + } private onLogout(): void { + this.loggedIn = false; + this.refreshFightSlide(); this.clearIntervalSendCoordinates(); this.clearIntervalPollNearbyNodes(); } diff --git a/js-src/conquer/interface/select-fight.ts b/js-src/conquer/interface/select-fight.ts new file mode 100644 index 0000000..929a7af --- /dev/null +++ b/js-src/conquer/interface/select-fight.ts @@ -0,0 +1,72 @@ +import Conquer from '@burguillosinfo/conquer'; +import ConquerUser from '@burguillosinfo/conquer/user'; +import AbstractTopBarInterface from '@burguillosinfo/conquer/interface/abstract-top-bar-interface'; +import ConquerUserCurrentEnemy from '@burguillosinfo/conquer/user-current-enemy' + +export default class SelectFightUI extends AbstractTopBarInterface { + private enemies: ConquerUserCurrentEnemy[]; + private form: HTMLElement | null = null; + + constructor(enemies: ConquerUserCurrentEnemy[]) { + super(); + this.enemies = enemies; + } + + public async run(): Promise { + const user = await ConquerUser.getSelfUser() + if (user === null) { + this.runCallbacks('close') + return + } + this.getMainNode().append(this.getForm()); + this.populateEnemies(); + this.getMainNode().classList.remove('conquer-display-none'); + } + + private populateEnemies(): void { + for (const enemy of this.enemies) { + this.appendEnemy(enemy); + } + } + + private appendEnemy(enemy: ConquerUserCurrentEnemy) { + const form = this.getForm(); + const enemyNode = this.getNodeFromTemplateId('conquer-select-fight-item-template'); + this.getNameEnemyNodeElement(enemyNode).innerText = enemy.getSpecies().getName(); + this.getLevelEnemyNodeElement(enemyNode).innerText = '' + enemy.getLevel(); + this.getImageEnemyNodeElement(enemyNode).src = enemy.getSpecies().getImage(); + form.append(enemyNode); + } + + private getImageEnemyNodeElement(enemyNode: HTMLElement): HTMLImageElement { + const conquerImage = enemyNode.querySelector('.conquer-image'); + if (!(conquerImage instanceof HTMLImageElement)) { + Conquer.fail('conquerImage is not HTMLImageElement.') + } + return conquerImage; + } + + private getLevelEnemyNodeElement(enemyNode: HTMLElement): HTMLElement { + const conquerLevel = enemyNode.querySelector('.conquer-level'); + if (!(conquerLevel instanceof HTMLElement)) { + Conquer.fail('conquerLevel is not HTMLElement.') + } + return conquerLevel; + } + + private getNameEnemyNodeElement(enemyNode: HTMLElement): HTMLElement { + const conquerName = enemyNode.querySelector('.conquer-name'); + if (!(conquerName instanceof HTMLElement)) { + Conquer.fail('conquerName is not HTMLElement.') + } + return conquerName; + } + + private getForm(): HTMLElement { + if (this.form === null) { + const form = this.getNodeFromTemplateId('conquer-select-fight-list-template') + this.form = form; + } + return this.form; + } +} diff --git a/js-src/conquer/specie.ts b/js-src/conquer/specie.ts new file mode 100644 index 0000000..b6e98c6 --- /dev/null +++ b/js-src/conquer/specie.ts @@ -0,0 +1,25 @@ +import { JsonObject, JsonProperty } from 'typescript-json-serializer'; + +@JsonObject() +export default class Specie { + @JsonProperty() + private id: string; + + @JsonProperty() + private name: string; + + @JsonProperty() + private image: string; + + public getId(): string { + return this.id; + } + + public getName(): string { + return this.name; + } + + public getImage(): string { + return this.image; + } +} diff --git a/js-src/conquer/user-current-enemy.ts b/js-src/conquer/user-current-enemy.ts new file mode 100644 index 0000000..a2a685d --- /dev/null +++ b/js-src/conquer/user-current-enemy.ts @@ -0,0 +1,66 @@ +import Conquer from '@burguillosinfo/conquer'; + +import { JsonObject, JsonProperty } from 'typescript-json-serializer'; +import Specie from '@burguillosinfo/conquer/specie'; +import JsonSerializer from '@burguillosinfo/conquer/serializer'; + +@JsonObject() +export default class ConquerUserCurrentEnemy { + @JsonProperty() + private uuid: string; + + @JsonProperty() + private species: Specie; + + @JsonProperty() + private level: number; + + @JsonProperty() + private max_health: number; + + public getUUID(): string { + return this.uuid; + } + + public getSpecies(): Specie { + return this.species; + } + + public getLevel(): number { + return this.level; + } + + public getMaxHealth(): number { + return this.max_health; + } + + public static async getGlobalEnemies(): Promise { + const urlEnemies = new URL('/conquer/user/enemies/global', window.location.protocol + '//' + window.location.hostname + ':' + window.location.port); + const response = await fetch(urlEnemies); + let responseBody; + try { + responseBody = await response.json(); + if (response.status !== 200) { + console.error(responseBody.error); + return null; + } + const enemiesRaw = JsonSerializer.deserialize(responseBody, ConquerUserCurrentEnemy); + const enemiesReturnArray: ConquerUserCurrentEnemy[] = []; + if (!(enemiesRaw instanceof Array)) { + console.error('Incorrect type retrieved from ' + urlEnemies); + return null; + } + for (const enemy of enemiesRaw) { + if (!(enemy instanceof ConquerUserCurrentEnemy)) { + console.error('Incorrect type for enemy, maybe null or undef.', enemy); + return null; + } + enemiesReturnArray.push(enemy); + } + return enemiesReturnArray; + } catch(error) { + console.error(error, 'Invalid response from server seeking for possible battles.'); + return null; + } + } +} diff --git a/public/css/styles.css b/public/css/styles.css index 707e3e3..4ef41d2 100644 --- a/public/css/styles.css +++ b/public/css/styles.css @@ -155,6 +155,14 @@ body { background: black; height: 100dvh; width: 100%; } + body div.conquer-select-fight div.conquer-image-container { + display: flex; + justify-content: center; + align-items: center; } + body div.conquer-select-fight div.conquer-button-container { + display: flex; + justify-content: center; + align-items: center; } body div.ol-control { display: none; } body span.round-center { diff --git a/public/css/styles.scss b/public/css/styles.scss index 879c5f2..b2e3f03 100644 --- a/public/css/styles.scss +++ b/public/css/styles.scss @@ -189,6 +189,19 @@ body { height: 100dvh; width: 100%; } + + div.conquer-select-fight { + div.conquer-image-container { + display: flex; + justify-content: center; + align-items: center; + } + div.conquer-button-container { + display: flex; + justify-content: center; + align-items: center; + } + } div.ol-control { display: none; } diff --git a/public/js/bundle.js b/public/js/bundle.js index 4fe6079..dcc4c31 100644 --- a/public/js/bundle.js +++ b/public/js/bundle.js @@ -82,6 +82,17 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac /***/ }), +/***/ "./js-src/conquer/fight-selector-slide.ts": +/*!************************************************!*\ + !*** ./js-src/conquer/fight-selector-slide.ts ***! + \************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ FightSelectorSlide)\n/* harmony export */ });\n/* harmony import */ var _burguillosinfo_conquer__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @burguillosinfo/conquer */ \"./js-src/conquer/index.ts\");\n\nclass FightSelectorSlide {\n constructor() {\n this.callbacks = {};\n }\n on(eventName, callback) {\n if (this.callbacks[eventName] === undefined) {\n this.callbacks[eventName] = [];\n }\n this.callbacks[eventName].push(callback);\n }\n runCallbacks(eventName) {\n const callbacks = this.callbacks[eventName];\n if (callbacks === undefined) {\n return;\n }\n for (const callback of callbacks) {\n callback();\n }\n }\n getSelectorSlide() {\n const selectorSlide = document.querySelector('#fight-battle-selector-slide');\n if (!(selectorSlide instanceof HTMLElement)) {\n _burguillosinfo_conquer__WEBPACK_IMPORTED_MODULE_0__[\"default\"].fail('selectorSlide is not HTMLElement');\n }\n return selectorSlide;\n }\n startHook() {\n this.createEventListeners();\n }\n getGlobalBattleButton() {\n const globalBattleButton = this.getSelectorSlide().querySelector('button.fight-global-button');\n if (!(globalBattleButton instanceof HTMLElement)) {\n _burguillosinfo_conquer__WEBPACK_IMPORTED_MODULE_0__[\"default\"].fail('globalBattleButton is not HTMLElement');\n }\n return globalBattleButton;\n }\n createEventListeners() {\n const globalBattleButton = this.getGlobalBattleButton();\n globalBattleButton.addEventListener('click', () => {\n this.runCallbacks('global-battle');\n });\n }\n show() {\n this.getSelectorSlide().classList.remove('conquer-display-none');\n }\n hide() {\n this.getSelectorSlide().classList.add('conquer-display-none');\n }\n}\n\n\n//# sourceURL=webpack://BurguillosInfo/./js-src/conquer/fight-selector-slide.ts?"); + +/***/ }), + /***/ "./js-src/conquer/index.ts": /*!*********************************!*\ !*** ./js-src/conquer/index.ts ***! @@ -89,7 +100,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ Conquer)\n/* harmony export */ });\n/* harmony import */ var ol_Map__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ol/Map */ \"./node_modules/ol/Map.js\");\n/* harmony import */ var ol_MapBrowserEvent__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ol/MapBrowserEvent */ \"./node_modules/ol/MapBrowserEvent.js\");\n/* harmony import */ var ol_View__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! ol/View */ \"./node_modules/ol/View.js\");\n/* harmony import */ var ol_proj_Projection_js__WEBPACK_IMPORTED_MODULE_22__ = __webpack_require__(/*! ol/proj/Projection.js */ \"./node_modules/ol/proj/Projection.js\");\n/* harmony import */ var ol_layer_Tile__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! ol/layer/Tile */ \"./node_modules/ol/layer/Tile.js\");\n/* harmony import */ var ol_source_OSM__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ol/source/OSM */ \"./node_modules/ol/source/OSM.js\");\n/* harmony import */ var ol_proj__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ol/proj */ \"./node_modules/ol/proj.js\");\n/* harmony import */ var ol_Feature__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ol/Feature */ \"./node_modules/ol/Feature.js\");\n/* harmony import */ var ol_geom_Point__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! ol/geom/Point */ \"./node_modules/ol/geom/Point.js\");\n/* harmony import */ var ol_layer_Vector__WEBPACK_IMPORTED_MODULE_20__ = __webpack_require__(/*! ol/layer/Vector */ \"./node_modules/ol/layer/Vector.js\");\n/* harmony import */ var ol_source_Vector__WEBPACK_IMPORTED_MODULE_21__ = __webpack_require__(/*! ol/source/Vector */ \"./node_modules/ol/source/Vector.js\");\n/* harmony import */ var ol_style_Icon__WEBPACK_IMPORTED_MODULE_19__ = __webpack_require__(/*! ol/style/Icon */ \"./node_modules/ol/style/Icon.js\");\n/* harmony import */ var ol_style_Style__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(/*! ol/style/Style */ \"./node_modules/ol/style/Style.js\");\n/* harmony import */ var _burguillosinfo_conquer_login__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @burguillosinfo/conquer/login */ \"./js-src/conquer/login.ts\");\n/* harmony import */ var _burguillosinfo_conquer_interface_manager__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @burguillosinfo/conquer/interface-manager */ \"./js-src/conquer/interface-manager.ts\");\n/* harmony import */ var _burguillosinfo_conquer_interface_self_player__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @burguillosinfo/conquer/interface/self-player */ \"./js-src/conquer/interface/self-player.ts\");\n/* harmony import */ var _burguillosinfo_conquer_create_node__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @burguillosinfo/conquer/create-node */ \"./js-src/conquer/create-node.ts\");\n/* harmony import */ var _burguillosinfo_conquer_map_state__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @burguillosinfo/conquer/map-state */ \"./js-src/conquer/map-state.ts\");\n/* harmony import */ var _burguillosinfo_conquer_map_node__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! @burguillosinfo/conquer/map-node */ \"./js-src/conquer/map-node.ts\");\n/* harmony import */ var _burguillosinfo_conquer_interface_new_node__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! @burguillosinfo/conquer/interface/new-node */ \"./js-src/conquer/interface/new-node.ts\");\n/* harmony import */ var _burguillosinfo_conquer_interface_new_team__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! @burguillosinfo/conquer/interface/new-team */ \"./js-src/conquer/interface/new-team.ts\");\n/* harmony import */ var _burguillosinfo_conquer_serializer__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! @burguillosinfo/conquer/serializer */ \"./js-src/conquer/serializer.ts\");\n/* harmony import */ var _burguillosinfo_conquer_user__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! @burguillosinfo/conquer/user */ \"./js-src/conquer/user.ts\");\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nclass Conquer {\n getServerNodes() {\n return this.serverNodes;\n }\n getState() {\n return this.state;\n }\n setState(state) {\n this.state = state;\n this.refreshState();\n }\n removeState(state) {\n this.state &= ~state;\n this.refreshState();\n }\n addState(state) {\n this.state |= state;\n this.refreshState();\n }\n refreshState() {\n this.createNodeObject.refreshState();\n return;\n }\n static start() {\n const conquerContainer = document.querySelector(\".conquer-container\");\n if (conquerContainer === null || !(conquerContainer instanceof HTMLDivElement)) {\n Conquer.fail('.conquer-container is not a div.');\n }\n const conquer = new Conquer(conquerContainer);\n conquer.run();\n }\n setCenterDisplaced(lat, lon) {\n if (this.firstSetCenter || !(this.state & _burguillosinfo_conquer_map_state__WEBPACK_IMPORTED_MODULE_5__[\"default\"].FREE_MOVE)) {\n this.coordinate_1 = lon;\n this.coordinate_2 = lat;\n const olCoordinates = this.realCoordinatesToOl(lat, lon);\n const size = this.map.getSize();\n if (size === undefined) {\n return;\n }\n this.map.getView().centerOn(olCoordinates, size, [size[0] / 2, size[1] - 60]);\n this.firstSetCenter = false;\n }\n }\n static fail(error) {\n alert('Error de interfaz');\n throw new Error(error);\n }\n isStateCreatingNode() {\n return !!(this.getState() & _burguillosinfo_conquer_map_state__WEBPACK_IMPORTED_MODULE_5__[\"default\"].CREATE_NODE);\n }\n isStateSelectWhereToCreateNode() {\n return !!(this.getState() & _burguillosinfo_conquer_map_state__WEBPACK_IMPORTED_MODULE_5__[\"default\"].SELECT_WHERE_TO_CREATE_NODE);\n }\n async onClickWhereToCreateNode(event) {\n if (!(event instanceof ol_MapBrowserEvent__WEBPACK_IMPORTED_MODULE_11__[\"default\"])) {\n return;\n }\n const pixel = event.pixel;\n const coordinates = this.map.getCoordinateFromPixel(pixel);\n const newNodeUI = new _burguillosinfo_conquer_interface_new_node__WEBPACK_IMPORTED_MODULE_7__[\"default\"](coordinates);\n const oldState = this.getState();\n newNodeUI.on('close', () => {\n this.interfaceManager.remove(newNodeUI);\n this.setState(oldState);\n });\n this.interfaceManager.push(newNodeUI);\n this.removeState(_burguillosinfo_conquer_map_state__WEBPACK_IMPORTED_MODULE_5__[\"default\"].SELECT_WHERE_TO_CREATE_NODE);\n }\n isStateFillingFormCreateNode() {\n return !!(this.getState() & _burguillosinfo_conquer_map_state__WEBPACK_IMPORTED_MODULE_5__[\"default\"].FILLING_FORM_CREATE_NODE);\n }\n async onClickMap(event) {\n if (this.isStateCreatingNode() && this.isStateSelectWhereToCreateNode()) {\n this.onClickWhereToCreateNode(event);\n }\n if (!(this.getState() & _burguillosinfo_conquer_map_state__WEBPACK_IMPORTED_MODULE_5__[\"default\"].NORMAL)) {\n return;\n }\n if (this.vectorLayer === null) {\n return;\n }\n if (!(event instanceof ol_MapBrowserEvent__WEBPACK_IMPORTED_MODULE_11__[\"default\"])) {\n return;\n }\n if (event.dragging) {\n return;\n }\n const pixel = event.pixel;\n const features = this.map.getFeaturesAtPixel(pixel);\n const feature = features.length ? features[0] : undefined;\n if (feature === undefined) {\n return;\n }\n if (!(feature instanceof ol_Feature__WEBPACK_IMPORTED_MODULE_12__[\"default\"])) {\n return;\n }\n this.onClickFeature(feature);\n }\n async onClickSelf() {\n if (!(this.state & _burguillosinfo_conquer_map_state__WEBPACK_IMPORTED_MODULE_5__[\"default\"].NORMAL)) {\n return;\n }\n const selfPlayerUI = new _burguillosinfo_conquer_interface_self_player__WEBPACK_IMPORTED_MODULE_3__[\"default\"](!!(this.getState() & (_burguillosinfo_conquer_map_state__WEBPACK_IMPORTED_MODULE_5__[\"default\"].FREE_MOVE)));\n selfPlayerUI.on('close', () => {\n this.interfaceManager.remove(selfPlayerUI);\n });\n selfPlayerUI.on('enable-explorer-mode', () => {\n this.addState(_burguillosinfo_conquer_map_state__WEBPACK_IMPORTED_MODULE_5__[\"default\"].FREE_MOVE);\n });\n selfPlayerUI.on('disable-explorer-mode', () => {\n this.removeState(_burguillosinfo_conquer_map_state__WEBPACK_IMPORTED_MODULE_5__[\"default\"].FREE_MOVE);\n });\n selfPlayerUI.on('createNodeStart', () => {\n this.addState(_burguillosinfo_conquer_map_state__WEBPACK_IMPORTED_MODULE_5__[\"default\"].CREATE_NODE);\n this.removeState(_burguillosinfo_conquer_map_state__WEBPACK_IMPORTED_MODULE_5__[\"default\"].NORMAL);\n });\n selfPlayerUI.on('open-create-team', () => {\n this.onOpenCreateTeam();\n });\n this.interfaceManager.push(selfPlayerUI);\n this.selfPlayerUI = selfPlayerUI;\n }\n onOpenCreateTeam() {\n const newTeamUI = new _burguillosinfo_conquer_interface_new_team__WEBPACK_IMPORTED_MODULE_8__[\"default\"]();\n newTeamUI.on('close', () => {\n this.interfaceManager.remove(newTeamUI);\n });\n this.interfaceManager.push(newTeamUI);\n }\n async onClickFeature(feature) {\n if (this.isFeatureEnabledMap[feature.getProperties().type] === undefined) {\n this.isFeatureEnabledMap[feature.getProperties().type] = true;\n }\n if (!this.isFeatureEnabledMap[feature.getProperties().type]) {\n return;\n }\n this.isFeatureEnabledMap[feature.getProperties().type] = false;\n window.setTimeout(() => {\n this.isFeatureEnabledMap[feature.getProperties().type] = true;\n }, 100);\n const candidateNode = this.getServerNodes()[feature.getProperties().type];\n if (candidateNode !== undefined) {\n candidateNode.click(this.interfaceManager);\n return;\n }\n if (feature === this.currentPositionFeature) {\n this.onClickSelf();\n return;\n }\n }\n async onLoginSuccess() {\n this.clearIntervalSendCoordinates();\n this.createIntervalSendCoordinates();\n this.clearIntervalPollNearbyNodes();\n this.createIntervalPollNearbyNodes();\n }\n clearIntervalPollNearbyNodes() {\n if (this.intervalPollNearbyNodes !== null) {\n window.clearInterval(this.intervalPollNearbyNodes);\n this.intervalPollNearbyNodes = null;\n }\n }\n async getNearbyNodes() {\n const urlNodes = new URL('/conquer/node/near', window.location.protocol + '//' + window.location.hostname + ':' + window.location.port);\n let response;\n try {\n response = await fetch(urlNodes);\n }\n catch (error) {\n console.error(error);\n return;\n }\n let responseBody;\n try {\n responseBody = await response.json();\n }\n catch (error) {\n console.error('Error parseando json: ' + responseBody);\n console.error(error);\n return;\n }\n if (response.status !== 200) {\n console.error(responseBody.error);\n return;\n }\n const serverNodes = {};\n const nodes = _burguillosinfo_conquer_serializer__WEBPACK_IMPORTED_MODULE_9__[\"default\"].deserialize(responseBody, _burguillosinfo_conquer_map_node__WEBPACK_IMPORTED_MODULE_6__[\"default\"]);\n if (!(nodes instanceof Array)) {\n console.error('Received null instead of node list.');\n return;\n }\n for (const node of nodes) {\n if (!(node instanceof _burguillosinfo_conquer_map_node__WEBPACK_IMPORTED_MODULE_6__[\"default\"])) {\n console.error('Received node is not a MapNode.');\n continue;\n }\n node.on('update-nodes', async () => {\n await this.sendCoordinatesToServer();\n this.getNearbyNodes();\n });\n serverNodes[node.getId()] = node;\n }\n this.serverNodes = serverNodes;\n this.refreshLayers();\n }\n createIntervalPollNearbyNodes() {\n this.getNearbyNodes();\n this.intervalPollNearbyNodes = window.setInterval(() => {\n this.getNearbyNodes();\n }, 40000);\n }\n createIntervalSendCoordinates() {\n this.intervalSendCoordinates = window.setInterval(() => {\n this.sendCoordinatesToServer();\n }, 40000);\n }\n async sendCoordinatesToServer() {\n const urlLog = new URL('/conquer/user/coordinates', window.location.protocol + '//' + window.location.hostname + ':' + window.location.port);\n let res;\n try {\n res = await fetch(urlLog, {\n method: 'POST',\n body: JSON.stringify([\n this.coordinate_1,\n this.coordinate_2,\n ])\n });\n }\n catch (error) {\n console.error(error);\n return;\n }\n let responseBody;\n try {\n responseBody = await res.json();\n }\n catch (error) {\n console.error('Error parseando json: ' + responseBody);\n console.error(error);\n return;\n }\n if (res.status !== 200) {\n console.error(responseBody.error);\n }\n }\n runPreStartState() {\n const createNodeObject = new _burguillosinfo_conquer_create_node__WEBPACK_IMPORTED_MODULE_4__[\"default\"](this);\n this.createNodeObject = createNodeObject;\n const interfaceManager = new _burguillosinfo_conquer_interface_manager__WEBPACK_IMPORTED_MODULE_2__[\"default\"]();\n this.interfaceManager = interfaceManager;\n const conquerLogin = new _burguillosinfo_conquer_login__WEBPACK_IMPORTED_MODULE_1__[\"default\"](interfaceManager);\n conquerLogin.on('login', () => {\n this.onLoginSuccess();\n });\n conquerLogin.on('logout', () => {\n this.onLogout();\n });\n conquerLogin.start();\n this.conquerLogin = conquerLogin;\n }\n onLogout() {\n this.clearIntervalSendCoordinates();\n this.clearIntervalPollNearbyNodes();\n }\n clearIntervalSendCoordinates() {\n if (this.intervalSendCoordinates !== null) {\n window.clearInterval(this.intervalSendCoordinates);\n this.intervalSendCoordinates = null;\n }\n }\n async run() {\n this.runPreStartState();\n this.setState(_burguillosinfo_conquer_map_state__WEBPACK_IMPORTED_MODULE_5__[\"default\"].NORMAL | _burguillosinfo_conquer_map_state__WEBPACK_IMPORTED_MODULE_5__[\"default\"].FREE_ROTATION);\n const conquerContainer = this.conquerContainer;\n //layer.on('prerender', (evt) => {\n // // return\n // if (evt.context) {\n // const context = evt.context as CanvasRenderingContext2D\n // context.filter = 'grayscale(80%) invert(100%) '\n // context.globalCompositeOperation = 'source-over'\n // }\n //})\n //layer.on('postrender', (evt) => {\n // if (evt.context) {\n // const context = evt.context as CanvasRenderingContext2D\n // context.filter = 'none'\n // }\n //})\n ol_proj__WEBPACK_IMPORTED_MODULE_0__.useGeographic();\n const osm = new ol_source_OSM__WEBPACK_IMPORTED_MODULE_13__[\"default\"]();\n osm.setUrls([`${window.location.protocol}//${window.location.hostname}:${window.location.port}/conquer/tile/{z}/{x}/{y}.png`]);\n this.map = new ol_Map__WEBPACK_IMPORTED_MODULE_14__[\"default\"]({\n target: conquerContainer,\n layers: [\n new ol_layer_Tile__WEBPACK_IMPORTED_MODULE_15__[\"default\"]({\n source: osm\n })\n ],\n view: new ol_View__WEBPACK_IMPORTED_MODULE_16__[\"default\"]({\n zoom: 19,\n maxZoom: 22,\n }),\n });\n this.setLocationChangeTriggers();\n this.setRotationChangeTriggers();\n }\n setRotationChangeTriggers() {\n if (window.DeviceOrientationEvent) {\n window.addEventListener(\"deviceorientation\", (event) => {\n if (event.alpha !== null && event.beta !== null && event.gamma !== null) {\n this.onRotate(event.alpha, event.beta, event.gamma);\n }\n }, true);\n }\n }\n addCurrentLocationMarkerToMap(currentLatitude, currentLongitude) {\n const currentPositionFeature = new ol_Feature__WEBPACK_IMPORTED_MODULE_12__[\"default\"]({\n type: 'currentPositionFeature',\n geometry: new ol_geom_Point__WEBPACK_IMPORTED_MODULE_17__[\"default\"](this.realCoordinatesToOl(currentLatitude, currentLongitude))\n });\n this.currentPositionFeature = currentPositionFeature;\n }\n processLocation(location) {\n this.currentLatitude = location.coords.latitude;\n this.currentLongitude = location.coords.longitude;\n if (location.coords.heading !== null && (this.alpha != 0 || this.beta != 0 || this.gamma != 0) && !this.disableSetRotationOffset) {\n this.disableSetRotationOffset = true;\n this.heading = location.coords.heading;\n this.rotationOffset = this.compassHeading(this.alpha, this.beta, this.gamma) + (location.coords.heading * Math.PI * 2) / 360;\n }\n this.setCenterDisplaced(this.currentLatitude, this.currentLongitude);\n this.addCurrentLocationMarkerToMap(this.currentLatitude, this.currentLongitude);\n this.refreshLayers();\n }\n async refreshLayers() {\n if (this.currentPositionFeature === null) {\n return;\n }\n const user = await _burguillosinfo_conquer_user__WEBPACK_IMPORTED_MODULE_10__[\"default\"].getSelfUser();\n let color = 'white';\n if (user !== null) {\n const team = await user.getTeam();\n if (team !== null) {\n color = team.getColor();\n }\n }\n const styles = {\n currentPositionFeature: new ol_style_Style__WEBPACK_IMPORTED_MODULE_18__[\"default\"]({\n image: new ol_style_Icon__WEBPACK_IMPORTED_MODULE_19__[\"default\"]({\n crossOrigin: 'anonymous',\n src: '/img/arrow-player.svg',\n color: color,\n scale: 0.2,\n rotation: this.rotation,\n rotateWithView: true,\n }),\n zIndex: 4,\n })\n };\n const features = [];\n features.push(this.currentPositionFeature);\n for (const key in this.getServerNodes()) {\n styles[key] = await this.getServerNodes()[key].getStyle();\n features.push(this.getServerNodes()[key].getFeature());\n }\n const vectorLayer = new ol_layer_Vector__WEBPACK_IMPORTED_MODULE_20__[\"default\"]({\n source: new ol_source_Vector__WEBPACK_IMPORTED_MODULE_21__[\"default\"]({\n features: features\n }),\n });\n if (this.vectorLayer !== null) {\n this.map.removeLayer(this.vectorLayer);\n this.vectorLayer = null;\n }\n vectorLayer.setStyle((feature) => {\n return styles[feature.getProperties().type];\n });\n this.map.addLayer(vectorLayer);\n this.vectorLayer = vectorLayer;\n this.map.on('click', (event) => {\n this.onClickMap(event);\n });\n }\n setLocationChangeTriggers() {\n window.setInterval(() => {\n this.disableSetRotationOffset = false;\n }, 10000);\n this.currentPositionFeature = null;\n window.setTimeout(() => {\n window.setInterval(() => {\n navigator.geolocation.getCurrentPosition((location) => {\n this.processLocation(location);\n }, () => {\n return;\n }, {\n enableHighAccuracy: true,\n });\n }, 3000);\n }, 1000);\n // const initialLatitude = 37.58237\n //const initialLongitude = -5.96766\n const initialLongitude = 2.500845037550267;\n const initialLatitude = 48.81050698635832;\n this.setCenterDisplaced(initialLatitude, initialLongitude);\n this.addCurrentLocationMarkerToMap(initialLatitude, initialLongitude);\n this.refreshLayers();\n navigator.geolocation.watchPosition((location) => {\n this.processLocation(location);\n }, (err) => {\n return;\n }, {\n enableHighAccuracy: true,\n });\n }\n realCoordinatesToOl(lat, lon) {\n return ol_proj__WEBPACK_IMPORTED_MODULE_0__.transform([lon, lat], new ol_proj_Projection_js__WEBPACK_IMPORTED_MODULE_22__[\"default\"]({ code: \"WGS84\" }), new ol_proj_Projection_js__WEBPACK_IMPORTED_MODULE_22__[\"default\"]({ code: \"EPSG:900913\" }));\n }\n compassHeading(alpha, beta, gamma) {\n const alphaRad = alpha * (Math.PI / 180);\n return alphaRad;\n }\n logToServer(logValue) {\n const urlLog = new URL('/conquer/log', window.location.protocol + '//' + window.location.hostname + ':' + window.location.port);\n urlLog.searchParams.append('log', logValue);\n fetch(urlLog).then(() => {\n return;\n }).catch((error) => {\n console.error(error);\n });\n }\n onRotate(alpha, beta, gamma) {\n if (this.enabledOnRotate) {\n this.alpha = alpha;\n this.beta = beta;\n this.gamma = gamma;\n this.enabledOnRotate = false;\n this.rotation = -(this.compassHeading(alpha, beta, gamma) - this.rotationOffset);\n if (this.currentPositionFeature !== null) {\n this.currentPositionFeature.changed();\n }\n if (this.firstSetRotation || !(this.state & _burguillosinfo_conquer_map_state__WEBPACK_IMPORTED_MODULE_5__[\"default\"].FREE_ROTATION)) {\n this.map.getView().setRotation((this.compassHeading(alpha, beta, gamma) - this.rotationOffset));\n this.firstSetRotation = false;\n }\n window.setTimeout(() => {\n this.enabledOnRotate = true;\n }, 10);\n }\n this.setCenterDisplaced(this.currentLatitude, this.currentLongitude);\n }\n constructor(conquerContainer) {\n this.enabledOnRotate = true;\n this.rotation = 0;\n this.intervalSendCoordinates = null;\n this.rotationOffset = 0;\n this.heading = 0;\n this.disableSetRotationOffset = false;\n this.vectorLayer = null;\n this.alpha = 0;\n this.beta = 0;\n this.gamma = 0;\n this.selfPlayerUI = null;\n this.firstSetCenter = true;\n this.firstSetRotation = true;\n this.state = _burguillosinfo_conquer_map_state__WEBPACK_IMPORTED_MODULE_5__[\"default\"].NOTHING;\n this.serverNodes = {};\n this.coordinate_1 = 0;\n this.coordinate_2 = 0;\n this.createNodeCounter = 0;\n this.isFeatureEnabledMap = {};\n this.intervalPollNearbyNodes = null;\n this.conquerContainer = conquerContainer;\n }\n}\n\n\n//# sourceURL=webpack://BurguillosInfo/./js-src/conquer/index.ts?"); +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ Conquer)\n/* harmony export */ });\n/* harmony import */ var ol_Map__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! ol/Map */ \"./node_modules/ol/Map.js\");\n/* harmony import */ var ol_MapBrowserEvent__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ol/MapBrowserEvent */ \"./node_modules/ol/MapBrowserEvent.js\");\n/* harmony import */ var ol_View__WEBPACK_IMPORTED_MODULE_19__ = __webpack_require__(/*! ol/View */ \"./node_modules/ol/View.js\");\n/* harmony import */ var ol_proj_Projection_js__WEBPACK_IMPORTED_MODULE_25__ = __webpack_require__(/*! ol/proj/Projection.js */ \"./node_modules/ol/proj/Projection.js\");\n/* harmony import */ var ol_layer_Tile__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(/*! ol/layer/Tile */ \"./node_modules/ol/layer/Tile.js\");\n/* harmony import */ var ol_source_OSM__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! ol/source/OSM */ \"./node_modules/ol/source/OSM.js\");\n/* harmony import */ var ol_proj__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ol/proj */ \"./node_modules/ol/proj.js\");\n/* harmony import */ var ol_Feature__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! ol/Feature */ \"./node_modules/ol/Feature.js\");\n/* harmony import */ var ol_geom_Point__WEBPACK_IMPORTED_MODULE_20__ = __webpack_require__(/*! ol/geom/Point */ \"./node_modules/ol/geom/Point.js\");\n/* harmony import */ var ol_layer_Vector__WEBPACK_IMPORTED_MODULE_23__ = __webpack_require__(/*! ol/layer/Vector */ \"./node_modules/ol/layer/Vector.js\");\n/* harmony import */ var ol_source_Vector__WEBPACK_IMPORTED_MODULE_24__ = __webpack_require__(/*! ol/source/Vector */ \"./node_modules/ol/source/Vector.js\");\n/* harmony import */ var ol_style_Icon__WEBPACK_IMPORTED_MODULE_22__ = __webpack_require__(/*! ol/style/Icon */ \"./node_modules/ol/style/Icon.js\");\n/* harmony import */ var ol_style_Style__WEBPACK_IMPORTED_MODULE_21__ = __webpack_require__(/*! ol/style/Style */ \"./node_modules/ol/style/Style.js\");\n/* harmony import */ var _burguillosinfo_conquer_login__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @burguillosinfo/conquer/login */ \"./js-src/conquer/login.ts\");\n/* harmony import */ var _burguillosinfo_conquer_interface_manager__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @burguillosinfo/conquer/interface-manager */ \"./js-src/conquer/interface-manager.ts\");\n/* harmony import */ var _burguillosinfo_conquer_interface_self_player__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @burguillosinfo/conquer/interface/self-player */ \"./js-src/conquer/interface/self-player.ts\");\n/* harmony import */ var _burguillosinfo_conquer_create_node__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @burguillosinfo/conquer/create-node */ \"./js-src/conquer/create-node.ts\");\n/* harmony import */ var _burguillosinfo_conquer_map_state__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @burguillosinfo/conquer/map-state */ \"./js-src/conquer/map-state.ts\");\n/* harmony import */ var _burguillosinfo_conquer_map_node__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! @burguillosinfo/conquer/map-node */ \"./js-src/conquer/map-node.ts\");\n/* harmony import */ var _burguillosinfo_conquer_interface_new_node__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! @burguillosinfo/conquer/interface/new-node */ \"./js-src/conquer/interface/new-node.ts\");\n/* harmony import */ var _burguillosinfo_conquer_interface_new_team__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! @burguillosinfo/conquer/interface/new-team */ \"./js-src/conquer/interface/new-team.ts\");\n/* harmony import */ var _burguillosinfo_conquer_serializer__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! @burguillosinfo/conquer/serializer */ \"./js-src/conquer/serializer.ts\");\n/* harmony import */ var _burguillosinfo_conquer_user__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! @burguillosinfo/conquer/user */ \"./js-src/conquer/user.ts\");\n/* harmony import */ var _burguillosinfo_conquer_fight_selector_slide__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! @burguillosinfo/conquer/fight-selector-slide */ \"./js-src/conquer/fight-selector-slide.ts\");\n/* harmony import */ var _burguillosinfo_conquer_interface_select_fight__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! @burguillosinfo/conquer/interface/select-fight */ \"./js-src/conquer/interface/select-fight.ts\");\n/* harmony import */ var _burguillosinfo_conquer_user_current_enemy__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! @burguillosinfo/conquer/user-current-enemy */ \"./js-src/conquer/user-current-enemy.ts\");\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nclass Conquer {\n getServerNodes() {\n return this.serverNodes;\n }\n getState() {\n return this.state;\n }\n setState(state) {\n this.state = state;\n this.refreshState();\n }\n removeState(state) {\n this.state &= ~state;\n this.refreshState();\n }\n addState(state) {\n this.state |= state;\n this.refreshState();\n }\n refreshFightSlide() {\n if (this.loggedIn && (this.getState() & _burguillosinfo_conquer_map_state__WEBPACK_IMPORTED_MODULE_5__[\"default\"].NORMAL) !== 0) {\n this.fightSelectorSlide.show();\n }\n if (!this.loggedIn) {\n this.fightSelectorSlide.hide();\n }\n }\n refreshState() {\n this.refreshFightSlide();\n this.createNodeObject.refreshState();\n return;\n }\n static start() {\n const conquerContainer = document.querySelector(\".conquer-container\");\n if (conquerContainer === null || !(conquerContainer instanceof HTMLDivElement)) {\n Conquer.fail('.conquer-container is not a div.');\n }\n const conquer = new Conquer(conquerContainer);\n conquer.run();\n }\n setCenterDisplaced(lat, lon) {\n if (this.firstSetCenter || !(this.state & _burguillosinfo_conquer_map_state__WEBPACK_IMPORTED_MODULE_5__[\"default\"].FREE_MOVE)) {\n this.coordinate_1 = lon;\n this.coordinate_2 = lat;\n const olCoordinates = this.realCoordinatesToOl(lat, lon);\n const size = this.map.getSize();\n if (size === undefined) {\n return;\n }\n this.map.getView().centerOn(olCoordinates, size, [size[0] / 2, size[1] - 60]);\n this.firstSetCenter = false;\n }\n }\n static fail(error) {\n alert('Error de interfaz');\n throw new Error(error);\n }\n isStateCreatingNode() {\n return !!(this.getState() & _burguillosinfo_conquer_map_state__WEBPACK_IMPORTED_MODULE_5__[\"default\"].CREATE_NODE);\n }\n isStateSelectWhereToCreateNode() {\n return !!(this.getState() & _burguillosinfo_conquer_map_state__WEBPACK_IMPORTED_MODULE_5__[\"default\"].SELECT_WHERE_TO_CREATE_NODE);\n }\n async onClickWhereToCreateNode(event) {\n if (!(event instanceof ol_MapBrowserEvent__WEBPACK_IMPORTED_MODULE_14__[\"default\"])) {\n return;\n }\n const pixel = event.pixel;\n const coordinates = this.map.getCoordinateFromPixel(pixel);\n const newNodeUI = new _burguillosinfo_conquer_interface_new_node__WEBPACK_IMPORTED_MODULE_7__[\"default\"](coordinates);\n const oldState = this.getState();\n newNodeUI.on('close', () => {\n this.interfaceManager.remove(newNodeUI);\n this.setState(oldState);\n });\n this.interfaceManager.push(newNodeUI);\n this.removeState(_burguillosinfo_conquer_map_state__WEBPACK_IMPORTED_MODULE_5__[\"default\"].SELECT_WHERE_TO_CREATE_NODE);\n }\n isStateFillingFormCreateNode() {\n return !!(this.getState() & _burguillosinfo_conquer_map_state__WEBPACK_IMPORTED_MODULE_5__[\"default\"].FILLING_FORM_CREATE_NODE);\n }\n async onClickMap(event) {\n if (this.isStateCreatingNode() && this.isStateSelectWhereToCreateNode()) {\n this.onClickWhereToCreateNode(event);\n }\n if (!(this.getState() & _burguillosinfo_conquer_map_state__WEBPACK_IMPORTED_MODULE_5__[\"default\"].NORMAL)) {\n return;\n }\n if (this.vectorLayer === null) {\n return;\n }\n if (!(event instanceof ol_MapBrowserEvent__WEBPACK_IMPORTED_MODULE_14__[\"default\"])) {\n return;\n }\n if (event.dragging) {\n return;\n }\n const pixel = event.pixel;\n const features = this.map.getFeaturesAtPixel(pixel);\n const feature = features.length ? features[0] : undefined;\n if (feature === undefined) {\n return;\n }\n if (!(feature instanceof ol_Feature__WEBPACK_IMPORTED_MODULE_15__[\"default\"])) {\n return;\n }\n this.onClickFeature(feature);\n }\n async onClickSelf() {\n if (!(this.state & _burguillosinfo_conquer_map_state__WEBPACK_IMPORTED_MODULE_5__[\"default\"].NORMAL)) {\n return;\n }\n const selfPlayerUI = new _burguillosinfo_conquer_interface_self_player__WEBPACK_IMPORTED_MODULE_3__[\"default\"](!!(this.getState() & (_burguillosinfo_conquer_map_state__WEBPACK_IMPORTED_MODULE_5__[\"default\"].FREE_MOVE)));\n selfPlayerUI.on('close', () => {\n this.interfaceManager.remove(selfPlayerUI);\n });\n selfPlayerUI.on('enable-explorer-mode', () => {\n this.addState(_burguillosinfo_conquer_map_state__WEBPACK_IMPORTED_MODULE_5__[\"default\"].FREE_MOVE);\n });\n selfPlayerUI.on('disable-explorer-mode', () => {\n this.removeState(_burguillosinfo_conquer_map_state__WEBPACK_IMPORTED_MODULE_5__[\"default\"].FREE_MOVE);\n });\n selfPlayerUI.on('createNodeStart', () => {\n this.addState(_burguillosinfo_conquer_map_state__WEBPACK_IMPORTED_MODULE_5__[\"default\"].CREATE_NODE);\n this.removeState(_burguillosinfo_conquer_map_state__WEBPACK_IMPORTED_MODULE_5__[\"default\"].NORMAL);\n });\n selfPlayerUI.on('open-create-team', () => {\n this.onOpenCreateTeam();\n });\n this.interfaceManager.push(selfPlayerUI);\n this.selfPlayerUI = selfPlayerUI;\n }\n onOpenCreateTeam() {\n const newTeamUI = new _burguillosinfo_conquer_interface_new_team__WEBPACK_IMPORTED_MODULE_8__[\"default\"]();\n newTeamUI.on('close', () => {\n this.interfaceManager.remove(newTeamUI);\n });\n this.interfaceManager.push(newTeamUI);\n }\n async onClickFeature(feature) {\n if (this.isFeatureEnabledMap[feature.getProperties().type] === undefined) {\n this.isFeatureEnabledMap[feature.getProperties().type] = true;\n }\n if (!this.isFeatureEnabledMap[feature.getProperties().type]) {\n return;\n }\n this.isFeatureEnabledMap[feature.getProperties().type] = false;\n window.setTimeout(() => {\n this.isFeatureEnabledMap[feature.getProperties().type] = true;\n }, 100);\n const candidateNode = this.getServerNodes()[feature.getProperties().type];\n if (candidateNode !== undefined) {\n candidateNode.click(this.interfaceManager);\n return;\n }\n if (feature === this.currentPositionFeature) {\n this.onClickSelf();\n return;\n }\n }\n async onLoginSuccess() {\n this.loggedIn = true;\n this.refreshFightSlide();\n this.clearIntervalSendCoordinates();\n this.createIntervalSendCoordinates();\n this.clearIntervalPollNearbyNodes();\n this.createIntervalPollNearbyNodes();\n }\n clearIntervalPollNearbyNodes() {\n if (this.intervalPollNearbyNodes !== null) {\n window.clearInterval(this.intervalPollNearbyNodes);\n this.intervalPollNearbyNodes = null;\n }\n }\n async getNearbyNodes() {\n const urlNodes = new URL('/conquer/node/near', window.location.protocol + '//' + window.location.hostname + ':' + window.location.port);\n let response;\n try {\n response = await fetch(urlNodes);\n }\n catch (error) {\n console.error(error);\n return;\n }\n let responseBody;\n try {\n responseBody = await response.json();\n }\n catch (error) {\n console.error('Error parseando json: ' + responseBody);\n console.error(error);\n return;\n }\n if (response.status !== 200) {\n console.error(responseBody.error);\n return;\n }\n const serverNodes = {};\n const nodes = _burguillosinfo_conquer_serializer__WEBPACK_IMPORTED_MODULE_9__[\"default\"].deserialize(responseBody, _burguillosinfo_conquer_map_node__WEBPACK_IMPORTED_MODULE_6__[\"default\"]);\n if (!(nodes instanceof Array)) {\n console.error('Received null instead of node list.');\n return;\n }\n for (const node of nodes) {\n if (!(node instanceof _burguillosinfo_conquer_map_node__WEBPACK_IMPORTED_MODULE_6__[\"default\"])) {\n console.error('Received node is not a MapNode.');\n continue;\n }\n node.on('update-nodes', async () => {\n await this.sendCoordinatesToServer();\n this.getNearbyNodes();\n });\n serverNodes[node.getId()] = node;\n }\n this.serverNodes = serverNodes;\n this.refreshLayers();\n }\n createIntervalPollNearbyNodes() {\n this.getNearbyNodes();\n this.intervalPollNearbyNodes = window.setInterval(() => {\n this.getNearbyNodes();\n }, 40000);\n }\n createIntervalSendCoordinates() {\n this.intervalSendCoordinates = window.setInterval(() => {\n this.sendCoordinatesToServer();\n }, 40000);\n }\n async sendCoordinatesToServer() {\n const urlLog = new URL('/conquer/user/coordinates', window.location.protocol + '//' + window.location.hostname + ':' + window.location.port);\n let res;\n try {\n res = await fetch(urlLog, {\n method: 'POST',\n body: JSON.stringify([\n this.coordinate_1,\n this.coordinate_2,\n ])\n });\n }\n catch (error) {\n console.error(error);\n return;\n }\n let responseBody;\n try {\n responseBody = await res.json();\n }\n catch (error) {\n console.error('Error parseando json: ' + responseBody);\n console.error(error);\n return;\n }\n if (res.status !== 200) {\n console.error(responseBody.error);\n }\n }\n runPreStartState() {\n const createNodeObject = new _burguillosinfo_conquer_create_node__WEBPACK_IMPORTED_MODULE_4__[\"default\"](this);\n this.createNodeObject = createNodeObject;\n const interfaceManager = new _burguillosinfo_conquer_interface_manager__WEBPACK_IMPORTED_MODULE_2__[\"default\"]();\n this.interfaceManager = interfaceManager;\n const conquerLogin = new _burguillosinfo_conquer_login__WEBPACK_IMPORTED_MODULE_1__[\"default\"](interfaceManager);\n conquerLogin.on('login', () => {\n this.onLoginSuccess();\n });\n conquerLogin.on('logout', () => {\n this.onLogout();\n });\n conquerLogin.start();\n this.conquerLogin = conquerLogin;\n this.fightSelectorSlide = new _burguillosinfo_conquer_fight_selector_slide__WEBPACK_IMPORTED_MODULE_11__[\"default\"]();\n this.fightSelectorSlide.on('global-battle', () => {\n this.startGlobalBattleSelector();\n });\n this.fightSelectorSlide.startHook();\n }\n async startGlobalBattleSelector() {\n const enemies = await _burguillosinfo_conquer_user_current_enemy__WEBPACK_IMPORTED_MODULE_13__[\"default\"].getGlobalEnemies();\n if (enemies !== null) {\n const selectFightUI = new _burguillosinfo_conquer_interface_select_fight__WEBPACK_IMPORTED_MODULE_12__[\"default\"](enemies);\n selectFightUI.on('close', () => {\n this.interfaceManager.remove(selectFightUI);\n });\n this.interfaceManager.push(selectFightUI);\n }\n }\n onLogout() {\n this.loggedIn = false;\n this.refreshFightSlide();\n this.clearIntervalSendCoordinates();\n this.clearIntervalPollNearbyNodes();\n }\n clearIntervalSendCoordinates() {\n if (this.intervalSendCoordinates !== null) {\n window.clearInterval(this.intervalSendCoordinates);\n this.intervalSendCoordinates = null;\n }\n }\n async run() {\n this.runPreStartState();\n this.setState(_burguillosinfo_conquer_map_state__WEBPACK_IMPORTED_MODULE_5__[\"default\"].NORMAL | _burguillosinfo_conquer_map_state__WEBPACK_IMPORTED_MODULE_5__[\"default\"].FREE_ROTATION);\n const conquerContainer = this.conquerContainer;\n //layer.on('prerender', (evt) => {\n // // return\n // if (evt.context) {\n // const context = evt.context as CanvasRenderingContext2D\n // context.filter = 'grayscale(80%) invert(100%) '\n // context.globalCompositeOperation = 'source-over'\n // }\n //})\n //layer.on('postrender', (evt) => {\n // if (evt.context) {\n // const context = evt.context as CanvasRenderingContext2D\n // context.filter = 'none'\n // }\n //})\n ol_proj__WEBPACK_IMPORTED_MODULE_0__.useGeographic();\n const osm = new ol_source_OSM__WEBPACK_IMPORTED_MODULE_16__[\"default\"]();\n osm.setUrls([`${window.location.protocol}//${window.location.hostname}:${window.location.port}/conquer/tile/{z}/{x}/{y}.png`]);\n this.map = new ol_Map__WEBPACK_IMPORTED_MODULE_17__[\"default\"]({\n target: conquerContainer,\n layers: [\n new ol_layer_Tile__WEBPACK_IMPORTED_MODULE_18__[\"default\"]({\n source: osm\n })\n ],\n view: new ol_View__WEBPACK_IMPORTED_MODULE_19__[\"default\"]({\n zoom: 19,\n maxZoom: 22,\n }),\n });\n this.setLocationChangeTriggers();\n this.setRotationChangeTriggers();\n }\n setRotationChangeTriggers() {\n if (window.DeviceOrientationEvent) {\n window.addEventListener(\"deviceorientation\", (event) => {\n if (event.alpha !== null && event.beta !== null && event.gamma !== null) {\n this.onRotate(event.alpha, event.beta, event.gamma);\n }\n }, true);\n }\n }\n addCurrentLocationMarkerToMap(currentLatitude, currentLongitude) {\n const currentPositionFeature = new ol_Feature__WEBPACK_IMPORTED_MODULE_15__[\"default\"]({\n type: 'currentPositionFeature',\n geometry: new ol_geom_Point__WEBPACK_IMPORTED_MODULE_20__[\"default\"](this.realCoordinatesToOl(currentLatitude, currentLongitude))\n });\n this.currentPositionFeature = currentPositionFeature;\n }\n processLocation(location) {\n this.currentLatitude = location.coords.latitude;\n this.currentLongitude = location.coords.longitude;\n if (location.coords.heading !== null && (this.alpha != 0 || this.beta != 0 || this.gamma != 0) && !this.disableSetRotationOffset) {\n this.disableSetRotationOffset = true;\n this.heading = location.coords.heading;\n this.rotationOffset = this.compassHeading(this.alpha, this.beta, this.gamma) + (location.coords.heading * Math.PI * 2) / 360;\n }\n this.setCenterDisplaced(this.currentLatitude, this.currentLongitude);\n this.addCurrentLocationMarkerToMap(this.currentLatitude, this.currentLongitude);\n this.refreshLayers();\n }\n async refreshLayers() {\n if (this.currentPositionFeature === null) {\n return;\n }\n const user = await _burguillosinfo_conquer_user__WEBPACK_IMPORTED_MODULE_10__[\"default\"].getSelfUser();\n let color = 'white';\n if (user !== null) {\n const team = await user.getTeam();\n if (team !== null) {\n color = team.getColor();\n }\n }\n const styles = {\n currentPositionFeature: new ol_style_Style__WEBPACK_IMPORTED_MODULE_21__[\"default\"]({\n image: new ol_style_Icon__WEBPACK_IMPORTED_MODULE_22__[\"default\"]({\n crossOrigin: 'anonymous',\n src: '/img/arrow-player.svg',\n color: color,\n scale: 0.2,\n rotation: this.rotation,\n rotateWithView: true,\n }),\n zIndex: 4,\n })\n };\n const features = [];\n features.push(this.currentPositionFeature);\n for (const key in this.getServerNodes()) {\n styles[key] = await this.getServerNodes()[key].getStyle();\n features.push(this.getServerNodes()[key].getFeature());\n }\n const vectorLayer = new ol_layer_Vector__WEBPACK_IMPORTED_MODULE_23__[\"default\"]({\n source: new ol_source_Vector__WEBPACK_IMPORTED_MODULE_24__[\"default\"]({\n features: features\n }),\n });\n if (this.vectorLayer !== null) {\n this.map.removeLayer(this.vectorLayer);\n this.vectorLayer = null;\n }\n vectorLayer.setStyle((feature) => {\n return styles[feature.getProperties().type];\n });\n this.map.addLayer(vectorLayer);\n this.vectorLayer = vectorLayer;\n this.map.on('click', (event) => {\n this.onClickMap(event);\n });\n }\n setLocationChangeTriggers() {\n window.setInterval(() => {\n this.disableSetRotationOffset = false;\n }, 10000);\n this.currentPositionFeature = null;\n window.setTimeout(() => {\n window.setInterval(() => {\n navigator.geolocation.getCurrentPosition((location) => {\n this.processLocation(location);\n }, () => {\n return;\n }, {\n enableHighAccuracy: true,\n });\n }, 3000);\n }, 1000);\n // const initialLatitude = 37.58237\n //const initialLongitude = -5.96766\n const initialLongitude = 2.500845037550267;\n const initialLatitude = 48.81050698635832;\n this.setCenterDisplaced(initialLatitude, initialLongitude);\n this.addCurrentLocationMarkerToMap(initialLatitude, initialLongitude);\n this.refreshLayers();\n navigator.geolocation.watchPosition((location) => {\n this.processLocation(location);\n }, (err) => {\n return;\n }, {\n enableHighAccuracy: true,\n });\n }\n realCoordinatesToOl(lat, lon) {\n return ol_proj__WEBPACK_IMPORTED_MODULE_0__.transform([lon, lat], new ol_proj_Projection_js__WEBPACK_IMPORTED_MODULE_25__[\"default\"]({ code: \"WGS84\" }), new ol_proj_Projection_js__WEBPACK_IMPORTED_MODULE_25__[\"default\"]({ code: \"EPSG:900913\" }));\n }\n compassHeading(alpha, beta, gamma) {\n const alphaRad = alpha * (Math.PI / 180);\n return alphaRad;\n }\n logToServer(logValue) {\n const urlLog = new URL('/conquer/log', window.location.protocol + '//' + window.location.hostname + ':' + window.location.port);\n urlLog.searchParams.append('log', logValue);\n fetch(urlLog).then(() => {\n return;\n }).catch((error) => {\n console.error(error);\n });\n }\n onRotate(alpha, beta, gamma) {\n if (this.enabledOnRotate) {\n this.alpha = alpha;\n this.beta = beta;\n this.gamma = gamma;\n this.enabledOnRotate = false;\n this.rotation = -(this.compassHeading(alpha, beta, gamma) - this.rotationOffset);\n if (this.currentPositionFeature !== null) {\n this.currentPositionFeature.changed();\n }\n if (this.firstSetRotation || !(this.state & _burguillosinfo_conquer_map_state__WEBPACK_IMPORTED_MODULE_5__[\"default\"].FREE_ROTATION)) {\n this.map.getView().setRotation((this.compassHeading(alpha, beta, gamma) - this.rotationOffset));\n this.firstSetRotation = false;\n }\n window.setTimeout(() => {\n this.enabledOnRotate = true;\n }, 10);\n }\n this.setCenterDisplaced(this.currentLatitude, this.currentLongitude);\n }\n constructor(conquerContainer) {\n this.enabledOnRotate = true;\n this.rotation = 0;\n this.intervalSendCoordinates = null;\n this.rotationOffset = 0;\n this.heading = 0;\n this.disableSetRotationOffset = false;\n this.vectorLayer = null;\n this.alpha = 0;\n this.beta = 0;\n this.gamma = 0;\n this.selfPlayerUI = null;\n this.firstSetCenter = true;\n this.firstSetRotation = true;\n this.state = _burguillosinfo_conquer_map_state__WEBPACK_IMPORTED_MODULE_5__[\"default\"].NOTHING;\n this.serverNodes = {};\n this.coordinate_1 = 0;\n this.coordinate_2 = 0;\n this.loggedIn = false;\n this.createNodeCounter = 0;\n this.isFeatureEnabledMap = {};\n this.intervalPollNearbyNodes = null;\n this.conquerContainer = conquerContainer;\n }\n}\n\n\n//# sourceURL=webpack://BurguillosInfo/./js-src/conquer/index.ts?"); /***/ }), @@ -170,6 +181,17 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac /***/ }), +/***/ "./js-src/conquer/interface/select-fight.ts": +/*!**************************************************!*\ + !*** ./js-src/conquer/interface/select-fight.ts ***! + \**************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ SelectFightUI)\n/* harmony export */ });\n/* harmony import */ var _burguillosinfo_conquer__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @burguillosinfo/conquer */ \"./js-src/conquer/index.ts\");\n/* harmony import */ var _burguillosinfo_conquer_user__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @burguillosinfo/conquer/user */ \"./js-src/conquer/user.ts\");\n/* harmony import */ var _burguillosinfo_conquer_interface_abstract_top_bar_interface__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @burguillosinfo/conquer/interface/abstract-top-bar-interface */ \"./js-src/conquer/interface/abstract-top-bar-interface.ts\");\n\n\n\nclass SelectFightUI extends _burguillosinfo_conquer_interface_abstract_top_bar_interface__WEBPACK_IMPORTED_MODULE_2__[\"default\"] {\n constructor(enemies) {\n super();\n this.form = null;\n this.enemies = enemies;\n }\n async run() {\n const user = await _burguillosinfo_conquer_user__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getSelfUser();\n if (user === null) {\n this.runCallbacks('close');\n return;\n }\n this.getMainNode().append(this.getForm());\n this.populateEnemies();\n this.getMainNode().classList.remove('conquer-display-none');\n }\n populateEnemies() {\n for (const enemy of this.enemies) {\n this.appendEnemy(enemy);\n }\n }\n appendEnemy(enemy) {\n const form = this.getForm();\n const enemyNode = this.getNodeFromTemplateId('conquer-select-fight-item-template');\n this.getNameEnemyNodeElement(enemyNode).innerText = enemy.getSpecies().getName();\n this.getLevelEnemyNodeElement(enemyNode).innerText = '' + enemy.getLevel();\n this.getImageEnemyNodeElement(enemyNode).src = enemy.getSpecies().getImage();\n form.append(enemyNode);\n }\n getImageEnemyNodeElement(enemyNode) {\n const conquerImage = enemyNode.querySelector('.conquer-image');\n if (!(conquerImage instanceof HTMLImageElement)) {\n _burguillosinfo_conquer__WEBPACK_IMPORTED_MODULE_0__[\"default\"].fail('conquerImage is not HTMLImageElement.');\n }\n return conquerImage;\n }\n getLevelEnemyNodeElement(enemyNode) {\n const conquerLevel = enemyNode.querySelector('.conquer-level');\n if (!(conquerLevel instanceof HTMLElement)) {\n _burguillosinfo_conquer__WEBPACK_IMPORTED_MODULE_0__[\"default\"].fail('conquerLevel is not HTMLElement.');\n }\n return conquerLevel;\n }\n getNameEnemyNodeElement(enemyNode) {\n const conquerName = enemyNode.querySelector('.conquer-name');\n if (!(conquerName instanceof HTMLElement)) {\n _burguillosinfo_conquer__WEBPACK_IMPORTED_MODULE_0__[\"default\"].fail('conquerName is not HTMLElement.');\n }\n return conquerName;\n }\n getForm() {\n if (this.form === null) {\n const form = this.getNodeFromTemplateId('conquer-select-fight-list-template');\n this.form = form;\n }\n return this.form;\n }\n}\n\n\n//# sourceURL=webpack://BurguillosInfo/./js-src/conquer/interface/select-fight.ts?"); + +/***/ }), + /***/ "./js-src/conquer/interface/select-team.ts": /*!*************************************************!*\ !*** ./js-src/conquer/interface/select-team.ts ***! @@ -236,6 +258,17 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac /***/ }), +/***/ "./js-src/conquer/specie.ts": +/*!**********************************!*\ + !*** ./js-src/conquer/specie.ts ***! + \**********************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var typescript_json_serializer__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! typescript-json-serializer */ \"./node_modules/typescript-json-serializer/dist/index.esm.js\");\nvar __decorate = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar __metadata = (undefined && undefined.__metadata) || function (k, v) {\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\n};\n\nlet Specie = class Specie {\n getId() {\n return this.id;\n }\n getName() {\n return this.name;\n }\n getImage() {\n return this.image;\n }\n};\n__decorate([\n (0,typescript_json_serializer__WEBPACK_IMPORTED_MODULE_0__.JsonProperty)(),\n __metadata(\"design:type\", String)\n], Specie.prototype, \"id\", void 0);\n__decorate([\n (0,typescript_json_serializer__WEBPACK_IMPORTED_MODULE_0__.JsonProperty)(),\n __metadata(\"design:type\", String)\n], Specie.prototype, \"name\", void 0);\n__decorate([\n (0,typescript_json_serializer__WEBPACK_IMPORTED_MODULE_0__.JsonProperty)(),\n __metadata(\"design:type\", String)\n], Specie.prototype, \"image\", void 0);\nSpecie = __decorate([\n (0,typescript_json_serializer__WEBPACK_IMPORTED_MODULE_0__.JsonObject)()\n], Specie);\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (Specie);\n\n\n//# sourceURL=webpack://BurguillosInfo/./js-src/conquer/specie.ts?"); + +/***/ }), + /***/ "./js-src/conquer/team.ts": /*!********************************!*\ !*** ./js-src/conquer/team.ts ***! @@ -247,6 +280,17 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac /***/ }), +/***/ "./js-src/conquer/user-current-enemy.ts": +/*!**********************************************!*\ + !*** ./js-src/conquer/user-current-enemy.ts ***! + \**********************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var typescript_json_serializer__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! typescript-json-serializer */ \"./node_modules/typescript-json-serializer/dist/index.esm.js\");\n/* harmony import */ var _burguillosinfo_conquer_specie__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @burguillosinfo/conquer/specie */ \"./js-src/conquer/specie.ts\");\n/* harmony import */ var _burguillosinfo_conquer_serializer__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @burguillosinfo/conquer/serializer */ \"./js-src/conquer/serializer.ts\");\nvar __decorate = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar __metadata = (undefined && undefined.__metadata) || function (k, v) {\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\n};\nvar ConquerUserCurrentEnemy_1;\n\n\n\nlet ConquerUserCurrentEnemy = ConquerUserCurrentEnemy_1 = class ConquerUserCurrentEnemy {\n getUUID() {\n return this.uuid;\n }\n getSpecies() {\n return this.species;\n }\n getLevel() {\n return this.level;\n }\n getMaxHealth() {\n return this.max_health;\n }\n static async getGlobalEnemies() {\n const urlEnemies = new URL('/conquer/user/enemies/global', window.location.protocol + '//' + window.location.hostname + ':' + window.location.port);\n const response = await fetch(urlEnemies);\n let responseBody;\n try {\n responseBody = await response.json();\n if (response.status !== 200) {\n console.error(responseBody.error);\n return null;\n }\n const enemiesRaw = _burguillosinfo_conquer_serializer__WEBPACK_IMPORTED_MODULE_2__[\"default\"].deserialize(responseBody, ConquerUserCurrentEnemy_1);\n const enemiesReturnArray = [];\n if (!(enemiesRaw instanceof Array)) {\n console.error('Incorrect type retrieved from ' + urlEnemies);\n return null;\n }\n for (const enemy of enemiesRaw) {\n if (!(enemy instanceof ConquerUserCurrentEnemy_1)) {\n console.error('Incorrect type for enemy, maybe null or undef.', enemy);\n return null;\n }\n enemiesReturnArray.push(enemy);\n }\n return enemiesReturnArray;\n }\n catch (error) {\n console.error(error, 'Invalid response from server seeking for possible battles.');\n return null;\n }\n }\n};\n__decorate([\n (0,typescript_json_serializer__WEBPACK_IMPORTED_MODULE_0__.JsonProperty)(),\n __metadata(\"design:type\", String)\n], ConquerUserCurrentEnemy.prototype, \"uuid\", void 0);\n__decorate([\n (0,typescript_json_serializer__WEBPACK_IMPORTED_MODULE_0__.JsonProperty)(),\n __metadata(\"design:type\", _burguillosinfo_conquer_specie__WEBPACK_IMPORTED_MODULE_1__[\"default\"])\n], ConquerUserCurrentEnemy.prototype, \"species\", void 0);\n__decorate([\n (0,typescript_json_serializer__WEBPACK_IMPORTED_MODULE_0__.JsonProperty)(),\n __metadata(\"design:type\", Number)\n], ConquerUserCurrentEnemy.prototype, \"level\", void 0);\n__decorate([\n (0,typescript_json_serializer__WEBPACK_IMPORTED_MODULE_0__.JsonProperty)(),\n __metadata(\"design:type\", Number)\n], ConquerUserCurrentEnemy.prototype, \"max_health\", void 0);\nConquerUserCurrentEnemy = ConquerUserCurrentEnemy_1 = __decorate([\n (0,typescript_json_serializer__WEBPACK_IMPORTED_MODULE_0__.JsonObject)()\n], ConquerUserCurrentEnemy);\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (ConquerUserCurrentEnemy);\n\n\n//# sourceURL=webpack://BurguillosInfo/./js-src/conquer/user-current-enemy.ts?"); + +/***/ }), + /***/ "./js-src/conquer/user.ts": /*!********************************!*\ !*** ./js-src/conquer/user.ts ***! diff --git a/templates/conquer/_fight-battle-selector-slide.html.ep b/templates/conquer/_fight-battle-selector-slide.html.ep index 9a5b1f4..8bc3926 100644 --- a/templates/conquer/_fight-battle-selector-slide.html.ep +++ b/templates/conquer/_fight-battle-selector-slide.html.ep @@ -1,6 +1,6 @@
-
diff --git a/templates/conquer/index.html.ep b/templates/conquer/index.html.ep index 6186598..81cbd8d 100644 --- a/templates/conquer/index.html.ep +++ b/templates/conquer/index.html.ep @@ -8,6 +8,21 @@ +
+

Elige un rival.

+
+
+
+ +
+

+ + Nivel: +

+
+
+
%= include 'conquer/_fight-battle-selector-slide'; %= include 'conquer/_overlay-transparent-template'; %= include 'conquer/_new-node-form-creation-template';