Renamed RegionPos to DHRegionPos as per the suggestion

This commit is contained in:
TomTheFurry
2022-05-03 14:21:52 +08:00
parent b4bad71813
commit 09a9e98937
11 changed files with 50 additions and 61 deletions
@@ -26,7 +26,7 @@ import com.seibel.lod.core.handlers.dependencyInjection.SingletonHandler;
import com.seibel.lod.core.logging.DhLoggerBuilder;
import com.seibel.lod.core.objects.DHChunkPos;
import com.seibel.lod.core.objects.lod.LodDimension;
import com.seibel.lod.core.objects.lod.RegionPos;
import com.seibel.lod.core.objects.DHRegionPos;
import com.seibel.lod.core.render.GLProxy;
import com.seibel.lod.core.render.LodRenderer;
import com.seibel.lod.core.util.DetailDistanceUtil;
@@ -217,9 +217,9 @@ public class EventApi
public void playerMoveEvent(LodDimension lodDim)
{
// make sure the dimension is centered
RegionPos playerRegionPos = new RegionPos(MC.getPlayerBlockPos());
RegionPos center = lodDim.getCenterRegionPos();
RegionPos worldRegionOffset = new RegionPos(playerRegionPos.x - center.x, playerRegionPos.z - center.z);
DHRegionPos playerRegionPos = new DHRegionPos(MC.getPlayerBlockPos());
DHRegionPos center = lodDim.getCenterRegionPos();
DHRegionPos worldRegionOffset = new DHRegionPos(playerRegionPos.x - center.x, playerRegionPos.z - center.z);
if (worldRegionOffset.x != 0 || worldRegionOffset.z != 0)
{
lodDim.move(worldRegionOffset);
@@ -24,13 +24,12 @@ import java.time.Duration;
import java.util.concurrent.*;
import java.util.concurrent.locks.ReentrantLock;
import com.seibel.lod.core.api.internal.InternalApiShared;
import com.seibel.lod.core.handlers.dependencyInjection.SingletonHandler;
import com.seibel.lod.core.logging.DhLoggerBuilder;
import com.seibel.lod.core.logging.SpamReducedLogger;
import com.seibel.lod.core.objects.Pos2D;
import com.seibel.lod.core.objects.lod.LodDimension;
import com.seibel.lod.core.objects.lod.RegionPos;
import com.seibel.lod.core.objects.DHRegionPos;
import com.seibel.lod.core.objects.opengl.RenderRegion;
import com.seibel.lod.core.render.LodRenderer;
import com.seibel.lod.core.render.objects.GLBuffer;
@@ -227,7 +226,7 @@ public class LodBufferBuilderFactory {
for (int regX = minPos.x; regX < maxPos.x; regX++) {
for (int regZ = minPos.y; regZ < maxPos.y; regZ++) {
RenderRegion r = renderRegions.get(regX, regZ);
RegionPos regPos = new RegionPos(regX, regZ);
DHRegionPos regPos = new DHRegionPos(regX, regZ);
if (r != null && !r.canRender(lodDim, regPos)) {
renderRegions.set(regX, regZ, null);
r.close();
@@ -45,7 +45,7 @@ import com.seibel.lod.core.enums.config.VerticalQuality;
import com.seibel.lod.core.objects.lod.LevelContainer;
import com.seibel.lod.core.objects.lod.LodDimension;
import com.seibel.lod.core.objects.lod.LodRegion;
import com.seibel.lod.core.objects.lod.RegionPos;
import com.seibel.lod.core.objects.DHRegionPos;
import com.seibel.lod.core.objects.lod.VerticalLevelContainer;
import com.seibel.lod.core.util.LodThreadFactory;
import com.seibel.lod.core.util.LodUtil;
@@ -117,7 +117,7 @@ public class LodDimensionFileHandler
private ExecutorService fileWritingThreadPool = Executors.newSingleThreadExecutor(
new LodThreadFactory(this.getClass().getSimpleName(), Thread.NORM_PRIORITY + 1));
private final ConcurrentHashMap<RegionPos, LodRegion> regionToSave = new ConcurrentHashMap<RegionPos, LodRegion>();
private final ConcurrentHashMap<DHRegionPos, LodRegion> regionToSave = new ConcurrentHashMap<DHRegionPos, LodRegion>();
public LodDimensionFileHandler(File newSaveFolder, LodDimension newLodDimension)
@@ -199,7 +199,7 @@ public class LodDimensionFileHandler
* Returns a new LodRegion at the given coordinates.
* Returns an empty region if the file doesn't exist.
*/
public LodRegion loadRegionFromFile(byte detailLevel, RegionPos regionPos, VerticalQuality verticalQuality)
public LodRegion loadRegionFromFile(byte detailLevel, DHRegionPos regionPos, VerticalQuality verticalQuality)
{
// Get one from the region hot cache
LodRegion region = regionToSave.get(regionPos);
@@ -33,7 +33,7 @@ import com.seibel.lod.core.logging.ConfigBasedLogger;
import com.seibel.lod.core.objects.DHChunkPos;
import com.seibel.lod.core.objects.lod.LodDimension;
import com.seibel.lod.core.objects.lod.LodRegion;
import com.seibel.lod.core.objects.lod.RegionPos;
import com.seibel.lod.core.objects.DHRegionPos;
import com.seibel.lod.core.util.DataPointUtil;
import com.seibel.lod.core.util.LodUtil;
import com.seibel.lod.core.wrapperInterfaces.IWrapperFactory;
@@ -226,7 +226,7 @@ public class LodDimensionFinder
DHChunkPos playerChunkPos = new DHChunkPos(playerData.playerBlockPos);
int startingBlockPosX = playerChunkPos.getMinBlockX();
int startingBlockPosZ = playerChunkPos.getMinBlockZ();
RegionPos playerRegionPos = new RegionPos(playerChunkPos);
DHRegionPos playerRegionPos = new DHRegionPos(playerChunkPos);
// chunk from the newly loaded dimension
@@ -30,12 +30,11 @@ import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.Future;
import com.seibel.lod.core.api.internal.InternalApiShared;
import com.seibel.lod.core.logging.DhLoggerBuilder;
import org.apache.commons.compress.compressors.xz.XZCompressorInputStream;
import com.seibel.lod.core.enums.config.VerticalQuality;
import com.seibel.lod.core.objects.lod.RegionPos;
import com.seibel.lod.core.objects.DHRegionPos;
import com.seibel.lod.core.objects.lod.VerticalLevelContainer;
import com.seibel.lod.core.util.LodUtil;
import org.apache.logging.log4j.Logger;
@@ -76,7 +75,7 @@ public class LodDimensionOldFileStructureHandler
final VerticalQuality vertQual;
final int posX;
final int posZ;
TempLodRegion(VerticalQuality vertQual, RegionPos pos) {
TempLodRegion(VerticalQuality vertQual, DHRegionPos pos) {
this.vertQual = vertQual;
posX = pos.x;
posZ = pos.z;
@@ -166,7 +165,7 @@ public class LodDimensionOldFileStructureHandler
}
}
private void loadAndMergeAndSaveRegion(VerticalQuality verticalQuality, RegionPos regionPos)
private void loadAndMergeAndSaveRegion(VerticalQuality verticalQuality, DHRegionPos regionPos)
{
LOGGER.info("Merging region "+regionPos+" at "+verticalQuality+"...");
TempLodRegion region = new TempLodRegion(verticalQuality, regionPos);
@@ -184,20 +183,20 @@ public class LodDimensionOldFileStructureHandler
private RegionPos parseFileName(String fileName) {
private DHRegionPos parseFileName(String fileName) {
if (!fileName.endsWith(FILE_EXTENSION)) return null;
if (!fileName.startsWith(FILE_NAME_PREFIX)) return null;
String[] array = fileName.split("\\."); // Array content: "lod", "-1", "1", ".xz"
if (array.length!=4) return null;
try {
return new RegionPos(Integer.parseInt(array[1]), Integer.parseInt(array[2]));
return new DHRegionPos(Integer.parseInt(array[1]), Integer.parseInt(array[2]));
} catch (NumberFormatException e) {
return null;
}
}
private HashSet<RegionPos> scanOldRegionFiles(VerticalQuality vertQual, OldDistanceGenerationMode genMode) {
HashSet<RegionPos> result = new HashSet<RegionPos>();
private HashSet<DHRegionPos> scanOldRegionFiles(VerticalQuality vertQual, OldDistanceGenerationMode genMode) {
HashSet<DHRegionPos> result = new HashSet<DHRegionPos>();
File baseBaseFolder = new File(getFileBasePath() + vertQual + File.separatorChar + genMode);
if (!baseBaseFolder.exists()) return result;
for (byte detail=0; detail <= LodUtil.REGION_DETAIL_LEVEL; detail++) {
@@ -209,7 +208,7 @@ public class LodDimensionOldFileStructureHandler
for (File subFile : subFiles) {
if (!subFile.isFile()) continue;
if (!subFile.canRead()) continue;
RegionPos pos = parseFileName(subFile.getName());
DHRegionPos pos = parseFileName(subFile.getName());
if (pos != null) result.add(pos);
}
}
@@ -226,7 +225,7 @@ public class LodDimensionOldFileStructureHandler
File baseFile = new File(getFileBasePath() + vertQual);
if (!baseFile.exists()) return;
if (!baseFile.isDirectory()) return;
HashSet<RegionPos> totalPos = new HashSet<RegionPos>();
HashSet<DHRegionPos> totalPos = new HashSet<DHRegionPos>();
totalPos.addAll(scanOldRegionFiles(vertQual, OldDistanceGenerationMode.NONE));
totalPos.addAll(scanOldRegionFiles(vertQual, OldDistanceGenerationMode.BIOME_ONLY));
totalPos.addAll(scanOldRegionFiles(vertQual, OldDistanceGenerationMode.BIOME_ONLY_SIMULATE_HEIGHT));
@@ -234,7 +233,7 @@ public class LodDimensionOldFileStructureHandler
totalPos.addAll(scanOldRegionFiles(vertQual, OldDistanceGenerationMode.FEATURES));
totalPos.addAll(scanOldRegionFiles(vertQual, OldDistanceGenerationMode.FULL));
ArrayList<Future<?>> futures = new ArrayList<Future<?>>();
for (RegionPos pos : totalPos) {
for (DHRegionPos pos : totalPos) {
futures.add(mergerThreads.submit(() -> {
loadAndMergeAndSaveRegion(vertQual, pos);
return true;
@@ -17,10 +17,8 @@
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
package com.seibel.lod.core.objects.lod;
package com.seibel.lod.core.objects;
import com.seibel.lod.core.objects.DHBlockPos;
import com.seibel.lod.core.objects.DHChunkPos;
import com.seibel.lod.core.util.LodUtil;
/**
* This object is similar to ChunkPos or BlockPos.
@@ -28,35 +26,35 @@ import com.seibel.lod.core.util.LodUtil;
* @author James Seibel
* @version 8-21-2021
*/
public class RegionPos
public class DHRegionPos
{
public int x;
public int z;
/** Sets x and z to 0 */
public RegionPos()
public DHRegionPos()
{
x = 0;
z = 0;
}
/** simple constructor that sets x and z to new x and z. */
public RegionPos(int newX, int newZ)
public DHRegionPos(int newX, int newZ)
{
x = newX;
z = newZ;
}
/** Converts from a BlockPos to a RegionPos */
public RegionPos(DHBlockPos pos)
public DHRegionPos(DHBlockPos pos)
{
x = Math.floorDiv(pos.x >> 4, LodUtil.REGION_WIDTH_IN_CHUNKS);
z = Math.floorDiv(pos.z >> 4, LodUtil.REGION_WIDTH_IN_CHUNKS);
}
/** Converts from a ChunkPos to a RegionPos */
public RegionPos(DHChunkPos pos)
public DHRegionPos(DHChunkPos pos)
{
x = Math.floorDiv(pos.getX(), LodUtil.REGION_WIDTH_IN_CHUNKS);
z = Math.floorDiv(pos.getZ(), LodUtil.REGION_WIDTH_IN_CHUNKS);
@@ -85,10 +83,10 @@ public class RegionPos
return true;
}
// Check if o is an instance of RegionPos or not
if (!(o instanceof RegionPos)) {
if (!(o instanceof DHRegionPos)) {
return false;
}
RegionPos c = (RegionPos) o;
DHRegionPos c = (DHRegionPos) o;
return c.x==x &&c.z==z;
}
@@ -30,6 +30,7 @@ import com.seibel.lod.core.logging.DhLoggerBuilder;
import com.seibel.lod.core.logging.SpamReducedLogger;
import com.seibel.lod.core.objects.Pos2D;
import com.seibel.lod.core.objects.PosToGenerateContainer;
import com.seibel.lod.core.objects.DHRegionPos;
import com.seibel.lod.core.util.*;
import com.seibel.lod.core.util.gridList.MovableGridRingList;
import com.seibel.lod.core.wrapperInterfaces.config.ILodConfigWrapperSingleton;
@@ -77,7 +78,7 @@ public class LodDimension
/** stores all the regions in this dimension */
public MovableGridRingList<LodRegion> regions;
//NOTE: This list pos is relative to center
private volatile RegionPos[] iteratorList = null;
private volatile DHRegionPos[] iteratorList = null;
private LodDimensionFileHandler fileHandler = null;
@@ -141,12 +142,12 @@ public class LodDimension
private void generateIteratorList()
{
iteratorList = null;
RegionPos[] list = new RegionPos[width*width];
DHRegionPos[] list = new DHRegionPos[width*width];
int i = 0;
for (int ix=-halfWidth; ix<=halfWidth; ix++) {
for (int iz=-halfWidth; iz<=halfWidth; iz++) {
list[i] = new RegionPos(ix, iz);
list[i] = new DHRegionPos(ix, iz);
i++;
}
}
@@ -167,7 +168,7 @@ public class LodDimension
* <p>
* Synchronized to prevent multiple moves happening on top of each other.
*/
public synchronized void move(RegionPos regionOffset)
public synchronized void move(DHRegionPos regionOffset)
{
if (this.logEvents)
LOGGER.info("LodDim MOVE. Offset: "+regionOffset);
@@ -259,7 +260,7 @@ public class LodDimension
}
public void iterateByDistance(PosConsumer r) {
if (iteratorList==null) return;
for (RegionPos relativePos : iteratorList) {
for (DHRegionPos relativePos : iteratorList) {
r.run(relativePos.x+halfWidth, relativePos.z+halfWidth);
}
@@ -373,7 +374,7 @@ public class LodDimension
byte maxDetail;
regionX = x + minPos.x;
regionZ = z + minPos.y;
final RegionPos regionPos = new RegionPos(regionX, regionZ);
final DHRegionPos regionPos = new DHRegionPos(regionX, regionZ);
region = regions.get(regionX, regionZ);
if (region != null && region.isWriting.get()!=0) return; // FIXME: A crude attempt at lowering chance of race condition!
@@ -601,7 +602,7 @@ public class LodDimension
* Loads the region at the given RegionPos from file,
* if a file exists for that region.
*/
public LodRegion getRegionFromFile(RegionPos regionPos, byte detailLevel, VerticalQuality verticalQuality)
public LodRegion getRegionFromFile(DHRegionPos regionPos, byte detailLevel, VerticalQuality verticalQuality)
{
return fileHandler != null ? fileHandler.loadRegionFromFile(detailLevel, regionPos, verticalQuality) :
new LodRegion(detailLevel, regionPos, verticalQuality);
@@ -658,9 +659,9 @@ public class LodDimension
return regions.getCenter().y;
}
public RegionPos getCenterRegionPos() {
public DHRegionPos getCenterRegionPos() {
Pos2D p = regions.getCenter();
return new RegionPos(p.x, p.y);
return new DHRegionPos(p.x, p.y);
}
/** returns the width of the dimension in regions */
@@ -19,7 +19,6 @@
package com.seibel.lod.core.objects.lod;
import java.util.ArrayList;
import java.util.ConcurrentModificationException;
import java.util.Iterator;
import java.util.concurrent.atomic.AtomicInteger;
@@ -29,10 +28,7 @@ import com.seibel.lod.core.enums.config.DropoffQuality;
import com.seibel.lod.core.enums.config.GenerationPriority;
import com.seibel.lod.core.enums.config.VerticalQuality;
import com.seibel.lod.core.handlers.dependencyInjection.SingletonHandler;
import com.seibel.lod.core.objects.LodDataView;
import com.seibel.lod.core.objects.Pos2D;
import com.seibel.lod.core.objects.PosToGenerateContainer;
import com.seibel.lod.core.objects.PosToRenderContainer;
import com.seibel.lod.core.objects.*;
import com.seibel.lod.core.util.DataPointUtil;
import com.seibel.lod.core.util.DetailDistanceUtil;
import com.seibel.lod.core.util.LevelPosUtil;
@@ -91,7 +87,7 @@ public class LodRegion {
return (byte)LodUtil.clamp(LodUtil.CHUNK_DETAIL_LEVEL+1, farModeLevel, LodUtil.DETAIL_OPTIONS - 1);
}
public LodRegion(byte minDetailLevel, RegionPos regionPos, VerticalQuality verticalQuality) {
public LodRegion(byte minDetailLevel, DHRegionPos regionPos, VerticalQuality verticalQuality) {
this.minDetailLevel = minDetailLevel;
this.regionPosX = regionPos.x;
this.regionPosZ = regionPos.z;
@@ -701,8 +697,8 @@ public class LodRegion {
/**
* return RegionPos of this lod region
*/
public RegionPos getRegionPos() {
return new RegionPos(regionPosX, regionPosZ);
public DHRegionPos getRegionPos() {
return new DHRegionPos(regionPosX, regionPosZ);
}
/**
@@ -41,7 +41,7 @@ import com.seibel.lod.core.objects.LodDataView;
import com.seibel.lod.core.objects.PosToRenderContainer;
import com.seibel.lod.core.objects.lod.LodDimension;
import com.seibel.lod.core.objects.lod.LodRegion;
import com.seibel.lod.core.objects.lod.RegionPos;
import com.seibel.lod.core.objects.DHRegionPos;
import com.seibel.lod.core.objects.math.Vec3d;
import com.seibel.lod.core.objects.math.Vec3f;
import com.seibel.lod.core.render.GLProxy;
@@ -75,7 +75,7 @@ public class RenderRegion implements AutoCloseable
Invalidated,
}
final RegionPos regionPos;
final DHRegionPos regionPos;
RenderBuffer renderBufferBack = null;
AtomicReference<BackState> backState =
new AtomicReference<BackState>(BackState.Unused);
@@ -84,12 +84,12 @@ public class RenderRegion implements AutoCloseable
RenderBuffer renderBufferFront = null;
final LodDimension lodDim;
public RenderRegion(RegionPos regPos, LodDimension lodDim) {
public RenderRegion(DHRegionPos regPos, LodDimension lodDim) {
regionPos = regPos;
this.lodDim = lodDim;
}
public boolean canRender(LodDimension lodDim, RegionPos regPos) {
public boolean canRender(LodDimension lodDim, DHRegionPos regPos) {
return lodDim == this.lodDim && regPos.equals(regionPos);
}
@@ -30,7 +30,7 @@ import com.seibel.lod.core.objects.DHChunkPos;
import com.seibel.lod.core.objects.ParsedIp;
import com.seibel.lod.core.objects.Pos2D;
import com.seibel.lod.core.objects.lod.LodDimension;
import com.seibel.lod.core.objects.lod.RegionPos;
import com.seibel.lod.core.objects.DHRegionPos;
import com.seibel.lod.core.objects.opengl.DefaultLodVertexFormats;
import com.seibel.lod.core.objects.opengl.LodVertexFormat;
import com.seibel.lod.core.util.gridList.EdgeDistanceBooleanGrid;
@@ -185,12 +185,12 @@ public class LodUtil
}
/** Convert a 2D absolute position into a quad tree relative position. */
public static RegionPos convertGenericPosToRegionPos(int x, int z, int detailLevel)
public static DHRegionPos convertGenericPosToRegionPos(int x, int z, int detailLevel)
{
int relativePosX = Math.floorDiv(x, 1 << (LodUtil.REGION_DETAIL_LEVEL - detailLevel));
int relativePosZ = Math.floorDiv(z, 1 << (LodUtil.REGION_DETAIL_LEVEL - detailLevel));
return new RegionPos(relativePosX, relativePosZ);
return new DHRegionPos(relativePosX, relativePosZ);
}
@@ -21,13 +21,9 @@ package com.seibel.lod.core.wrapperInterfaces.chunk;
import com.seibel.lod.core.enums.LodDirection;
import com.seibel.lod.core.handlers.dependencyInjection.IBindable;
import com.seibel.lod.core.objects.DHBlockPos;
import com.seibel.lod.core.objects.DHChunkPos;
import com.seibel.lod.core.objects.lod.RegionPos;
import com.seibel.lod.core.util.LodUtil;
import com.seibel.lod.core.wrapperInterfaces.block.IBlockDetailWrapper;
import com.seibel.lod.core.wrapperInterfaces.world.IBiomeWrapper;
import org.spongepowered.asm.mixin.injection.Inject;
/**
* @author James Seibel