This commit is contained in:
s809
2024-02-22 23:06:21 +05:00
13 changed files with 80 additions and 18 deletions
@@ -20,6 +20,7 @@
package com.seibel.distanthorizons.core;
import com.seibel.distanthorizons.core.dependencyInjection.SingletonInjector;
import com.seibel.distanthorizons.core.sql.DatabaseUpdater;
import com.seibel.distanthorizons.core.wrapperInterfaces.IWrapperFactory;
import com.seibel.distanthorizons.coreapi.ModInfo;
import com.seibel.distanthorizons.core.world.DhApiWorldProxy;
@@ -35,6 +36,8 @@ import net.jpountz.lz4.LZ4Compressor;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import java.io.InputStream;
/** Handles first time Core setup. */
public class Initializer
{
@@ -57,6 +60,21 @@ public class Initializer
throw e;
}
// confirm the resource directory is present
try
{
int scriptCount = DatabaseUpdater.getAutoUpdateScriptCount();
if (scriptCount == 0)
{
throw new NullPointerException("No auto update scripts found, but no error thrown. This might mean the script list file is corrupted or empty.");
}
}
catch (Exception e)
{
LOGGER.fatal("Critical programmer error: Can't read SQL Scripts resource folder is either missing or malformed. Error: [" + e.getMessage() + "].");
throw new RuntimeException(e);
}
CompleteFullDataSourceLoader unused2 = new CompleteFullDataSourceLoader(); // Auto register into the loader system
@@ -31,6 +31,7 @@ import com.seibel.distanthorizons.core.level.IDhLevel;
import com.seibel.distanthorizons.core.logging.DhLoggerBuilder;
import com.seibel.distanthorizons.core.pos.DhSectionPos;
import com.seibel.distanthorizons.core.render.renderer.DebugRenderer;
import com.seibel.distanthorizons.core.render.renderer.IDebugRenderable;
import com.seibel.distanthorizons.core.sql.AbstractDataSourceRepo;
import com.seibel.distanthorizons.core.sql.FullDataRepo;
import com.seibel.distanthorizons.core.sql.DataSourceDto;
@@ -46,7 +47,9 @@ import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;
public class FullDataFileHandler extends AbstractDataSourceHandler<IFullDataSource, IDhLevel> implements IFullDataSourceProvider
public class FullDataFileHandler
extends AbstractDataSourceHandler<IFullDataSource, IDhLevel>
implements IFullDataSourceProvider, IDebugRenderable
{
private static final Logger LOGGER = DhLoggerBuilder.getLogger();
@@ -71,7 +74,12 @@ public class FullDataFileHandler extends AbstractDataSourceHandler<IFullDataSour
//=============//
public FullDataFileHandler(IDhLevel level, AbstractSaveStructure saveStructure) { this(level, saveStructure, null); }
public FullDataFileHandler(IDhLevel level, AbstractSaveStructure saveStructure, @Nullable File saveDirOverride) { super(level, saveStructure, saveDirOverride); }
public FullDataFileHandler(IDhLevel level, AbstractSaveStructure saveStructure, @Nullable File saveDirOverride)
{
super(level, saveStructure, saveDirOverride);
DebugRenderer.register(this, Config.Client.Advanced.Debugging.DebugWireframe.showWorldGenQueue);
}
@@ -225,4 +233,18 @@ public class FullDataFileHandler extends AbstractDataSourceHandler<IFullDataSour
public int getUnsavedDataSourceCount() { return this.unsavedDataSourceBySectionPos.size(); }
//===========//
// overrides //
//===========//
@Override
public void debugRender(DebugRenderer renderer)
{
this.saveTimerTasksBySectionPos.keySet()
.forEach((pos) -> { renderer.renderBox(new DebugRenderer.Box(pos, -32f, 128f, 0.15f, Color.cyan)); });
}
}
@@ -29,7 +29,6 @@ import java.awt.*;
import java.awt.image.BufferedImage;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.URI;
import java.nio.charset.StandardCharsets;
import java.util.*;
import java.util.List;
@@ -58,7 +57,7 @@ public class BaseJFrame extends JFrame
setTitle(SingletonInjector.INSTANCE.get(ILangWrapper.class).getLang("lod.title"));
try
{
setIconImage(ImageIO.read(JarUtils.accessFile("icon.png")));
setIconImage(ImageIO.read(JarUtils.accessFile("assets/distanthorizons/icon.png")));
}
catch (Exception e)
{
@@ -165,7 +164,7 @@ public class BaseJFrame extends JFrame
super.paintComponent(g);
try
{
BufferedImage image = ImageIO.read(JarUtils.accessFile("logo.png"));
BufferedImage image = ImageIO.read(JarUtils.accessFile("assets/distanthorizons/logo.png"));
int logoWidth = (int) ((double) logoHeight * ((double) image.getWidth() / (double) image.getHeight())); // Calculate the aspect ratio and set the height correctly to not stretch it
g.drawImage(image, (getWidth() / 2) - (logoWidth / 2), 0, logoWidth, logoHeight, this); // Resize image and draw it
}
@@ -385,15 +385,23 @@ public class RenderBufferHandler implements AutoCloseable
public void renderOpaque(LodRenderer renderContext, DhApiRenderParam renderEventParam)
{
this.loadedNearToFarBuffers.forEach(loadedBuffer -> loadedBuffer.buffer.renderOpaque(renderContext, renderEventParam));
// TODO why can these sometimes be null when teleporting between multiverses
if (this.loadedNearToFarBuffers != null)
{
this.loadedNearToFarBuffers.forEach(loadedBuffer -> loadedBuffer.buffer.renderOpaque(renderContext, renderEventParam));
}
}
public void renderTransparent(LodRenderer renderContext, DhApiRenderParam renderEventParam)
{
ListIterator<LoadedRenderBuffer> iter = this.loadedNearToFarBuffers.listIterator(this.loadedNearToFarBuffers.size());
while (iter.hasPrevious())
// TODO why can these sometimes be null when teleporting between multiverses
if (this.loadedNearToFarBuffers != null)
{
LoadedRenderBuffer loadedBuffer = iter.previous();
loadedBuffer.buffer.renderTransparent(renderContext, renderEventParam);
ListIterator<LoadedRenderBuffer> iter = this.loadedNearToFarBuffers.listIterator(this.loadedNearToFarBuffers.size());
while (iter.hasPrevious())
{
LoadedRenderBuffer loadedBuffer = iter.previous();
loadedBuffer.buffer.renderTransparent(renderContext, renderEventParam);
}
}
}
@@ -187,6 +187,10 @@ public class LodRenderProgram extends ShaderProgram implements IDhApiShaderProgr
// Clip Uniform
float dhNearClipDistance = RenderUtil.getNearClipPlaneDistanceInBlocks(renderParameters.partialTicks);
// TODO a different multiplier might be necessary
// this is to try and allow the fragment culling to go farther than the near clip plane.
// Currently this only works for certain FOV/screen ratio combos.
dhNearClipDistance *= 2.0f;
setUniform(clipDistanceUniform, dhNearClipDistance);
}
@@ -392,7 +392,11 @@ public class LodRenderer
if (Config.Client.Advanced.Graphics.Fog.drawMode.get() != EFogDrawMode.FOG_DISABLED)
{
profiler.popPush("LOD Fog");
FogShader.INSTANCE.setModelViewProjectionMatrix(renderEventParam.dhModelViewMatrix);
Mat4f combinedMatrix = new Mat4f(renderEventParam.dhProjectionMatrix);
combinedMatrix.multiply(renderEventParam.dhModelViewMatrix);
FogShader.INSTANCE.setModelViewProjectionMatrix(combinedMatrix);
FogShader.INSTANCE.render(renderEventParam.partialTicks);
}
@@ -96,7 +96,7 @@ public class FogShader extends AbstractShaderRenderer
{
this.shader.setUniform(this.gInvertedModelViewProjectionUniform, this.inverseMvmProjMatrix);
int lodDrawDistance = RenderUtil.getFarClipPlaneDistanceInBlocks();
int lodDrawDistance = Config.Client.Advanced.Graphics.Quality.lodChunkRenderDistanceRadius.get() * LodUtil.CHUNK_WIDTH;
int vanillaDrawDistance = MC_RENDER.getRenderDistance() * LodUtil.CHUNK_WIDTH;
vanillaDrawDistance += LodUtil.CHUNK_WIDTH * 2; // Give it a 2 chunk boundary for near fog.
@@ -222,6 +222,18 @@ public class DatabaseUpdater
//====================//
// startup validation //
//====================//
/**
* Can be used to confirm the auto update scripts are in their expected folder.
* Will throw an exception if the scripts are missing or malformed.
*/
public static int getAutoUpdateScriptCount() throws NullPointerException, IOException { return getAutoUpdateScripts().size(); }
//================//
// helper classes //
//================//
@@ -186,13 +186,7 @@ public class RenderUtil
public static float getNearClipPlaneDistanceInBlocks(float partialTicks)
{
int chunkRenderDistance = MC_RENDER.getRenderDistance();
if (chunkRenderDistance % 2 == 0)
{
chunkRenderDistance += 1;
}
int vanillaBlockRenderedDistance = chunkRenderDistance * LodUtil.CHUNK_WIDTH;
vanillaBlockRenderedDistance *= 2;
float nearClipPlane;
if (Config.Client.Advanced.Debugging.lodOnlyMode.get())
@@ -220,6 +214,7 @@ public class RenderUtil
double fov = MC_RENDER.getFov(partialTicks);
double aspectRatio = (double) MC_RENDER.getScreenWidth() / MC_RENDER.getScreenHeight();
// source: https://stackoverflow.com/questions/8101119/how-do-i-methodically-choose-the-near-clip-plane-distance-for-a-perspective-proj/8101234#8101234
return (float) (nearClipPlane
/ Math.sqrt(1d + MathUtil.pow2(Math.tan(fov / 180d * Math.PI / 2d))
* (MathUtil.pow2(aspectRatio) + 1d)));

Before

Width:  |  Height:  |  Size: 11 KiB

After

Width:  |  Height:  |  Size: 11 KiB

Before

Width:  |  Height:  |  Size: 3.0 KiB

After

Width:  |  Height:  |  Size: 3.0 KiB

Before

Width:  |  Height:  |  Size: 3.0 KiB

After

Width:  |  Height:  |  Size: 3.0 KiB

Before

Width:  |  Height:  |  Size: 277 KiB

After

Width:  |  Height:  |  Size: 277 KiB