From 114aaf9fe49ca64567f63baf993dc534229a17f8 Mon Sep 17 00:00:00 2001 From: Leonardo Date: Thu, 26 Aug 2021 19:33:15 +0200 Subject: [PATCH] Update doesn't use temp object anymore --- .../com/seibel/lod/objects/LodRegion.java | 71 ++++++++++--------- 1 file changed, 37 insertions(+), 34 deletions(-) diff --git a/src/main/java/com/seibel/lod/objects/LodRegion.java b/src/main/java/com/seibel/lod/objects/LodRegion.java index 403cb8edd..20e0fddf1 100644 --- a/src/main/java/com/seibel/lod/objects/LodRegion.java +++ b/src/main/java/com/seibel/lod/objects/LodRegion.java @@ -381,33 +381,34 @@ public class LodRegion implements Serializable public void updateArea(LevelPos levelPos) { - - LevelPos tempLevelPos; int width; int startX; int startZ; - for(byte bottom = (byte) (minDetailLevel + 1); bottom <= levelPos.detailLevel ; bottom++){ - tempLevelPos = levelPos.getConvertedLevelPos(bottom); - startX = tempLevelPos.posX; - startZ = tempLevelPos.posZ; - width = 1 << (levelPos.detailLevel - bottom); + byte detailLevel = levelPos.detailLevel; + int posX = levelPos.posX; + int posZ = levelPos.posZ; + for(byte bottom = (byte) (minDetailLevel + 1); bottom <= detailLevel ; bottom++){ + levelPos.convert(bottom); + startX = levelPos.posX; + startZ = levelPos.posZ; + width = 1 << (detailLevel - bottom); for(int x = 0; x < width; x++){ for(int z = 0; z < width; z++) { - update(new LevelPos(bottom, startX+x, startZ+z)); + levelPos.changeParameters(bottom,startX+x,startZ+z); + update(levelPos); } } - + levelPos.changeParameters(detailLevel,posX,posZ); } - for (byte tempLod = (byte) (levelPos.detailLevel + 1); tempLod <= LodUtil.REGION_DETAIL_LEVEL; tempLod++) { - tempLevelPos = levelPos.getConvertedLevelPos(tempLod); - update(tempLevelPos); + for (byte tempLod = (byte) (detailLevel + 1); tempLod <= LodUtil.REGION_DETAIL_LEVEL; tempLod++) { + levelPos.convert(tempLod); + update(levelPos); } } private void update(LevelPos levelPos) { - - levelPos = levelPos.getRegionModuleLevelPos(); + levelPos.performRegionModule(); int numberOfChildren = 0; byte minGenerationType = 5; @@ -418,39 +419,41 @@ public class LodRegion implements Serializable int tempDepth = 0; int newPosX; int newPosZ; - byte newLod; - LevelPos childPos; + byte newDetailLevel; + int detailLevel = levelPos.detailLevel; + int posX = levelPos.posX; + int posZ = levelPos.posZ; for (int x = 0; x <= 1; x++) { for (int z = 0; z <= 1; z++) { - newPosX = 2 * levelPos.posX + x; - newPosZ = 2 * levelPos.posZ + z; - newLod = (byte) (levelPos.detailLevel - 1); - childPos = new LevelPos(newLod, newPosX, newPosZ); - if (hasDataBeenGenerated(childPos)) + newPosX = 2 * posX + x; + newPosZ = 2 * posZ + z; + newDetailLevel = (byte) (detailLevel - 1); + levelPos.changeParameters(newDetailLevel, newPosX, newPosZ); + if (hasDataBeenGenerated(levelPos)) { numberOfChildren++; - tempRed += colors[newLod][newPosX][newPosZ][0]; - tempGreen += colors[newLod][newPosX][newPosZ][1]; - tempBlue += colors[newLod][newPosX][newPosZ][2]; - tempHeight += height[newLod][newPosX][newPosZ]; - tempDepth += depth[newLod][newPosX][newPosZ]; - minGenerationType = (byte) Math.min(minGenerationType, generationType[newLod][newPosX][newPosZ]); + tempRed += colors[newDetailLevel][newPosX][newPosZ][0]; + tempGreen += colors[newDetailLevel][newPosX][newPosZ][1]; + tempBlue += colors[newDetailLevel][newPosX][newPosZ][2]; + tempHeight += height[newDetailLevel][newPosX][newPosZ]; + tempDepth += depth[newDetailLevel][newPosX][newPosZ]; + minGenerationType = (byte) Math.min(minGenerationType, generationType[newDetailLevel][newPosX][newPosZ]); } } } if (numberOfChildren > 0) { - colors[levelPos.detailLevel][levelPos.posX][levelPos.posZ][0] = (byte) (tempRed / numberOfChildren); - colors[levelPos.detailLevel][levelPos.posX][levelPos.posZ][1] = (byte) (tempGreen / numberOfChildren); - colors[levelPos.detailLevel][levelPos.posX][levelPos.posZ][2] = (byte) (tempBlue / numberOfChildren); - height[levelPos.detailLevel][levelPos.posX][levelPos.posZ] = (short) (tempHeight / numberOfChildren); - depth[levelPos.detailLevel][levelPos.posX][levelPos.posZ] = (short) (tempDepth / numberOfChildren); - generationType[levelPos.detailLevel][levelPos.posX][levelPos.posZ] = minGenerationType; - dataExistence[levelPos.detailLevel][levelPos.posX][levelPos.posZ] = true; + colors[detailLevel][posX][posZ][0] = (byte) (tempRed / numberOfChildren); + colors[detailLevel][posX][posZ][1] = (byte) (tempGreen / numberOfChildren); + colors[detailLevel][posX][posZ][2] = (byte) (tempBlue / numberOfChildren); + height[detailLevel][posX][posZ] = (short) (tempHeight / numberOfChildren); + depth[detailLevel][posX][posZ] = (short) (tempDepth / numberOfChildren); + generationType[detailLevel][posX][posZ] = minGenerationType; + dataExistence[detailLevel][posX][posZ] = true; } }