private void updateLevel(final Renderer renderer, final LevelData levelData, final int x, final int y) { final int diffX = x - levelData.x; final int diffY = y - levelData.y; levelData.x = x; levelData.y = y; final int sX = x - textureSize / 2; final int sY = y - textureSize / 2; levelData.offsetX += diffX; levelData.offsetY += diffY; levelData.offsetX = MathUtils.moduloPositive(levelData.offsetX, textureSize); levelData.offsetY = MathUtils.moduloPositive(levelData.offsetY, textureSize); updateQuick(renderer, levelData, diffX, diffY, sX, sY, levelData.offsetX, levelData.offsetY, textureSize, textureSize); }
private void updateLevel(final Renderer renderer, final LevelData levelData, final int x, final int y) { final int diffX = x - levelData.x; final int diffY = y - levelData.y; levelData.x = x; levelData.y = y; final int sX = x - textureSize / 2; final int sY = y - textureSize / 2; levelData.offsetX += diffX; levelData.offsetY += diffY; levelData.offsetX = MathUtils.moduloPositive(levelData.offsetX, textureSize); levelData.offsetY = MathUtils.moduloPositive(levelData.offsetY, textureSize); updateQuick(renderer, levelData, diffX, diffY, sX, sY, levelData.offsetX, levelData.offsetY, textureSize, textureSize); }
final int currentSourceZ = sourceY + z; final int currentDestZ = destY + z; final int dataY = MathUtils.moduloPositive(currentDestZ, destinationSize); final int dataX = MathUtils.moduloPositive(destX, destinationSize); if (dataX + width > destinationSize) { final int destIndex = dataY * destinationSize * colorBits;
final int currentSourceZ = sourceY + z; final int currentDestZ = destY + z; final int dataY = MathUtils.moduloPositive(currentDestZ, destinationSize); final int dataX = MathUtils.moduloPositive(destX, destinationSize); if (dataX + width > destinationSize) { final int destIndex = dataY * destinationSize * colorBits;
public Set<Tile> handleUpdateRequests() { final Set<Tile> updateTiles = getInvalidTilesFromSource(dataClipIndex, backCurrentTileX - cacheSize / 2, backCurrentTileY - cacheSize / 2, cacheSize, cacheSize); if (updateTiles == null || updateTiles.isEmpty()) { return null; } for (final Tile tile : updateTiles) { final int destX = MathUtils.moduloPositive(tile.getX(), cacheSize); final int destY = MathUtils.moduloPositive(tile.getY(), cacheSize); copyTileData(tile, destX, destY); } return updateTiles; }
g2.setColor(Color.white); final int x = MathUtils.moduloPositive(data.sourceTile.getX(), cacheSize); final int y = MathUtils.moduloPositive(data.sourceTile.getY(), cacheSize); final int xPos = x * size + 20 + (cacheList.size() - i - 1) * (size * cacheSize + 5); final int yPos = y * size + 20;
g2.setColor(Color.white); final int x = MathUtils.moduloPositive(data.sourceTile.getX(), cacheSize); final int y = MathUtils.moduloPositive(data.sourceTile.getY(), cacheSize); final int xPos = x * size + 20 + (cacheList.size() - i - 1) * (size * cacheSize + 5); final int yPos = y * size + 20;
break; final int x = MathUtils.moduloPositive(data.sourceTile.getX(), cacheSize); final int y = MathUtils.moduloPositive(data.sourceTile.getY(), cacheSize); final int xPos = x * size + 20 + (cacheList.size() - i - 1) * (size * cacheSize + 5); final int yPos = y * size + 20;
break; final int x = MathUtils.moduloPositive(data.sourceTile.getX(), cacheSize); final int y = MathUtils.moduloPositive(data.sourceTile.getY(), cacheSize); final int xPos = x * size + 20 + (cacheList.size() - i - 1) * (size * cacheSize + 5); final int yPos = y * size + 20;
final int destX = MathUtils.moduloPositive(tile.getX(), cacheSize); final int destY = MathUtils.moduloPositive(tile.getY(), cacheSize);
final int destX = MathUtils.moduloPositive(tile.getX(), cacheSize); final int destY = MathUtils.moduloPositive(tile.getY(), cacheSize);
public void updateCache() { getWorldTransform().applyInverse(clipmapTestFrustum.getLocation(), transformedFrustumPos); final int cx = (int) transformedFrustumPos.getX(); final int cz = (int) transformedFrustumPos.getZ(); // Calculate the new position int clipX = cx - (clipSideSize + 1) * vertexDistance / 2; int clipY = cz - (clipSideSize + 1) * vertexDistance / 2; // Calculate the modulo to doubleVertexDistance of the new position. // This makes sure that the current level always fits in the hole of the // coarser level. The gridspacing of the coarser level is vertexDistance * 2, so here doubleVertexDistance. final int modX = MathUtils.moduloPositive(clipX, doubleVertexDistance); final int modY = MathUtils.moduloPositive(clipY, doubleVertexDistance); clipX = clipX + doubleVertexDistance - modX; clipY = clipY + doubleVertexDistance - modY; cache.setCurrentPosition(clipX / vertexDistance, clipY / vertexDistance); // TODO cache.handleUpdateRequests(); }
public void updateCache() { getWorldTransform().applyInverse(clipmapTestFrustum.getLocation(), transformedFrustumPos); final int cx = (int) transformedFrustumPos.getX(); final int cz = (int) transformedFrustumPos.getZ(); // Calculate the new position int clipX = cx - (clipSideSize + 1) * vertexDistance / 2; int clipY = cz - (clipSideSize + 1) * vertexDistance / 2; // Calculate the modulo to doubleVertexDistance of the new position. // This makes sure that the current level always fits in the hole of the // coarser level. The gridspacing of the coarser level is vertexDistance * 2, so here doubleVertexDistance. final int modX = MathUtils.moduloPositive(clipX, doubleVertexDistance); final int modY = MathUtils.moduloPositive(clipY, doubleVertexDistance); clipX = clipX + doubleVertexDistance - modX; clipY = clipY + doubleVertexDistance - modY; cache.setCurrentPosition(clipX / vertexDistance, clipY / vertexDistance); // TODO cache.handleUpdateRequests(); }
/** * * @param xDif * a value applied to the azimuth value of our spherical coordinates. Inverted if {@link #isInvertedX()} * is true. * @param yDif * a value applied to the theta value of our spherical coordinates. Inverted if {@link #isInvertedY()} is * true. */ public void move(final double xDif, final double yDif) { final double azimuthAccel = _invertedX ? -xDif : xDif; final double thetaAccel = _invertedY ? -yDif : yDif; // update our master spherical coords, using x and y movement _sphereCoords.setY(MathUtils.moduloPositive(_sphereCoords.getY() - azimuthAccel, MathUtils.TWO_PI)); _sphereCoords.setZ(MathUtils.clamp(_sphereCoords.getZ() + thetaAccel, _minAscent, _maxAscent)); makeDirty(); }
/** * * @param xDif * a value applied to the azimuth value of our spherical coordinates. Inverted if {@link #isInvertedX()} * is true. * @param yDif * a value applied to the theta value of our spherical coordinates. Inverted if {@link #isInvertedY()} is * true. */ public void move(final double xDif, final double yDif) { final double azimuthAccel = _invertedX ? -xDif : xDif; final double thetaAccel = _invertedY ? -yDif : yDif; // update our master spherical coords, using x and y movement _sphereCoords.setY(MathUtils.moduloPositive(_sphereCoords.getY() - azimuthAccel, MathUtils.TWO_PI)); _sphereCoords.setZ(MathUtils.clamp(_sphereCoords.getZ() + thetaAccel, _minAscent, _maxAscent)); makeDirty(); }
@Override public int getSubColor(final float x, final float z) { int tileX = MathUtils.floor(x / tileSize); int tileY = MathUtils.floor(z / tileSize); tileX = MathUtils.moduloPositive(tileX, cacheSize); tileY = MathUtils.moduloPositive(tileY, cacheSize); final CacheData tileData = cache[tileX][tileY]; if (!tileData.isValid) { if (parentCache != null) { return parentCache.getSubColor(x / 2f, z / 2f); } else { return 0; } } else { final int col = MathUtils.floor(x); final int row = MathUtils.floor(z); final double intOnX = x - col; final double intOnZ = z - row; final int topLeft = getColor(col, row); final int topRight = getColor(col + 1, row); final int top = IntColorUtils.lerp(intOnX, topLeft, topRight); final int bottomLeft = getColor(col, row + 1); final int bottomRight = getColor(col + 1, row + 1); final int bottom = IntColorUtils.lerp(intOnX, bottomLeft, bottomRight); return IntColorUtils.lerp(intOnZ, top, bottom); } }
@Override public int getSubColor(final float x, final float z) { int tileX = MathUtils.floor(x / tileSize); int tileY = MathUtils.floor(z / tileSize); tileX = MathUtils.moduloPositive(tileX, cacheSize); tileY = MathUtils.moduloPositive(tileY, cacheSize); final CacheData tileData = cache[tileX][tileY]; if (!tileData.isValid) { if (parentCache != null) { return parentCache.getSubColor(x / 2f, z / 2f); } else { return 0; } } else { final int col = MathUtils.floor(x); final int row = MathUtils.floor(z); final double intOnX = x - col; final double intOnZ = z - row; final int topLeft = getColor(col, row); final int topRight = getColor(col + 1, row); final int top = IntColorUtils.lerp(intOnX, topLeft, topRight); final int bottomLeft = getColor(col, row + 1); final int bottomRight = getColor(col + 1, row + 1); final int bottom = IntColorUtils.lerp(intOnX, bottomLeft, bottomRight); return IntColorUtils.lerp(intOnZ, top, bottom); } }
tileData = null; } else { tileX = MathUtils.moduloPositive(tileX, cacheSize); tileY = MathUtils.moduloPositive(tileY, cacheSize); tileData = cache[tileX][tileY];
tileData = null; } else { tileX = MathUtils.moduloPositive(tileX, cacheSize); tileY = MathUtils.moduloPositive(tileY, cacheSize); tileData = cache[tileX][tileY];
final int modX = MathUtils.moduloPositive(clipRegion.getX(), doubleVertexDistance); final int modY = MathUtils.moduloPositive(clipRegion.getY(), doubleVertexDistance); clipRegion.setX(clipRegion.getX() + doubleVertexDistance - modX); clipRegion.setY(clipRegion.getY() + doubleVertexDistance - modY);