Merge pull request #276 from sk89q/better-non-cuboid-walls

//walls on non-cuboid regions no longer introduces gaps in walls beyond 45 degrees.
Dieser Commit ist enthalten in:
Albert Pham 2013-11-04 23:13:37 -08:00
Commit 157c0fa60b
2 geänderte Dateien mit 14 neuen und 20 gelöschten Zeilen

Datei anzeigen

@ -1654,7 +1654,20 @@ public class EditSession {
* @throws MaxChangedBlocksException * @throws MaxChangedBlocksException
*/ */
public int makeWalls(final Region region, Pattern pattern) throws MaxChangedBlocksException { public int makeWalls(final Region region, Pattern pattern) throws MaxChangedBlocksException {
return new RegionShape(region).generate(this, pattern, true, true); final int minY = region.getMinimumPoint().getBlockY();
final int maxY = region.getMaximumPoint().getBlockY();
final ArbitraryShape shape = new RegionShape(region) {
@Override
protected BaseBlock getMaterial(int x, int y, int z, BaseBlock defaultMaterial) {
if (y > maxY || y < minY) {
// Put holes into the floor and ceiling by telling ArbitraryShape that the shape goes on outside the region
return defaultMaterial;
}
return super.getMaterial(x, y, z, defaultMaterial);
}
};
return shape.generate(this, pattern, true);
} }
/** /**

Datei anzeigen

@ -148,20 +148,6 @@ public abstract class ArbitraryShape {
* @throws MaxChangedBlocksException * @throws MaxChangedBlocksException
*/ */
public int generate(EditSession editSession, Pattern pattern, boolean hollow) throws MaxChangedBlocksException { public int generate(EditSession editSession, Pattern pattern, boolean hollow) throws MaxChangedBlocksException {
return generate(editSession, pattern, hollow, false);
}
/**
* Generates the shape.
*
* @param editSession The EditSession to use.
* @param pattern The pattern to generate default materials from.
* @param hollow Specifies whether to generate a hollow shape.
* @param flat If hollow mode is enabled, disregard blocks above/below
* @return number of affected blocks.
* @throws MaxChangedBlocksException
*/
public int generate(EditSession editSession, Pattern pattern, boolean hollow, boolean flat) throws MaxChangedBlocksException {
int affected = 0; int affected = 0;
for (BlockVector position : getExtent()) { for (BlockVector position : getExtent()) {
@ -201,11 +187,6 @@ public abstract class ArbitraryShape {
draw = true; draw = true;
break; break;
} }
if (flat) {
break;
}
if (!isInsideCached(x, y + 1, z, pattern)) { if (!isInsideCached(x, y + 1, z, pattern)) {
draw = true; draw = true;
break; break;