(function() { var loggedIn = false; var loginTimeout = null; var heartInterval = null; var heartTimeout = null; var heartTimedOut = true; var map = new GMaps({ el: "#map", lat: 39.18875480450959, lng: -96.58109955489635, disableDoubleClickZoom: true, dblclick: addFort }); map.setZoom(20); function addFort(e) { let latLng = e.latLng.toString().split(","); let lat = latLng[0].substring(1); let lng = latLng[1].substring(0, latLng[1].length - 1); let name = prompt("Enter fort name: "); let description = prompt("Enter fort description: "); send({ action: "addFortToPosition", lat: lat, lng: lng, zoom: map.zoom, name: name, desc: description }, function(res) { console.log(res); }); } 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 { 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"; fort_manager.style.opacity = 1; initHeartBeat(); 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 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(); } }); }, 3e3); } })();