From 0fb56c95bb6633b9d0cbf60935f2319a2da1041e Mon Sep 17 00:00:00 2001 From: FrozenCow Date: Thu, 21 Jul 2011 02:16:00 +0200 Subject: [PATCH] Reworked Residence to work with Leaflet (and new regions-structure). --- web/js/regions.js | 41 +++++++++ web/js/regions_Residence.js | 160 ++++++----------------------------- web/js/regions_WorldGuard.js | 48 +---------- 3 files changed, 71 insertions(+), 178 deletions(-) diff --git a/web/js/regions.js b/web/js/regions.js index 7a890dd9..1c12e377 100644 --- a/web/js/regions.js +++ b/web/js/regions.js @@ -1,5 +1,46 @@ var regionConstructors = {}; +function createPolygonSurfaces(latlng, maxx, minx, maxy, miny, maxz, minz) { + return [ + new L.Polygon([ + latlng(minx,miny,minz), + latlng(maxx,miny,minz), + latlng(maxx,miny,maxz), + latlng(minx,miny,maxz) + ], {}), + new L.Polygon([ + latlng(minx,maxy,minz), + latlng(maxx,maxy,minz), + latlng(maxx,maxy,maxz), + latlng(minx,maxy,maxz) + ], {}), + new L.Polygon([ + latlng(minx,miny,minz), + latlng(minx,maxy,minz), + latlng(maxx,maxy,minz), + latlng(maxx,miny,minz) + ], {}), + new L.Polygon([ + latlng(maxx,miny,minz), + latlng(maxx,maxy,minz), + latlng(maxx,maxy,maxz), + latlng(maxx,miny,maxz) + ], {}), + new L.Polygon([ + latlng(minx,miny,maxz), + latlng(minx,maxy,maxz), + latlng(maxx,maxy,maxz), + latlng(maxx,miny,maxz) + ], {}), + new L.Polygon([ + latlng(minx,miny,minz), + latlng(minx,maxy,minz), + latlng(minx,maxy,maxz), + latlng(minx,miny,maxz) + ], {}) + ]; +} + componentconstructors['regions'] = function(dynmap, configuration) { regionCfg = configuration; var regionType = regionCfg.name; diff --git a/web/js/regions_Residence.js b/web/js/regions_Residence.js index bf7e2105..8df9672a 100644 --- a/web/js/regions_Residence.js +++ b/web/js/regions_Residence.js @@ -1,137 +1,31 @@ -regionConstructors['polygon'] = function(map, resname, region) -{ - $.each(region.Areas, function(aname, area) { - var name = resname + '_' + aname; - if(regionCfg.use3dregions) - { - regionPolygons[name+'_bottom'] = new google.maps.Polygon($.extend(regionCfg.regionstyle, { - paths: [ - map.getProjection().fromWorldToLatLng(area.X1,area.Y1,area.Z1), - map.getProjection().fromWorldToLatLng(area.X2,area.Y1,area.Z1), - map.getProjection().fromWorldToLatLng(area.X2,area.Y1,area.Z2), - map.getProjection().fromWorldToLatLng(area.X1,area.Y1,area.Z2) - ], - map: map - })); - google.maps.event.addListener(regionPolygons[name+'_bottom'] , 'click', function(event) { - regionInfo(event, resname, region); - }); - - regionPolygons[name+'_top'] = new google.maps.Polygon($.extend(regionCfg.regionstyle, { - paths: [ - map.getProjection().fromWorldToLatLng(area.X1,area.Y2,area.Z1), - map.getProjection().fromWorldToLatLng(area.X2,area.Y2,area.Z1), - map.getProjection().fromWorldToLatLng(area.X2,area.Y2,area.Z2), - map.getProjection().fromWorldToLatLng(area.X1,area.Y2,area.Z2) - ], - map: map - })); - google.maps.event.addListener(regionPolygons[name+'_top'] , 'click', function(event) { - regionInfo(event, resname, region); - }); - - regionPolygons[name+'_east'] = new google.maps.Polygon($.extend(regionCfg.regionstyle, { - paths: [ - map.getProjection().fromWorldToLatLng(area.X1,area.Y1,area.Z1), - map.getProjection().fromWorldToLatLng(area.X1,area.Y2,area.Z1), - map.getProjection().fromWorldToLatLng(area.X2,area.Y2,area.Z1), - map.getProjection().fromWorldToLatLng(area.X2,area.Y1,area.Z1) - ], - map: map - })); - google.maps.event.addListener(regionPolygons[name+'_east'] , 'click', function(event) { - regionInfo(event, resname, region); - }); - - regionPolygons[name+'_south'] = new google.maps.Polygon($.extend(regionCfg.regionstyle, { - paths: [ - map.getProjection().fromWorldToLatLng(area.X2,area.Y1,area.Z1), - map.getProjection().fromWorldToLatLng(area.X2,area.Y2,area.Z1), - map.getProjection().fromWorldToLatLng(area.X2,area.Y2,area.Z2), - map.getProjection().fromWorldToLatLng(area.X2,area.Y1,area.Z2) - ], - map: map - })); - google.maps.event.addListener(regionPolygons[name+'_south'] , 'click', function(event) { - regionInfo(event, resname, region); - }); - - regionPolygons[name+'_west'] = new google.maps.Polygon($.extend(regionCfg.regionstyle, { - paths: [ - map.getProjection().fromWorldToLatLng(area.X1,area.Y1,area.Z2), - map.getProjection().fromWorldToLatLng(area.X1,area.Y2,area.Z2), - map.getProjection().fromWorldToLatLng(area.X2,area.Y2,area.Z2), - map.getProjection().fromWorldToLatLng(area.X2,area.Y1,area.Z2) - ], - map: map - })); - google.maps.event.addListener(regionPolygons[name+'_west'] , 'click', function(event) { - regionInfo(event, resname, region); - }); - - regionPolygons[name+'_north'] = new google.maps.Polygon($.extend(regionCfg.regionstyle, { - paths: [ - map.getProjection().fromWorldToLatLng(area.X1,area.Y1,area.Z1), - map.getProjection().fromWorldToLatLng(area.X1,area.Y2,area.Z1), - map.getProjection().fromWorldToLatLng(area.X1,area.Y2,area.Z2), - map.getProjection().fromWorldToLatLng(area.X1,area.Y1,area.Z2) - ], - map: map - })); - google.maps.event.addListener(regionPolygons[name+'_west'] , 'click', function(event) { - regionInfo(event, resname, region); - }); - } - else - { - middleY = area.Y2; - regionPolygons[name+'_bottom'] = new google.maps.Polygon($.extend(regionCfg.regionstyle, { - paths: [ - map.getProjection().fromWorldToLatLng(area.X1,middleY,area.Z1), - map.getProjection().fromWorldToLatLng(area.X2,middleY,area.Z1), - map.getProjection().fromWorldToLatLng(area.X2,middleY,area.Z2), - map.getProjection().fromWorldToLatLng(area.X1,middleY,area.Z2) - ], - map: map - })); - google.maps.event.addListener(regionPolygons[name+'_bottom'] , 'click', function(event) { - regionInfo(event, resname, region); - }); - } - }); +function createPolygonsFromResidence(latlng, name, residence) { + return createPolygonSurfaces(residence.X1, residence.X2, residence.Y1, residence.Y2, residence.Z1, residence.Z2); } -regionConstructors['info'] = function(event, name, region) -{ - var flags = ""; - $.each(region.Permissions.AreaFlags, function(flag, status) - { - flags += flag+': '+status+'
'; - }); - var replace = ['%regionname%','%playerowners%','%flags%','%groupowners%', '%playermembers%', '%groupmembers%','%parent%', '%priority%']; - var by = [name,region.Permissions.Owner, flags, '', '', '', '', '']; +function createPopupContent(name, region) { + return $('
') + .append($('').addClass('regionname').text(name)) + .append(region.owners.players && $('').addClass('playerowners').text(region.permissions.owner)) + [0]; +}; + +regionConstructors['Residence'] = function(dynmap, worldName, result) { + var latlng = function(x, y, z) { + return dynmap.getProjection().fromLocationToLatLng(new Location(undefined, x,y,z)); + }; - var contentString = arrayReplace(replace, by, regionCfg.infowindow) - - regionInfoWindow.setContent(contentString); - regionInfoWindow.setPosition(event.latLng); - - regionInfoWindow.open(dynmap.map); -} -regionConstructors['update'] = function(map) -{ - if(regionInfoWindow) - regionInfoWindow.close(); - $.each(regionPolygons, function(index, region) - { - region.setMap(null); - }); - regionPolygons = {}; - $.getJSON("standalone/res_" + map + ".json", function(data) - { - $.each(data, function(name, residence) - { - if(map == residence.Permissions.World) - makeRegionPolygonCube(dynmap.map, name, residence); + $.getJSON('standalone/res_' + worldName + '.json', function(data) { + var regionLayers = {}; + $.each(data, function(name, residence) { + if(map === residence.Permissions.World) { + var polygons = createPolygonsFromResidence(latlng, name, residence); + var regionLayer = new L.FeatureGroup(polygons); + + regionLayer.bindPopup(createPopupContent(name, region)); + + regionLayers[name] = regionLayer; + } }); + result(regionLayers); + }); -} \ No newline at end of file +}; diff --git a/web/js/regions_WorldGuard.js b/web/js/regions_WorldGuard.js index 96cc68ed..0684f3a1 100644 --- a/web/js/regions_WorldGuard.js +++ b/web/js/regions_WorldGuard.js @@ -1,53 +1,11 @@ -Array.max = function( array ){ +Array.max = function( array ) { return Math.max.apply( Math, array ); }; -Array.min = function( array ){ +Array.min = function( array ) { return Math.min.apply( Math, array ); }; -function createPolygonSurfaces(latlng, maxx, minx, maxy, miny, maxz, minz) { - return [ - new L.Polygon([ - latlng(minx,miny,minz), - latlng(maxx,miny,minz), - latlng(maxx,miny,maxz), - latlng(minx,miny,maxz) - ], {}), - new L.Polygon([ - latlng(minx,maxy,minz), - latlng(maxx,maxy,minz), - latlng(maxx,maxy,maxz), - latlng(minx,maxy,maxz) - ], {}), - new L.Polygon([ - latlng(minx,miny,minz), - latlng(minx,maxy,minz), - latlng(maxx,maxy,minz), - latlng(maxx,miny,minz) - ], {}), - new L.Polygon([ - latlng(maxx,miny,minz), - latlng(maxx,maxy,minz), - latlng(maxx,maxy,maxz), - latlng(maxx,miny,maxz) - ], {}), - new L.Polygon([ - latlng(minx,miny,maxz), - latlng(minx,maxy,maxz), - latlng(maxx,maxy,maxz), - latlng(maxx,miny,maxz) - ], {}), - new L.Polygon([ - latlng(minx,miny,minz), - latlng(minx,maxy,minz), - latlng(minx,maxy,maxz), - latlng(minx,miny,maxz) - ], {}) - ]; -} - -function createPolygonsFromWorldGuardRegion(latlng, name, region) -{ +function createPolygonsFromWorldGuardRegion(latlng, name, region) { if(region.points) { var i; var xs = region.points.map(function(p) { return p.x; });