added a renderlimit for the plugin

This commit is contained in:
boombuler 2013-02-24 23:10:22 +01:00
parent df40a182be
commit a94bf4475b
3 changed files with 28 additions and 7 deletions

View File

@ -43,13 +43,16 @@
// redrawn. It is called early on in the
// code/map_data.js#renderPortal as long as there was an
// old portal for the guid.
// checkRenderLimit: callback is passed the argument of
// {reached : false} to indicate that the renderlimit is reached
// set reached to true.
window._hooks = {}
window.VALID_HOOKS = ['portalAdded', 'portalDetailsUpdated',
'publicChatDataAvailable', 'portalDataLoaded', 'beforePortalReRender'];
'publicChatDataAvailable', 'portalDataLoaded', 'beforePortalReRender',
'checkRenderLimit'];
window.runHooks = function(event, data) {
if(VALID_HOOKS.indexOf(event) === -1) throw('Unknown event type: ' + event);

View File

@ -128,7 +128,9 @@ window.renderLimitReached = function() {
if(Object.keys(portals).length >= MAX_DRAWN_PORTALS) return true;
if(Object.keys(links).length >= MAX_DRAWN_LINKS) return true;
if(Object.keys(fields).length >= MAX_DRAWN_FIELDS) return true;
return false;
var param = { 'reached': false };
window.runHooks('checkRenderLimit', param);
return param.reached;
}
window.getMinPortalLevel = function() {

View File

@ -21,6 +21,7 @@ function wrapper() {
// use own namespace for plugin
window.plugin.maxLinks = function() {};
window.plugin.maxLinks.MAX_DRAWN_LINKS = 400;
var MAX_LINK_COLOR = '#FF0000';
var Triangle = function (a, b, c) {
@ -204,6 +205,7 @@ function wrapper() {
window.plugin.maxLinks.layer = null;
var updating = false;
var renderLimitReached = false;
window.plugin.maxLinks.updateLayer = function() {
if (updating || window.plugin.maxLinks.layer === null || !window.map.hasLayer(window.plugin.maxLinks.layer))
return;
@ -230,14 +232,28 @@ function wrapper() {
});
var triangles = window.plugin.maxLinks.triangulate(locations);
var drawnLinks = 0;
renderLimitReached = false;
$.each(triangles, function(idx, triangle) {
triangle.draw(window.plugin.maxLinks.layer, minX, minY)
if (drawnLinks <= window.plugin.maxLinks.MAX_DRAWN_LINKS) {
triangle.draw(window.plugin.maxLinks.layer, minX, minY);
drawnLinks += 3;
} else {
renderLimitReached = true;
}
});
updating = false;
window.renderUpdateStatus();
}
var setup = function() {
window.plugin.maxLinks.layer = L.layerGroup([]);
window.addHook('checkRenderLimit', function(e) {
if (window.map.hasLayer(window.plugin.maxLinks.layer) && renderLimitReached)
e.reached = true;
});
window.map.on('layeradd', function(e) {
if (e.layer === window.plugin.maxLinks.layer)
window.plugin.maxLinks.updateLayer();