diff --git a/src/main/resources/configuration.txt b/src/main/resources/configuration.txt index a1e7272a..6ea8aa54 100644 --- a/src/main/resources/configuration.txt +++ b/src/main/resources/configuration.txt @@ -65,6 +65,7 @@ components: # type: logo # text: "Dynmap" # linkurl: "http://forums.bukkit.org/threads/dynmap.489/" + #- class: org.dynmap.regions.RegionsComponent # type: regions # name: WorldGuard @@ -73,11 +74,9 @@ components: # basenode: regions # use3dregions: true # regionstyle: - # stroke: true - # color: "#FF0000" - # opacity: 0.8 - # weight: 3 - # fill: true + # strokeColor: "#FF0000" + # strokeOpacity: 0.8 + # strokeWeight: 3 # fillColor: "#FF0000" # fillOpacity: 0.35 # # Optional setting to limit which regions to show, by name - if commented out, all regions are shown @@ -88,6 +87,11 @@ components: # hiddenregions: # - hiddenplace # - secretsite + # # Optional per-region overrides for regionstyle (any defined replace those in regionstyle) + # customstyle: + # homebase: + # strokeColor: "#00FF00" + #- class: org.dynmap.regions.RegionsComponent # type: regions # name: Residence @@ -110,11 +114,20 @@ components: # hiddenregions: # - hiddenplace # - secretsite + # # Optional per-region overrides for regionstyle (any defined replace those in regionstyle) + # customstyle: + # homebase: + # strokeColor: "#00FF00" + # # Optional groups (subareas under a residence) overrides for regionstyle (any defined replace those in regionstyle) + # groupstyle: + # homebase: + # strokeColor: "#007F00" + #- class: org.dynmap.regions.RegionsComponent # type: regions # name: Towny # use3dregions: false - # infowindow: '
%regionname%
Mayor %playerowners%
Associates %playermanagers%
Flags
%flags%
' + # infowindow: '
%regionname% (%nation%)
Mayor %playerowners%
Associates %playermanagers%
Flags
%flags%
' # regionstyle: # strokeColor: "#FF0000" # strokeOpacity: 0.8 @@ -129,6 +142,15 @@ components: # hiddenregions: # - hiddenplace # - secretsite + # # Optional per-town overrides for regionstyle (any defined replace those in regionstyle) + # customstyle: + # homebase: + # strokeColor: "#00FF00" + # # Optional per-nation overrides for regionstyle (any defined replace those in regionstyle) + # groupstyle: + # MyNation: + # strokeColor: "#007F00" + #- class: org.dynmap.TestComponent # stuff: "This is some configuration-value" diff --git a/web/js/regions.js b/web/js/regions.js index bc5b0b4c..716b4de8 100644 --- a/web/js/regions.js +++ b/web/js/regions.js @@ -5,71 +5,104 @@ componentconstructors['regions'] = function(dynmap, configuration) { // Compatibility with older configurations. if (configuration.regionstyle) { configuration.regionstyle = $.extend({ - stroke: (configuration.regionstyle.strokeOpacity > 0.0), + stroke: true, color: configuration.regionstyle.strokeColor, - opacity: configuration.regionstyle.strokeOpacity, + opacity: configuration.regionstyle.strokeOpacity || 0.01, weight: configuration.regionstyle.strokeWeight, - fill: (configuration.regionstyle.fillOpacity > 0.0), - smoothFactor: 0.0 + fill: true, + smoothFactor: 0.0, + fillOpacity: configuration.regionstyle.fillOpacity || 0.01, + fillColor: configuration.regionstyle.fillColor }, configuration.regionstyle); } + function getStyle(name, group) { + var style = $.extend({}, configuration.regionstyle); + if(configuration.groupstyle && group && configuration.groupstyle[group]) { + var cs = configuration.groupstyle[group]; + if(cs.strokeColor) + style.color = cs.strokeColor; + if(cs.strokeOpacity) + style.opacity = cs.strokeOpacity; + if(cs.strokeWeight) + style.weight = cs.strokeWeight; + if(cs.fillOpacity) + style.fillOpacity = cs.fillOpacity; + if(cs.fillColor) + style.fillColor = cs.fillColor; + } + if(configuration.customstyle && name && configuration.customstyle[name]) { + var cs = configuration.customstyle[name]; + if(cs.strokeColor) + style.color = cs.strokeColor; + if(cs.strokeOpacity) + style.opacity = cs.strokeOpacity; + if(cs.strokeWeight) + style.weight = cs.strokeWeight; + if(cs.fillOpacity) + style.fillOpacity = cs.fillOpacity; + if(cs.fillColor) + style.fillColor = cs.fillColor; + } + return style; + } + // Helper functions latlng = function(x, y, z) { return dynmap.getProjection().fromLocationToLatLng(new Location(undefined, x,y,z)); } - function create3DBoxLayer(maxx, minx, maxy, miny, maxz, minz) { + function create3DBoxLayer(maxx, minx, maxy, miny, maxz, minz, style) { return new L.FeatureGroup([ new L.Polygon([ latlng(minx,miny,minz), latlng(maxx,miny,minz), latlng(maxx,miny,maxz), latlng(minx,miny,maxz) - ], configuration.regionstyle), + ], style), new L.Polygon([ latlng(minx,maxy,minz), latlng(maxx,maxy,minz), latlng(maxx,maxy,maxz), latlng(minx,maxy,maxz) - ], configuration.regionstyle), + ], style), new L.Polygon([ latlng(minx,miny,minz), latlng(minx,maxy,minz), latlng(maxx,maxy,minz), latlng(maxx,miny,minz) - ], configuration.regionstyle), + ], style), new L.Polygon([ latlng(maxx,miny,minz), latlng(maxx,maxy,minz), latlng(maxx,maxy,maxz), latlng(maxx,miny,maxz) - ], configuration.regionstyle), + ], style), new L.Polygon([ latlng(minx,miny,maxz), latlng(minx,maxy,maxz), latlng(maxx,maxy,maxz), latlng(maxx,miny,maxz) - ], configuration.regionstyle), + ], style), new L.Polygon([ latlng(minx,miny,minz), latlng(minx,maxy,minz), latlng(minx,maxy,maxz), latlng(minx,miny,maxz) - ], configuration.regionstyle) + ], style) ]); } - function create2DBoxLayer(maxx, minx, maxy, miny, maxz, minz) { + function create2DBoxLayer(maxx, minx, maxy, miny, maxz, minz, style) { return new L.Polygon([ latlng(minx,64,minz), latlng(maxx,64,minz), latlng(maxx,64,maxz), latlng(minx,64,maxz) - ], configuration.regionstyle); + ], style); } - function create3DOutlineLayer(xarray, maxy, miny, zarray) { + function create3DOutlineLayer(xarray, maxy, miny, zarray, style) { var toplist = []; var botlist = []; var i; @@ -84,21 +117,21 @@ componentconstructors['regions'] = function(dynmap, configuration) { 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[i] = new L.Polygon(sidelist, style); } - polylist[xarray.length] = new L.Polygon(botlist, configuration.regionstyle); - polylist[xarray.length+1] = new L.Polygon(toplist, configuration.regionstyle); + polylist[xarray.length] = new L.Polygon(botlist, style); + polylist[xarray.length+1] = new L.Polygon(toplist, style); return new L.FeatureGroup(polylist); } - function create2DOutlineLayer(xarray, maxy, miny, zarray) { + function create2DOutlineLayer(xarray, maxy, miny, zarray, style) { 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); + return new L.Polygon(llist, style); } function createPopupContent(name, region) { @@ -121,6 +154,7 @@ componentconstructors['regions'] = function(dynmap, configuration) { popup = popup.replace('%groupmembers%', join(members.groups)); popup = popup.replace('%parent%', region.parent || ""); popup = popup.replace('%priority%', region.priority || ""); + popup = popup.replace('%nation%', region.nation || ""); var regionflags = ""; $.each(region.flags, function(name, value) { regionflags = regionflags + "" + name + ": " + value + "
"; @@ -151,6 +185,7 @@ componentconstructors['regions'] = function(dynmap, configuration) { createPopupContent: createPopupContent, createBoxLayer: configuration.use3dregions ? create3DBoxLayer : create2DBoxLayer, createOutlineLayer: configuration.use3dregions ? create3DOutlineLayer : create2DOutlineLayer, + getStyle: getStyle, result: function(regionsLayer) { activeLayer = regionsLayer; dynmap.map.addLayer(activeLayer); diff --git a/web/js/regions_Residence.js b/web/js/regions_Residence.js index 7a8db228..4f46846a 100644 --- a/web/js/regions_Residence.js +++ b/web/js/regions_Residence.js @@ -9,7 +9,7 @@ regionConstructors['Residence'] = function(dynmap, configuration) { $.each(data, function(name, residence) { if(configuration.worldName == residence.Permissions.World) { $.each(residence.Areas, function(aname, area) { - var boxLayer = configuration.createBoxLayer(area.X1, area.X2, area.Y1, area.Y2, area.Z1, area.Z2); + var boxLayer = configuration.createBoxLayer(area.X1, area.X2, area.Y1, area.Y2, area.Z1, area.Z2, configuration.getStyle(name)); boxLayer.bindPopup(configuration.createPopupContent(name, $.extend(residence, { owners: { players: [residence.Permissions.Owner] }, @@ -20,7 +20,7 @@ regionConstructors['Residence'] = function(dynmap, configuration) { }); $.each(residence.Subzones, function(szname, subzone) { $.each(subzone.Areas, function(name2, area2) { - var subzoneLayer = configuration.createBoxLayer(area2.X1, area2.X2, area2.Y1, area2.Y2, area2.Z1, area2.Z2); + var subzoneLayer = configuration.createBoxLayer(area2.X1, area2.X2, area2.Y1, area2.Y2, area2.Z1, area2.Z2, configuration.getStyle(name+"."+szname, name)); subzoneLayer.bindPopup(configuration.createPopupContent(name + '.' + szname, $.extend(subzone, { owners: { players: [subzone.Permissions.Owner] }, flags: subzone.Permissions.AreaFlags diff --git a/web/js/regions_Towny.js b/web/js/regions_Towny.js index cf8e4b34..ea3a5357 100644 --- a/web/js/regions_Towny.js +++ b/web/js/regions_Towny.js @@ -1,6 +1,6 @@ regionConstructors['Towny'] = function(dynmap, configuration) { // Helper function. - function createOutlineFromRegion(region, outCreator) { + function createOutlineFromRegion(name, region, outCreator) { var xarray = []; var zarray = []; if(region.points) { @@ -13,14 +13,14 @@ regionConstructors['Towny'] = function(dynmap, configuration) { var ymin = 64; var ymax = 65; - return outCreator(xarray, ymax, ymin, zarray); + return outCreator(xarray, ymax, ymin, zarray, configuration.getStyle(name, region.nation)); } var regionFile = 'towny_'+configuration.worldName+'.json'; $.getJSON('standalone/'+regionFile, function(data) { var boxLayers = []; $.each(data, function(name, region) { - var outLayer = createOutlineFromRegion(region, configuration.createOutlineLayer); + var outLayer = createOutlineFromRegion(name, region, configuration.createOutlineLayer); if (outLayer) { outLayer.bindPopup(configuration.createPopupContent(name, $.extend(region, { diff --git a/web/js/regions_WorldGuard.js b/web/js/regions_WorldGuard.js index 284f7cf4..08583342 100644 --- a/web/js/regions_WorldGuard.js +++ b/web/js/regions_WorldGuard.js @@ -1,6 +1,6 @@ regionConstructors['WorldGuard'] = function(dynmap, configuration) { // Helper function. - function createBoxFromRegion(region, boxCreator) { + function createBoxFromRegion(name, region, boxCreator) { function ArrayMax( array ) { return Math.max.apply( Math, array ); } @@ -11,16 +11,16 @@ regionConstructors['WorldGuard'] = function(dynmap, configuration) { var i; var xs = region.points.map(function(p) { return p.x; }); var zs = region.points.map(function(p) { return p.z; }); - return boxCreator(ArrayMax(xs), ArrayMin(xs), region['max-y'], region['min-y'], ArrayMax(zs), ArrayMin(zs)); + return boxCreator(ArrayMax(xs), ArrayMin(xs), region['max-y'], region['min-y'], ArrayMax(zs), ArrayMin(zs), configuration.getStyle(name)); } if(!region.min || !region.max) return null; if(region.max.y <= region.min.y) 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); + return boxCreator(region.max.x, region.min.x, region.max.y, region.min.y, region.max.z, region.min.z, configuration.getStyle(name)); } - function createOutlineFromRegion(region, outCreator) { + function createOutlineFromRegion(name, region, outCreator) { var xarray = []; var zarray = []; if(region.points) { @@ -38,7 +38,7 @@ regionConstructors['WorldGuard'] = function(dynmap, configuration) { ymin = region['min-y']; if(ymax < ymin) ymax = ymin; - return outCreator(xarray, ymax, ymin, zarray); + return outCreator(xarray, ymax, ymin, zarray, configuration.getStyle(name)); } var regionFile = configuration.filename.substr(0, configuration.filename.lastIndexOf('.')); @@ -48,7 +48,7 @@ regionConstructors['WorldGuard'] = function(dynmap, configuration) { $.each(data, function(name, region) { // Only handle cuboids for the moment (therefore skipping 'global') if (region.type === 'cuboid') { - var boxLayer = createBoxFromRegion(region, configuration.createBoxLayer); + var boxLayer = createBoxFromRegion(name, region, configuration.createBoxLayer); // Skip errorous regions. if (boxLayer) { boxLayer.bindPopup(configuration.createPopupContent(name, region)); @@ -57,7 +57,7 @@ regionConstructors['WorldGuard'] = function(dynmap, configuration) { } } else if(region.type === 'poly2d') { - var outLayer = createOutlineFromRegion(region, configuration.createOutlineLayer); + var outLayer = createOutlineFromRegion(name, region, configuration.createOutlineLayer); if (outLayer) { outLayer.bindPopup(configuration.createPopupContent(name, region)); boxLayers.push(outLayer);