dynmap-neoforge/web/js/playermarkers.js
Mike Primm 2d0b2ef63d Hide player positions when on disabled worlds, add sendposition flat
to ClientComponent to avoid leaking position data, even when markers
are off, fix problem with stale player marker positions during/right
after map changes
2011-06-03 00:39:21 -05:00

93 lines
3.2 KiB
JavaScript

componentconstructors['playermarkers'] = function(dynmap, configuration) {
var me = this;
$(dynmap).bind('playeradded', function(event, player) {
// Create the player-marker.
var markerPosition = dynmap.map.getProjection().fromWorldToLatLng(player.location.x, player.location.y, player.location.z);
player.marker = new CustomMarker(markerPosition, dynmap.map, function(div) {
var playerImage;
$(div)
.addClass('Marker')
.addClass('playerMarker')
.append(playerImage = $('<img/>')
.attr({ src: 'images/player.png' }))
.append($('<span/>')
.addClass('playerName')
.text(player.name));
if (configuration.showplayerfaces) {
getMinecraftHead(player.account, 32, function(head) {
$(head)
.addClass('playericon')
.prependTo(div);
playerImage.remove();
});
}
if (configuration.showplayerhealth) {
if(!configuration.showplayerfaces) /* Need 32 high */
playerImage.css('margin-bottom','16px');
player.healthContainer = $('<div/>')
.addClass('healthContainer')
.appendTo(div);
if (player.health !== undefined && player.armor !== undefined) {
player.healthBar = $('<div/>')
.addClass('playerHealth')
.css('width', (player.health/2*5) + 'px');
player.armorBar = $('<div/>')
.addClass('playerArmor')
.css('width', (player.armor/2*5) + 'px');
$('<div/>')
.addClass('playerHealthBackground')
.append(player.healthBar)
.appendTo(player.healthContainer);
$('<div/>')
.addClass('playerArmorBackground')
.append(player.armorBar)
.appendTo(player.healthContainer);
} else {
player.healthContainer.css('display','none');
}
}
});
});
$(dynmap).bind('playerremoved', function(event, player) {
// Remove the marker.
player.marker.remove();
});
$(dynmap).bind('playerupdated', function(event, player) {
// Update the marker.
var markerPosition = dynmap.map.getProjection().fromWorldToLatLng(player.location.x, player.location.y, player.location.z);
player.marker.setPosition(markerPosition);
player.marker.toggle(dynmap.world === player.location.world);
// Update health
if (configuration.showplayerhealth) {
if (player.health !== undefined && player.armor !== undefined) {
player.healthContainer.css('display','block');
player.healthBar.css('width', (player.health/2*5) + 'px');
player.armorBar.css('width', (player.armor/2*5) + 'px');
} else {
player.healthContainer.css('display','none');
}
}
});
// Remove marker on start of map change
$(dynmap).bind('mapchanging', function(event) {
var name;
for(name in dynmap.players) {
var player = dynmap.players[name];
// Turn off marker - let update turn it back on
player.marker.toggle(false);
}
});
// Remove marker on map change - let update place it again
$(dynmap).bind('mapchanged', function(event) {
var name;
for(name in dynmap.players) {
var player = dynmap.players[name];
var markerPosition = dynmap.map.getProjection().fromWorldToLatLng(player.location.x, player.location.y, player.location.z);
player.marker.setPosition(markerPosition);
player.marker.toggle(dynmap.world === player.location.world);
}
});
};