(function() { var loggedIn = false; var loginTimeout = null; var heartInterval = null; var heartTimeout = null; var heartTimedOut = true; var header = `



`; var gmap = new GMaps({ el: "#map", disableDoubleClickZoom: true, lat: 0, lng: 0, disableDefaultUI: true, dblclick: function(e) { vex.dialog.open({ message: "", input: header, buttons: [ $.extend({}, vex.dialog.buttons.YES, { text: "Submit" }), $.extend({}, vex.dialog.buttons.NO, { text: "Abort" }) ], callback: function(data) { if (data !== false && Object.keys(data).length) { var ed = e.data = {}; if (data.type === "SPAWN") { ed.interval = data.interval; ed.encounters = data.encounters; } else if (data.type === "CHECKPOINT") { ed.name = data.name; ed.description = data.description; ed.imageUrl = data.image_url; ed.experience = data.experience; } else if (data.type === "GYM") { ed.team = data.team; } e.type = data.type; addFort(e, ed); } } }) } }); function addFort(e, data) { let lat = e.latLng.lat(); let lng = e.latLng.lng(); let obj = { action: "addFortToPosition", latitude: lat, longitude: lng, zoom: gmap.zoom, type: e.type }; Object.assign(obj, data); send(obj, function(res) { console.log(res); refreshMapForts(); }); } function setStatus(txt, color) { connection_status.innerHTML = txt; connection_status.style.color = color; } setStatus("Connecting", "yellow"); send({ action: "init" }, function(res) { if (res.success) { setStatus("Connected!", "green"); } else { if (res.reason !== void 0) { setStatus(res.reason); } else { setStatus("Connection failed!", "red"); } return void 0; } }); login_attempt.addEventListener("click", login); submit_spawn.addEventListener("click", function() { send({ action: "spawnPkmnToPlayer", player: spawn_user.value, pkmn: spawn_pkmn.value }, function(res) { console.log(res); }); }); function login() { var username = login_username.value; var password = login_password.value; send({ action: "login", username: username, password: password }, function(res) { if (res.success) { afterLogin(); } else { setStatus("Login failed!", "red"); clearTimeout(loginTimeout); loginTimeout = setTimeout(function() { if (loggedIn) { setStatus("Connected!", "green"); } }, 3e3); } }); } function afterLogin() { loggedIn = true; login_area.style.display = "none"; setStatus("Logged in!", "green"); world_manager.style.display = "block"; server_ping.style.display = "block"; map_manager.style.display = "block"; gmap.refresh(); gmap.setCenter({ lat: CFG.GMAPS.BASE_LAT, lng: CFG.GMAPS.BASE_LNG }); gmap.setZoom(CFG.GMAPS.BASE_ZOOM); initHeartBeat(); refreshMapForts(); refreshConnectedPlayers(); getServerVersion(); } function refreshConnectedPlayers() { send({ action: "getConnectedPlayers" }, function(res) { connected_players.innerHTML = "Connected players: " + res.connected_players; }); } function getServerVersion() { send({ action: "getServerVersion" }, function(res) { server_version.innerHTML = "Server version: v" + res.version; }); } function getFortIcon(fort) { if (fort.type === "CHECKPOINT") return ("img/pokestop_blue.png"); else if (fort.uid[fort.uid.length - 1] === "S") return ("img/spawn_point.png"); else return ("img/gym_" + fort.owned_by_team + ".png"); } function refreshMapForts() { let center = gmap.getCenter(); let lat = center.lat(); let lng = center.lng(); send({ action: "getFortsByPosition", latitude: lat, longitude: lng, zoom: gmap.zoom }, function(result) { gmap.removeMarkers(); result.forts.map((fort) => { let icon = getFortIcon(fort); gmap.addMarker({ lat: fort.latitude, lng: fort.longitude, title: fort.name, icon: icon, rightclick: function(e) { vex.dialog.confirm({ message: `

Delete this fort?
`, callback: function(value) { if (value) removeFort(this); }.bind(fort) }) }.bind(fort) }); }); }); } function removeFort(fort) { send({ action: "deleteFortById", uid: fort.uid, latitude: fort.latitude, longitude: fort.longitude, zoom: gmap.zoom }, function(res) { console.log(res); refreshMapForts(); }); } function initHeartBeat() { clearInterval(heartInterval); heartInterval = setInterval(function() { heartTimedOut = true; var now = +new Date(); heartTimeout = setTimeout(function() { if (heartTimedOut) { console.error("Heartbeat timeout!"); loggedIn = false; setStatus("Reconnecting..", "yellow"); login(); } }, 5e3); send({ action: "heartBeat", timestamp: now }, function(res) { if (res.timestamp) { heartTimedOut = false; clearTimeout(heartTimeout); var ping = res.timestamp - now; server_ping.innerHTML = "Ping: " + ping + "ms"; refreshConnectedPlayers(); refreshMapForts(); } }); }, 3e3); } })();