diff --git a/core/src/main/java/com/seibel/distanthorizons/core/dataObjects/render/ColumnRenderSource.java b/core/src/main/java/com/seibel/distanthorizons/core/dataObjects/render/ColumnRenderSource.java index 0d40f9e1a..22278386a 100644 --- a/core/src/main/java/com/seibel/distanthorizons/core/dataObjects/render/ColumnRenderSource.java +++ b/core/src/main/java/com/seibel/distanthorizons/core/dataObjects/render/ColumnRenderSource.java @@ -108,29 +108,6 @@ public class ColumnRenderSource implements IDataSource this.worldGenStep = EDhApiWorldGenerationStep.EMPTY; } - /** - * Creates a new ColumnRenderSource from the parsedColumnData. - * - * @throws IOException if the DataInputStream's detail level isn't what was expected - */ - public ColumnRenderSource(DhSectionPos sectionPos, ColumnRenderSourceLoader.ParsedColumnData parsedColumnData, IDhLevel level) throws IOException - { - if (sectionPos.getDetailLevel() - SECTION_SIZE_OFFSET != parsedColumnData.detailLevel) - { - throw new IOException("Invalid data: detail level does not match"); - } - - this.sectionPos = sectionPos; - this.yOffset = level.getMinY(); - this.verticalDataCount = parsedColumnData.verticalSize; - this.renderDataContainer = parsedColumnData.dataContainer; - this.worldGenStep = parsedColumnData.worldGenStep; - this.isEmpty = parsedColumnData.isEmpty; - - this.debugSourceFlags = new DebugSourceFlag[SECTION_SIZE * SECTION_SIZE]; - this.fillDebugFlag(0, 0, SECTION_SIZE, SECTION_SIZE, DebugSourceFlag.FILE); - } - //========================// diff --git a/core/src/main/java/com/seibel/distanthorizons/core/dataObjects/render/ColumnRenderSourceLoader.java b/core/src/main/java/com/seibel/distanthorizons/core/dataObjects/render/ColumnRenderSourceLoader.java deleted file mode 100644 index 1e816ce0f..000000000 --- a/core/src/main/java/com/seibel/distanthorizons/core/dataObjects/render/ColumnRenderSourceLoader.java +++ /dev/null @@ -1,171 +0,0 @@ -/* - * This file is part of the Distant Horizons mod - * licensed under the GNU LGPL v3 License. - * - * Copyright (C) 2020-2023 James Seibel - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation, version 3. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with this program. If not, see . - */ - -package com.seibel.distanthorizons.core.dataObjects.render; - -import com.seibel.distanthorizons.api.enums.worldGeneration.EDhApiWorldGenerationStep; -import com.seibel.distanthorizons.core.level.IDhLevel; -import com.seibel.distanthorizons.core.logging.DhLoggerBuilder; -import com.seibel.distanthorizons.core.sql.dto.FullDataSourceV1DTO; -import com.seibel.distanthorizons.core.util.objects.dataStreams.DhDataInputStream; -import org.apache.logging.log4j.Logger; - -import java.io.IOException; -import java.nio.ByteBuffer; -import java.nio.ByteOrder; - -/** - * Handles loading and parsing {@link FullDataSourceV1DTO}s to create {@link ColumnRenderSource}s.

