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);