Merge pull request #609 from fkloft/player_tracker
Improved player tracker
This commit is contained in:
commit
589bf93768
@ -19,7 +19,7 @@
|
|||||||
// PLUGIN START ////////////////////////////////////////////////////////
|
// PLUGIN START ////////////////////////////////////////////////////////
|
||||||
window.PLAYER_TRACKER_MAX_TIME = 3*60*60*1000; // in milliseconds
|
window.PLAYER_TRACKER_MAX_TIME = 3*60*60*1000; // in milliseconds
|
||||||
window.PLAYER_TRACKER_MIN_ZOOM = 9;
|
window.PLAYER_TRACKER_MIN_ZOOM = 9;
|
||||||
|
window.PLAYER_TRACKER_MIN_OPACITY = 0.3;
|
||||||
window.PLAYER_TRACKER_LINE_COLOUR = '#FF00FD';
|
window.PLAYER_TRACKER_LINE_COLOUR = '#FF00FD';
|
||||||
|
|
||||||
|
|
||||||
@ -45,11 +45,18 @@ window.plugin.playerTracker.setup = function() {
|
|||||||
iconRetinaUrl: iconResRetImage
|
iconRetinaUrl: iconResRetImage
|
||||||
}});
|
}});
|
||||||
|
|
||||||
plugin.playerTracker.drawnTraces = new L.LayerGroup();
|
plugin.playerTracker.drawnTracesEnl = new L.LayerGroup();
|
||||||
window.addLayerGroup('Player Tracker', plugin.playerTracker.drawnTraces, true);
|
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) {
|
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) {
|
obj.layer.eachLayer(function(marker) {
|
||||||
if(marker._icon) window.setupTooltips($(marker._icon));
|
if(marker._icon) window.setupTooltips($(marker._icon));
|
||||||
});
|
});
|
||||||
@ -77,7 +84,8 @@ window.plugin.playerTracker.stored = {};
|
|||||||
window.plugin.playerTracker.zoomListener = function() {
|
window.plugin.playerTracker.zoomListener = function() {
|
||||||
var ctrl = $('.leaflet-control-layers-selector + span:contains("Player Tracker")').parent();
|
var ctrl = $('.leaflet-control-layers-selector + span:contains("Player Tracker")').parent();
|
||||||
if(window.map.getZoom() < window.PLAYER_TRACKER_MIN_ZOOM) {
|
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.');
|
ctrl.addClass('disabled').attr('title', 'Zoom in to show those.');
|
||||||
} else {
|
} else {
|
||||||
ctrl.removeClass('disabled').attr('title', '');
|
ctrl.removeClass('disabled').attr('title', '');
|
||||||
@ -241,9 +249,10 @@ window.plugin.playerTracker.ago = function(time, now) {
|
|||||||
|
|
||||||
window.plugin.playerTracker.drawData = function() {
|
window.plugin.playerTracker.drawData = function() {
|
||||||
var gllfe = plugin.playerTracker.getLatLngFromEvent;
|
var gllfe = plugin.playerTracker.getLatLngFromEvent;
|
||||||
var layer = plugin.playerTracker.drawnTraces;
|
|
||||||
|
|
||||||
var polyLineByAge = [[], [], [], []];
|
var polyLineByAgeEnl = [[], [], [], []];
|
||||||
|
var polyLineByAgeRes = [[], [], [], []];
|
||||||
|
|
||||||
var split = PLAYER_TRACKER_MAX_TIME / 4;
|
var split = PLAYER_TRACKER_MAX_TIME / 4;
|
||||||
var now = new Date().getTime();
|
var now = new Date().getTime();
|
||||||
$.each(plugin.playerTracker.stored, function(pguid, playerData) {
|
$.each(plugin.playerTracker.stored, function(pguid, playerData) {
|
||||||
@ -259,7 +268,11 @@ window.plugin.playerTracker.drawData = function() {
|
|||||||
var p = playerData.events[i];
|
var p = playerData.events[i];
|
||||||
var ageBucket = Math.min(parseInt((now - p.time) / split), 4-1);
|
var ageBucket = Math.min(parseInt((now - p.time) / split), 4-1);
|
||||||
var line = [gllfe(p), gllfe(playerData.events[i-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
|
// tooltip for marker
|
||||||
@ -310,19 +323,23 @@ window.plugin.playerTracker.drawData = function() {
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
// marker opacity
|
||||||
|
var relOpacity = 1 - (now - last.time) / window.PLAYER_TRACKER_MAX_TIME
|
||||||
|
var absOpacity = window.PLAYER_TRACKER_MIN_OPACITY + (1 - window.PLAYER_TRACKER_MIN_OPACITY) * relOpacity;
|
||||||
|
|
||||||
// marker itself
|
// marker itself
|
||||||
var icon = playerData.team === 'RESISTANCE' ? new plugin.playerTracker.iconRes() : new plugin.playerTracker.iconEnl();
|
var icon = playerData.team === 'RESISTANCE' ? new plugin.playerTracker.iconRes() : new plugin.playerTracker.iconEnl();
|
||||||
var m = L.marker(gllfe(last), {title: title, icon: icon, referenceToPortal: closestPortal});
|
var m = L.marker(gllfe(last), {title: title, icon: icon, referenceToPortal: closestPortal, opacity: absOpacity});
|
||||||
// ensure tooltips are closed, sometimes they linger
|
// ensure tooltips are closed, sometimes they linger
|
||||||
m.on('mouseout', function() { $(this._icon).tooltip('close'); });
|
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);
|
plugin.playerTracker.oms.addMarker(m);
|
||||||
// jQueryUI doesn’t automatically notice the new markers
|
// jQueryUI doesn’t automatically notice the new markers
|
||||||
window.setupTooltips($(m._icon));
|
window.setupTooltips($(m._icon));
|
||||||
});
|
});
|
||||||
|
|
||||||
// draw the poly lines to the map
|
// draw the poly lines to the map
|
||||||
$.each(polyLineByAge, function(i, polyLine) {
|
$.each(polyLineByAgeEnl, function(i, polyLine) {
|
||||||
if(polyLine.length === 0) return true;
|
if(polyLine.length === 0) return true;
|
||||||
|
|
||||||
var opts = {
|
var opts = {
|
||||||
@ -333,7 +350,20 @@ window.plugin.playerTracker.drawData = function() {
|
|||||||
dashArray: "5,8"
|
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 +373,15 @@ window.plugin.playerTracker.handleData = function(data) {
|
|||||||
plugin.playerTracker.discardOldData();
|
plugin.playerTracker.discardOldData();
|
||||||
plugin.playerTracker.processNewData(data);
|
plugin.playerTracker.processNewData(data);
|
||||||
// remove old popups
|
// 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');
|
if(layer._icon) $(layer._icon).tooltip('destroy');
|
||||||
});
|
});
|
||||||
plugin.playerTracker.oms.clearMarkers();
|
plugin.playerTracker.oms.clearMarkers();
|
||||||
plugin.playerTracker.drawnTraces.clearLayers();
|
plugin.playerTracker.drawnTracesEnl.clearLayers();
|
||||||
|
plugin.playerTracker.drawnTracesRes.clearLayers();
|
||||||
plugin.playerTracker.drawData();
|
plugin.playerTracker.drawData();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -102,8 +102,14 @@
|
|||||||
window.plugin.zaprange.zapLayerEnlHolderGroup.addLayer(window.plugin.zaprange.zapCircleEnlHolderGroup);
|
window.plugin.zaprange.zapLayerEnlHolderGroup.addLayer(window.plugin.zaprange.zapCircleEnlHolderGroup);
|
||||||
window.plugin.zaprange.zapLayerResHolderGroup.addLayer(window.plugin.zaprange.zapCircleResHolderGroup);
|
window.plugin.zaprange.zapLayerResHolderGroup.addLayer(window.plugin.zaprange.zapCircleResHolderGroup);
|
||||||
|
|
||||||
window.addLayerGroup('Zaprange Enlightened', window.plugin.zaprange.zapLayerEnlHolderGroup, true);
|
// to avoid any favouritism, we'll put the player's own faction layer first
|
||||||
window.addLayerGroup('Zaprange Resistance', window.plugin.zaprange.zapLayerResHolderGroup, true);
|
if (PLAYER.team == 'RESISTANCE') {
|
||||||
|
window.addLayerGroup('Zaprange Resistance', window.plugin.zaprange.zapLayerResHolderGroup, true);
|
||||||
|
window.addLayerGroup('Zaprange Enlightened', window.plugin.zaprange.zapLayerEnlHolderGroup, true);
|
||||||
|
} else {
|
||||||
|
window.addLayerGroup('Zaprange Enlightened', window.plugin.zaprange.zapLayerEnlHolderGroup, true);
|
||||||
|
window.addLayerGroup('Zaprange Resistance', window.plugin.zaprange.zapLayerResHolderGroup, true);
|
||||||
|
}
|
||||||
|
|
||||||
window.addHook('portalAdded', window.plugin.zaprange.portalAdded);
|
window.addHook('portalAdded', window.plugin.zaprange.portalAdded);
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user