[missions] show distance to mission (using distance-to-portal)

This commit is contained in:
fkloft 2015-04-12 02:07:14 +02:00
parent 735a0fee85
commit 79953c6494
4 changed files with 64 additions and 5 deletions

View File

@ -1,14 +1,14 @@
#portal-distance {
text-align: center;
}
#portal-distance-bearing {
.portal-distance-bearing {
display: inline-block;
vertical-align: top;
position: relative;
height: 1em;
width: 1em;
}
#portal-distance-bearing:before, #portal-distance-bearing:after {
.portal-distance-bearing:before, .portal-distance-bearing:after {
border-color: transparent currentcolor transparent transparent;
border-style: solid;
border-width: 0.75em 0.4em 0 0;
@ -22,7 +22,7 @@
-moz-transform: skewY(-30deg);
-webkit-transform: skewY(-30deg);
}
#portal-distance-bearing:after {
.portal-distance-bearing:after {
left: auto;
right: 0.15em;
transform: scaleX(-1) skewY(-30deg);

View File

@ -67,7 +67,7 @@ window.plugin.distanceToPortal.updateDistance = function() {
$('#portal-distance')
.text('Distance: ' + dist + ' ')
.append($('<span>')
.attr('id', 'portal-distance-bearing')
.addClass('portal-distance-bearing')
.css({
'transform': 'rotate('+bearing+'deg)',
'-moz-transform': 'rotate('+bearing+'deg)',
@ -115,7 +115,6 @@ window.plugin.distanceToPortal.setupPortalsList = function() {
$(cell).addClass('alignR').text(dist?window.plugin.distanceToPortal.formatDistance(dist):'-');
}
});
}

View File

@ -45,6 +45,17 @@
margin-bottom: 2px;
}
.plugin-mission-summary > .nickname {
display: inline-block;
min-width: 8em; /* to align with time */
}
.plugin-mission-info .portal-distance-bearing {
font-size: 14px;
margin-right: 8px;
color: #b2fbff;
}
.plugin-mission-info {
display: inline-block;
}

View File

@ -293,6 +293,16 @@ window.plugin.missions = {
var span = container.appendChild(document.createElement('span'));
span.className = 'nickname ' + (cachedMission.authorTeam === 'R' ? 'res' : 'enl')
span.textContent = cachedMission.authorNickname;
if(window.plugin.distanceToPortal && window.plugin.distanceToPortal.currentLoc) {
var infoDistance = container.appendChild(document.createElement('span'));
infoDistance.className = 'plugin-mission-info distance help';
infoDistance.title = 'Distance to this mission. Click to update.';
infoDistance.addEventListener('click', function() {
plugin.missions.renderMissionDistance(cachedMission, infoDistance);
}, false);
this.renderMissionDistance(cachedMission, infoDistance);
}
}
container.appendChild(document.createElement('br'));
@ -328,6 +338,45 @@ window.plugin.missions = {
return container;
},
renderMissionDistance: function(mission /* cached mission, full details*/, container) {
if(!(plugin.distanceToPortal && plugin.distanceToPortal.currentLoc)) return;
var distances = mission.waypoints
.filter(function(waypoint) {
return !!waypoint.portal;
})
.map(function(waypoint) {
var position = L.latLng(waypoint.portal.latE6/1E6, waypoint.portal.lngE6/1E6);
var distance = position.distanceTo(plugin.distanceToPortal.currentLoc);
return {
waypoint: waypoint,
distance: distance,
position: position,
};
});
if(!distances.length) return;
if(mission.typeNum == 2) { // non-sequential
distances.sort(function(a, b) { return a.distance - b.distance; });
}
var position = distances[0].position;
var distance = distances[0].distance;
var bearing = window.plugin.distanceToPortal.currentLoc.bearingTo(position);
$(container)
.text(window.plugin.distanceToPortal.formatDistance(distance))
.prepend($('<span>')
.addClass('portal-distance-bearing')
.css({
'transform': 'rotate('+bearing+'deg)',
'-moz-transform': 'rotate('+bearing+'deg)',
'-webkit-transform': 'rotate('+bearing+'deg)',
}));
},
renderMission: function(mission) {
var container = document.createElement('div');
container.className = 'plugin-mission-details';