(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);
}
})();