- * - * Please see the {@link ColumnRenderSourceLoader#loadRenderSource} method to see what - * file versions this class can handle. - */ -public class ColumnRenderSourceLoader -{ - public static ColumnRenderSourceLoader INSTANCE = new ColumnRenderSourceLoader(); - - private static final Logger LOGGER = DhLoggerBuilder.getLogger(); - - - - private ColumnRenderSourceLoader() { } - - - - public ColumnRenderSource loadRenderSource(FullDataSourceV1DTO dto, DhDataInputStream inputStream, IDhLevel level) throws IOException - { - int dataFileVersion = dto.binaryDataFormatVersion; - - switch (dataFileVersion) - { - case 1: - ParsedColumnData parsedColumnData = readDataV1(inputStream, level.getMinY()); - return new ColumnRenderSource(dto.pos, parsedColumnData, level); - default: - throw new IOException("Invalid Data: The data version [" + dataFileVersion + "] is not supported"); - } - } - - - - //========================// - // versioned file parsing // - //========================// - - /** - * @param inputStream Expected format: 1st byte: detail level, 2nd byte: vertical size, 3rd byte on: column data - * @throws IOException if there was an issue reading the stream - */ - private static ParsedColumnData readDataV1(DhDataInputStream inputStream, int expectedYOffset) throws IOException - { - // TODO move into ColumnRenderSource - - byte detailLevel = inputStream.readByte(); - - int verticalDataCount = inputStream.readInt(); - if (verticalDataCount <= 0) - { - throw new IOException("Invalid data: vertical size must be 0 or greater"); - } - - int maxNumberOfDataPoints = ColumnRenderSource.SECTION_SIZE * ColumnRenderSource.SECTION_SIZE * verticalDataCount; - - - byte dataPresentFlag = inputStream.readByte(); - if (dataPresentFlag != ColumnRenderSource.NO_DATA_FLAG_BYTE && dataPresentFlag != ColumnRenderSource.DATA_GUARD_BYTE) - { - throw new IOException("Incorrect render file format. Expected either: NO_DATA_FLAG_BYTE [" + ColumnRenderSource.NO_DATA_FLAG_BYTE + "] or DATA_GUARD_BYTE [" + ColumnRenderSource.DATA_GUARD_BYTE + "], Found: [" + dataPresentFlag + "]"); - } - else if (dataPresentFlag == ColumnRenderSource.NO_DATA_FLAG_BYTE) - { - // no data is present - return new ParsedColumnData(detailLevel, verticalDataCount, EDhApiWorldGenerationStep.EMPTY, new long[maxNumberOfDataPoints], true); - } - else - { - // data is present - - int fileYOffset = inputStream.readInt(); - if (fileYOffset != expectedYOffset) - { - throw new IOException("Invalid data: yOffset is incorrect. Expected: [" + expectedYOffset + "], found: [" + fileYOffset + "]."); - } - - - // read the column data - byte[] rawByteData = new byte[maxNumberOfDataPoints * Long.BYTES]; - ByteBuffer columnDataByteBuffer = ByteBuffer.wrap(rawByteData).order(ByteOrder.LITTLE_ENDIAN); - inputStream.readFully(rawByteData); - - - // parse the column data - long[] dataPoints = new long[maxNumberOfDataPoints]; - columnDataByteBuffer.asLongBuffer().get(dataPoints); - - boolean isEmpty = true; - for (long dataPoint : dataPoints) - { - if (dataPoint != 0) - { - isEmpty = false; - break; - } - } - - - - byte guardByteFlag = inputStream.readByte(); - if (guardByteFlag != ColumnRenderSource.DATA_GUARD_BYTE) - { - throw new IOException("invalid world gen step end guard"); - } - EDhApiWorldGenerationStep worldGenStep = EDhApiWorldGenerationStep.fromValue(inputStream.readByte()); - if (worldGenStep == null) - { - LOGGER.warn("Missing WorldGenStep, defaulting to: " + EDhApiWorldGenerationStep.SURFACE.name()); - worldGenStep = EDhApiWorldGenerationStep.SURFACE; - } - - - - return new ParsedColumnData(detailLevel, verticalDataCount, worldGenStep, dataPoints, isEmpty); - } - } - - public static class ParsedColumnData - { - public final byte detailLevel; - public final int verticalSize; - public final EDhApiWorldGenerationStep worldGenStep; - public final long[] dataContainer; - public final boolean isEmpty; - - public ParsedColumnData(byte detailLevel, int verticalSize, EDhApiWorldGenerationStep worldGenStep, long[] dataContainer, boolean isEmpty) - { - this.detailLevel = detailLevel; - this.verticalSize = verticalSize; - this.worldGenStep = worldGenStep; - this.dataContainer = dataContainer; - this.isEmpty = isEmpty; - } - - } - - -} diff --git a/core/src/main/java/com/seibel/distanthorizons/core/render/LodRenderSection.java b/core/src/main/java/com/seibel/distanthorizons/core/render/LodRenderSection.java index e70f20e94..3a747bc87 100644 --- a/core/src/main/java/com/seibel/distanthorizons/core/render/LodRenderSection.java +++ b/core/src/main/java/com/seibel/distanthorizons/core/render/LodRenderSection.java @@ -58,8 +58,8 @@ public class LodRenderSection implements IDebugRenderable private boolean isRenderingEnabled = false; /** - * If this is true, then {@ link LodRenderSection#reload(IRenderSourceProvider)} was called while - * a {@ link IRenderSourceProvider} was already being loaded. + * If this is true, then {@link LodRenderSection#reload(FullDataSourceProviderV2)} was called while + * a {@link ColumnRenderSource} was already being loaded. */ private boolean reloadRenderSourceOnceLoaded = false;