Implement per faction player tracker

Fixes #604
This commit is contained in:
fkloft 2013-10-16 21:34:41 +02:00
parent fa969561e2
commit 4055bb8638

View File

@ -45,11 +45,18 @@ window.plugin.playerTracker.setup = function() {
iconRetinaUrl: iconResRetImage
}});
plugin.playerTracker.drawnTraces = new L.LayerGroup();
window.addLayerGroup('Player Tracker', plugin.playerTracker.drawnTraces, true);
plugin.playerTracker.drawnTracesEnl = new L.LayerGroup();
plugin.playerTracker.drawnTracesRes = new L.LayerGroup();
// to avoid any favouritism, we'll put the player's own faction layer first
if (PLAYER.team == 'RESISTANCE') {
window.addLayerGroup('Player Tracker Resistance', plugin.playerTracker.drawnTracesRes, true);
window.addLayerGroup('Player Tracker Enlightened', plugin.playerTracker.drawnTracesEnl, true);
} else {
window.addLayerGroup('Player Tracker Enlightened', plugin.playerTracker.drawnTracesEnl, true);
window.addLayerGroup('Player Tracker Resistance', plugin.playerTracker.drawnTracesRes, true);
}
map.on('layeradd',function(obj) {
if(obj.layer === plugin.playerTracker.drawnTraces)
{
if(obj.layer === plugin.playerTracker.drawnTracesEnl || obj.layer === plugin.playerTracker.drawnTracesRes) {
obj.layer.eachLayer(function(marker) {
if(marker._icon) window.setupTooltips($(marker._icon));
});
@ -77,7 +84,8 @@ window.plugin.playerTracker.stored = {};
window.plugin.playerTracker.zoomListener = function() {
var ctrl = $('.leaflet-control-layers-selector + span:contains("Player Tracker")').parent();
if(window.map.getZoom() < window.PLAYER_TRACKER_MIN_ZOOM) {
window.plugin.playerTracker.drawnTraces.clearLayers();
window.plugin.playerTracker.drawnTracesEnl.clearLayers();
window.plugin.playerTracker.drawnTracesRes.clearLayers();
ctrl.addClass('disabled').attr('title', 'Zoom in to show those.');
} else {
ctrl.removeClass('disabled').attr('title', '');
@ -241,9 +249,10 @@ window.plugin.playerTracker.ago = function(time, now) {
window.plugin.playerTracker.drawData = function() {
var gllfe = plugin.playerTracker.getLatLngFromEvent;
var layer = plugin.playerTracker.drawnTraces;
var polyLineByAge = [[], [], [], []];
var polyLineByAgeEnl = [[], [], [], []];
var polyLineByAgeRes = [[], [], [], []];
var split = PLAYER_TRACKER_MAX_TIME / 4;
var now = new Date().getTime();
$.each(plugin.playerTracker.stored, function(pguid, playerData) {
@ -259,7 +268,11 @@ window.plugin.playerTracker.drawData = function() {
var p = playerData.events[i];
var ageBucket = Math.min(parseInt((now - p.time) / split), 4-1);
var line = [gllfe(p), gllfe(playerData.events[i-1])];
polyLineByAge[ageBucket].push(line);
if(playerData.team === 'RESISTANCE')
polyLineByAgeRes[ageBucket].push(line);
else
polyLineByAgeEnl[ageBucket].push(line);
}
// tooltip for marker
@ -315,14 +328,14 @@ window.plugin.playerTracker.drawData = function() {
var m = L.marker(gllfe(last), {title: title, icon: icon, referenceToPortal: closestPortal});
// ensure tooltips are closed, sometimes they linger
m.on('mouseout', function() { $(this._icon).tooltip('close'); });
m.addTo(layer);
m.addTo(playerData.team === 'RESISTANCE' ? plugin.playerTracker.drawnTracesRes : plugin.playerTracker.drawnTracesEnl);
plugin.playerTracker.oms.addMarker(m);
// jQueryUI doesnt automatically notice the new markers
window.setupTooltips($(m._icon));
});
// draw the poly lines to the map
$.each(polyLineByAge, function(i, polyLine) {
$.each(polyLineByAgeEnl, function(i, polyLine) {
if(polyLine.length === 0) return true;
var opts = {
@ -333,7 +346,20 @@ window.plugin.playerTracker.drawData = function() {
dashArray: "5,8"
};
L.multiPolyline(polyLine, opts).addTo(layer);
L.multiPolyline(polyLine, opts).addTo(plugin.playerTracker.drawnTracesEnl);
});
$.each(polyLineByAgeRes, function(i, polyLine) {
if(polyLine.length === 0) return true;
var opts = {
weight: 2-0.25*i,
color: PLAYER_TRACKER_LINE_COLOUR,
clickable: false,
opacity: 1-0.2*i,
dashArray: "5,8"
};
L.multiPolyline(polyLine, opts).addTo(plugin.playerTracker.drawnTracesRes);
});
}
@ -343,11 +369,15 @@ window.plugin.playerTracker.handleData = function(data) {
plugin.playerTracker.discardOldData();
plugin.playerTracker.processNewData(data);
// remove old popups
plugin.playerTracker.drawnTraces.eachLayer(function(layer) {
plugin.playerTracker.drawnTracesEnl.eachLayer(function(layer) {
if(layer._icon) $(layer._icon).tooltip('destroy');
});
plugin.playerTracker.drawnTracesRes.eachLayer(function(layer) {
if(layer._icon) $(layer._icon).tooltip('destroy');
});
plugin.playerTracker.oms.clearMarkers();
plugin.playerTracker.drawnTraces.clearLayers();
plugin.playerTracker.drawnTracesEnl.clearLayers();
plugin.playerTracker.drawnTracesRes.clearLayers();
plugin.playerTracker.drawData();
}