From 6616b3eae5fe7a33bd35a3923ab69b4843ea4757 Mon Sep 17 00:00:00 2001 From: Mike Primm Date: Wed, 10 Aug 2011 20:47:14 -0500 Subject: [PATCH] Add poly2d region support back to WorldGuard --- web/js/regions.js | 33 +++++++++++++++++++++++++++++++++ web/js/regions_WorldGuard.js | 28 ++++++++++++++++++++++++++++ 2 files changed, 61 insertions(+) diff --git a/web/js/regions.js b/web/js/regions.js index c9351087..aa3639a8 100644 --- a/web/js/regions.js +++ b/web/js/regions.js @@ -67,6 +67,38 @@ componentconstructors['regions'] = function(dynmap, configuration) { latlng(minx,64,maxz) ], configuration.regionstyle); } + + function create3DOutlineLayer(xarray, maxy, miny, zarray) { + var toplist = []; + var botlist = []; + var i; + var polylist = []; + for(i = 0; i < xarray.length; i++) { + toplist[i] = latlng(xarray[i], maxy, zarray[i]); + botlist[i] = latlng(xarray[i], miny, zarray[i]); + } + for(i = 0; i < xarray.length; i++) { + var sidelist = []; + sidelist[0] = toplist[i]; + sidelist[1] = botlist[i]; + sidelist[2] = botlist[(i+1)%xarray.length]; + sidelist[3] = toplist[(i+1)%xarray.length]; + polylist[i] = new L.Polygon(sidelist, configuration.regionstyle); + } + polylist[xarray.length] = new L.Polygon(botlist, configuration.regionstyle); + polylist[xarray.length+1] = new L.Polygon(toplist, configuration.regionstyle); + + return new L.FeatureGroup(polylist); + } + + function create2DOutlineLayer(xarray, maxy, miny, zarray) { + var llist = []; + var i; + for(i = 0; i < xarray.length; i++) { + llist[i] = latlng(xarray[i], 64, zarray[i]); + } + return new L.Polygon(llist, configuration.regionstyle); + } function createPopupContent(name, region) { function join(a) { @@ -120,6 +152,7 @@ componentconstructors['regions'] = function(dynmap, configuration) { worldName: worldName, createPopupContent: createPopupContent, createBoxLayer: configuration.use3dregions ? create3DBoxLayer : create2DBoxLayer, + createOutlineLayer: configuration.use3dregions ? create3DOutlineLayer : create2DOutlineLayer, result: function(regionsLayer) { activeLayer = regionsLayer; dynmap.map.addLayer(activeLayer); diff --git a/web/js/regions_WorldGuard.js b/web/js/regions_WorldGuard.js index 5f4e5c0d..284f7cf4 100644 --- a/web/js/regions_WorldGuard.js +++ b/web/js/regions_WorldGuard.js @@ -19,6 +19,27 @@ regionConstructors['WorldGuard'] = function(dynmap, configuration) { region.min.y = region.max.y - 1; return boxCreator(region.max.x, region.min.x, region.max.y, region.min.y, region.max.z, region.min.z); } + + function createOutlineFromRegion(region, outCreator) { + var xarray = []; + var zarray = []; + if(region.points) { + var i; + for(i = 0; i < region.points.length; i++) { + xarray[i] = region.points[i].x; + zarray[i] = region.points[i].z; + } + } + var ymin = 64; + var ymax = 64; + if(region['max-y']) + ymax = region['max-y']; + if(region['min-y']) + ymin = region['min-y']; + if(ymax < ymin) ymax = ymin; + + return outCreator(xarray, ymax, ymin, zarray); + } var regionFile = configuration.filename.substr(0, configuration.filename.lastIndexOf('.')); regionFile += '_'+configuration.worldName+'.json'; @@ -35,6 +56,13 @@ regionConstructors['WorldGuard'] = function(dynmap, configuration) { boxLayers.push(boxLayer); } } + else if(region.type === 'poly2d') { + var outLayer = createOutlineFromRegion(region, configuration.createOutlineLayer); + if (outLayer) { + outLayer.bindPopup(configuration.createPopupContent(name, region)); + boxLayers.push(outLayer); + } + } }); configuration.result(new L.LayerGroup(boxLayers));