private Rect2i findLastAtYPosition(Deque<Rect2i> floats, int y) { Iterator<Rect2i> iterator = floats.descendingIterator(); while (iterator.hasNext()) { Rect2i rect = iterator.next(); if (rect.minY() <= y && rect.maxY() > y) { return rect; } } return null; } }
/** * Provides the "start" edge for the alignment - so for TOP it is the top edge, for BOTTOM it is the bottom edge * @param region * @return Where placement in the region begins for the alignment. */ public int getStart(Rect2i region) { return region.minY() + getOffset(0, region.height()); } }
protected final int getRelativeIndex(int x, int z) { if (!relativeRegion.contains(x, z)) { throw new IllegalArgumentException(String.format("Out of bounds: (%d, %d) for region %s", x, z, relativeRegion.toString())); } return x - relativeRegion.minX() + relativeRegion.sizeX() * (z - relativeRegion.minY()); }
protected final int getWorldIndex(int x, int z) { if (!worldRegion.contains(x, z)) { throw new IllegalArgumentException(String.format("Out of bounds: (%d, %d) for region %s", x, z, worldRegion.toString())); } return x - worldRegion.minX() + worldRegion.sizeX() * (z - worldRegion.minY()); } }
@Override public void apply(float v) { consumer.accept(Rect2i.createFromMinAndMax( // rounds towards zero (int) (v * (to.minX() - from.minX()) + from.minX()), (int) (v * (to.minY() - from.minY()) + from.minY()), (int) (v * (to.maxX() - from.maxX()) + from.maxX()), (int) (v * (to.maxY() - from.maxY()) + from.maxY()) )); } }
@Override public void onDraw(Canvas canvas) { if (!contents.isEmpty()) { Rect2i region = canvas.getRegion(); Rect2i buttonRegion = Rect2i.createFromMinAndSize(region.minX(), region.minY(), region.width(), tabBarHeight); Rect2i boxRegion = Rect2i.createFromMinAndMax(region.minX(), region.minY() + tabBarHeight, region.width(), region.height()); canvas.drawWidget(contents.get(currentTab), boxRegion); canvas.drawWidget(buttonLayout, buttonRegion); } }
private float[] getKeyValues(Rect2i fullRegion) { int xDim = fullRegion.size().x / sampleRate + 1; int yDim = fullRegion.size().y / sampleRate + 1; float[] fullData = new float[xDim * yDim]; for (int y = 0; y < yDim; y++) { for (int x = 0; x < xDim; x++) { int actualX = x * sampleRate + fullRegion.minX(); int actualY = y * sampleRate + fullRegion.minY(); fullData[x + y * xDim] = source.noise(zoom.x * actualX, zoom.y * actualY); } } return fullData; }
private float[] getKeyValues(Rect2i fullRegion) { int xDim = fullRegion.sizeX() / sampleRate + 1; int yDim = fullRegion.sizeY() / sampleRate + 1; float[] fullData = new float[xDim * yDim]; for (int y = 0; y < yDim; y++) { for (int x = 0; x < xDim; x++) { int actualX = x * sampleRate + fullRegion.minX(); int actualY = y * sampleRate + fullRegion.minY(); fullData[x + y * xDim] = source.noise(zoom.x * actualX, zoom.y * actualY); } } return fullData; }
private Rect2i determineRequiredRegion(Rect2i region) { int newMinX = region.minX() - IntMath.mod(region.minX(), sampleRate); int newMinY = region.minY() - IntMath.mod(region.minY(), sampleRate); int newMaxX = region.maxX() + 4 - IntMath.mod(region.maxX(), sampleRate) - 1; int newMaxY = region.maxY() + 4 - IntMath.mod(region.maxY(), sampleRate) - 1; return Rect2i.createFromMinAndMax(newMinX, newMinY, newMaxX, newMaxY); }
private Rect2i determineRequiredRegion(Rect2i region) { int newMinX = region.minX() - IntMath.mod(region.minX(), sampleRate); int newMinY = region.minY() - IntMath.mod(region.minY(), sampleRate); int newMaxX = region.maxX() + 4 - IntMath.mod(region.maxX(), sampleRate) - 1; int newMaxY = region.maxY() + 4 - IntMath.mod(region.maxY(), sampleRate) - 1; return Rect2i.createFromMinAndMax(newMinX, newMinY, newMaxX, newMaxY); } }
private float[] getSubset(float[] fullData, Rect2i fullRegion, Rect2i subRegion) { if (subRegion.sizeX() != fullRegion.sizeX() || subRegion.sizeY() != fullRegion.sizeY()) { float[] result = new float[subRegion.sizeX() * subRegion.sizeY()]; Vector2i offset = new Vector2i(subRegion.minX() - fullRegion.minX(), subRegion.minY() - fullRegion.minY()); for (int y = 0; y < subRegion.sizeY(); ++y) { System.arraycopy(fullData, offset.getX() + fullRegion.sizeX() * (y + offset.getY()), result, subRegion.sizeX() * y, subRegion.sizeX()); } return result; } else { return fullData; } }
private Rect2i applyStyleToSize(Rect2i region, UIStyle style, Vector2i maxSize) { if (region.isEmpty()) { return region; } Vector2i size = applyStyleToSize(region.size(), style); size.x = Math.min(size.x, maxSize.x); size.y = Math.min(size.y, maxSize.y); int minX = region.minX() + style.getHorizontalAlignment().getOffset(size.x, region.width()); int minY = region.minY() + style.getVerticalAlignment().getOffset(size.y, region.height()); return Rect2i.createFromMinAndSize(minX, minY, size.x, size.y); }
private float[] getSubset(float[] fullData, Rect2i fullRegion, Rect2i subRegion) { if (subRegion.size().x != fullRegion.size().x || subRegion.size().y != fullRegion.size().y) { float[] result = new float[subRegion.size().x * subRegion.size().y]; Vector2i offset = new Vector2i(subRegion.minX() - fullRegion.minX(), subRegion.minY() - fullRegion.minY()); for (int y = 0; y < subRegion.size().y; ++y) { System.arraycopy(fullData, offset.getX() + fullRegion.size().x * (y + offset.getY()), result, subRegion.size().x * y, subRegion.size().x); } return result; } else { return fullData; } }
@Override public void drawMaterialAt(Material material, Rect2i drawRegion) { glPushMatrix(); glTranslatef(drawRegion.minX(), drawRegion.minY(), 0f); glScalef(drawRegion.width(), drawRegion.height(), 1); billboard.render(); glPopMatrix(); }
private static Rect2i worldToTileArea(Rect2i area) { int chunkMinX = IntMath.divide(area.minX(), TILE_SIZE_X, RoundingMode.FLOOR); int chunkMinZ = IntMath.divide(area.minY(), TILE_SIZE_Y, RoundingMode.FLOOR); int chunkMaxX = IntMath.divide(area.maxX(), TILE_SIZE_X, RoundingMode.CEILING); int chunkMaxZ = IntMath.divide(area.maxY(), TILE_SIZE_Y, RoundingMode.CEILING); return Rect2i.createFromMinAndMax(chunkMinX, chunkMinZ, chunkMaxX, chunkMaxZ); }
public Rect2i shrink(org.terasology.math.geom.Rect2i region) { return Rect2i.createFromMinAndSize(region.minX() + getLeft(), region.minY() + getTop(), region.width() - getTotalWidth(), region.height() - getTotalHeight()); }
public Rect2i grow(org.terasology.math.geom.Rect2i region) { // Note protection against overflow of the size return Rect2i.createFromMinAndSize(region.minX() - getLeft(), region.minY() - getTop(), TeraMath.addClampAtMax(region.width(), getTotalWidth()), TeraMath.addClampAtMax(region.height(), getTotalHeight())); } }
@Test public void testRelativeToAbsolute() { Rect2i relativeRegion = Rect2i.createFromMinAndMax(5, 10, 20, 15); assertEquals(Line.relativeToAbsolute(relativeRegion, cropRegion), Rect2i.createFromMinAndSize(cropRegion.minX() + relativeRegion.minX(), cropRegion.minY() + relativeRegion.minY(), relativeRegion.width(), relativeRegion.height())); }
private Rect2i applyStyleToSize(Rect2i region, UIStyle style) { if (region.isEmpty()) { return region; } Vector2i size = applyStyleToSize(region.size(), style); int minX = region.minX() + style.getHorizontalAlignment().getOffset(size.x, region.width()); int minY = region.minY() + style.getVerticalAlignment().getOffset(size.y, region.height()); return Rect2i.createFromMinAndSize(minX, minY, size.x, size.y); }