fix load distance

This commit is contained in:
GiantLuigi4 2023-11-27 11:18:12 -05:00
parent 9452482254
commit 2e30446281
7 changed files with 58 additions and 41 deletions

View File

@ -14,18 +14,21 @@ import net.minecraft.world.entity.player.Player;
import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.ItemStack;
import net.minecraft.world.level.BlockGetter; import net.minecraft.world.level.BlockGetter;
import net.minecraft.world.level.Level; import net.minecraft.world.level.Level;
import net.minecraft.world.phys.Vec3;
import net.minecraftforge.network.NetworkEvent; import net.minecraftforge.network.NetworkEvent;
import net.minecraftforge.server.ServerLifecycleHooks; import net.minecraftforge.server.ServerLifecycleHooks;
import net.montoyo.wd.core.HasAdvancement; import net.montoyo.wd.core.HasAdvancement;
import net.montoyo.wd.core.JSServerRequest; import net.montoyo.wd.core.JSServerRequest;
import net.montoyo.wd.data.GuiData; import net.montoyo.wd.data.GuiData;
import net.montoyo.wd.entity.ScreenBlockEntity; import net.montoyo.wd.entity.ScreenBlockEntity;
import net.montoyo.wd.entity.ScreenData;
import net.montoyo.wd.utilities.*; import net.montoyo.wd.utilities.*;
import net.montoyo.wd.utilities.math.Vector2i; import net.montoyo.wd.utilities.math.Vector2i;
import net.montoyo.wd.utilities.math.Vector3i; import net.montoyo.wd.utilities.math.Vector3i;
import net.montoyo.wd.utilities.data.BlockSide; import net.montoyo.wd.utilities.data.BlockSide;
import net.montoyo.wd.utilities.data.Rotation; import net.montoyo.wd.utilities.data.Rotation;
import net.montoyo.wd.utilities.serialization.NameUUIDPair; import net.montoyo.wd.utilities.serialization.NameUUIDPair;
import org.joml.Vector3d;
import javax.annotation.Nonnull; import javax.annotation.Nonnull;
import java.util.UUID; import java.util.UUID;
@ -125,4 +128,21 @@ public class SharedProxy {
public boolean isShiftDown() { public boolean isShiftDown() {
return false; return false;
} }
public double distanceTo(ScreenBlockEntity tes, Vec3 position) {
double dist = Double.POSITIVE_INFINITY;
for (int i = 0; i < tes.screenCount(); i++) {
ScreenData scrn = tes.getScreen(i);
Vector3d pos = new Vector3d(
scrn.side.right.x * scrn.size.x / 2d + scrn.size.y * scrn.side.up.x / 2d,
scrn.side.right.y * scrn.size.x / 2d + scrn.size.y * scrn.side.up.y / 2d,
scrn.side.right.z * scrn.size.x / 2d + scrn.size.y * scrn.side.up.z / 2d
).add(tes.getBlockPos().getX(), tes.getBlockPos().getY(), tes.getBlockPos().getZ());
double dist2 = position.distanceToSqr(pos.x, pos.y, pos.z);
dist = Math.min(dist, dist2);
}
return dist;
}
} }

View File

@ -61,6 +61,7 @@ import net.montoyo.wd.WebDisplays;
import net.montoyo.wd.block.ScreenBlock; import net.montoyo.wd.block.ScreenBlock;
import net.montoyo.wd.client.gui.*; import net.montoyo.wd.client.gui.*;
import net.montoyo.wd.client.gui.loading.GuiLoader; import net.montoyo.wd.client.gui.loading.GuiLoader;
import net.montoyo.wd.utilities.browser.WDBrowser;
import net.montoyo.wd.utilities.browser.handlers.DisplayHandler; import net.montoyo.wd.utilities.browser.handlers.DisplayHandler;
import net.montoyo.wd.utilities.browser.handlers.WDRouter; import net.montoyo.wd.utilities.browser.handlers.WDRouter;
import net.montoyo.wd.client.renderers.*; import net.montoyo.wd.client.renderers.*;
@ -207,7 +208,7 @@ public class ClientProxy extends SharedProxy implements ResourceManagerReloadLis
} catch (IOException e) { } catch (IOException e) {
throw new RuntimeException(e); throw new RuntimeException(e);
} }
view = MCEF.createBrowser(WebDisplays.applyBlacklist(webUrl), false); view = WDBrowser.createBrowser(WebDisplays.applyBlacklist(webUrl), false);
if (view instanceof MCEFBrowser browser) { if (view instanceof MCEFBrowser browser) {
browser.resize((int) WebDisplays.INSTANCE.padResX, (int) WebDisplays.INSTANCE.padResY); browser.resize((int) WebDisplays.INSTANCE.padResX, (int) WebDisplays.INSTANCE.padResY);
browser.setCursorChangeListener((cursor) -> { browser.setCursorChangeListener((cursor) -> {
@ -229,7 +230,6 @@ public class ClientProxy extends SharedProxy implements ResourceManagerReloadLis
private Minecraft mc; private Minecraft mc;
private MinePadRenderer minePadRenderer; private MinePadRenderer minePadRenderer;
// private JSQueryDispatcher jsDispatcher;
private LaserPointerRenderer laserPointerRenderer; private LaserPointerRenderer laserPointerRenderer;
private Screen nextScreen; private Screen nextScreen;
private boolean isF1Down; private boolean isF1Down;
@ -263,10 +263,6 @@ public class ClientProxy extends SharedProxy implements ResourceManagerReloadLis
event.register(ScreenModelLoader.SCREEN_LOADER.getPath(), new ScreenModelLoader()); event.register(ScreenModelLoader.SCREEN_LOADER.getPath(), new ScreenModelLoader());
} }
private static void registerBlockRenderLayers(RenderType layer, Block... blocks) {
Stream.of(blocks).forEach(block -> ItemBlockRenderTypes.setRenderLayer(block, layer));
}
@Override @Override
public void preInit() { public void preInit() {
super.preInit(); super.preInit();
@ -274,11 +270,6 @@ public class ClientProxy extends SharedProxy implements ResourceManagerReloadLis
MinecraftForge.EVENT_BUS.register(this); MinecraftForge.EVENT_BUS.register(this);
} }
@Override
public void init() {
super.init();
}
@Override @Override
public void onCefInit() { public void onCefInit() {
minePadRenderer = new MinePadRenderer(); minePadRenderer = new MinePadRenderer();
@ -580,7 +571,7 @@ public class ClientProxy extends SharedProxy implements ResourceManagerReloadLis
if (ev.phase != TickEvent.Phase.END) return; if (ev.phase != TickEvent.Phase.END) return;
//Unload/load screens depending on client player distance //Unload/load screens depending on client player distance
if (mc.player != null || !screenTracking.isEmpty()) if (mc.player == null || screenTracking.isEmpty())
return; return;
int id = lastTracked % screenTracking.size(); int id = lastTracked % screenTracking.size();
@ -597,27 +588,15 @@ public class ClientProxy extends SharedProxy implements ResourceManagerReloadLis
if (!tes.isLoaded()) if (!tes.isLoaded())
tes.load(); tes.load();
} else { } else {
double dist = Double.POSITIVE_INFINITY; double dist = distanceTo(tes, mc.getEntityRenderDispatcher().camera.getPosition());
for (int i = 0; i < tes.screenCount(); i++) {
ScreenData scrn = tes.getScreen(i);
Vector3d pos = new Vector3d(
scrn.side.right.x * scrn.size.x + scrn.size.y * scrn.side.up.x,
scrn.side.right.y * scrn.size.x + scrn.size.y * scrn.side.up.y,
scrn.side.right.z * scrn.size.x + scrn.size.y * scrn.side.up.z
);
double dist2 = mc.player.distanceToSqr(pos.x, pos.y, pos.z);
dist = Math.min(dist, dist2);
}
if (tes.isLoaded()) { if (tes.isLoaded()) {
if (dist > WebDisplays.INSTANCE.unloadDistance2) if (dist > WebDisplays.INSTANCE.unloadDistance2 * 16)
tes.unload(); tes.deactivate();
// else if (ClientConfig.AutoVolumeControl.enableAutoVolume) // else if (ClientConfig.AutoVolumeControl.enableAutoVolume)
// tes.updateTrackDistance(dist, 80); //ToDo find master volume // tes.updateTrackDistance(dist, 80); //ToDo find master volume
} else if (dist <= WebDisplays.INSTANCE.loadDistance2) } else if (dist <= WebDisplays.INSTANCE.loadDistance2 * 16)
tes.load(); tes.activate();
} }
} }

View File

@ -1,6 +1,5 @@
package net.montoyo.wd.client.gui.camera; package net.montoyo.wd.client.gui.camera;
import com.google.gson.JsonObject;
import net.minecraft.client.Minecraft; import net.minecraft.client.Minecraft;
import net.minecraft.commands.arguments.EntityAnchorArgument; import net.minecraft.commands.arguments.EntityAnchorArgument;
import net.minecraft.util.Mth; import net.minecraft.util.Mth;
@ -10,7 +9,6 @@ import net.minecraft.world.phys.Vec3;
import net.minecraftforge.client.event.ViewportEvent; import net.minecraftforge.client.event.ViewportEvent;
import net.minecraftforge.event.TickEvent; import net.minecraftforge.event.TickEvent;
import net.montoyo.wd.utilities.browser.handlers.js.queries.ElementCenterQuery; import net.montoyo.wd.utilities.browser.handlers.js.queries.ElementCenterQuery;
import net.montoyo.wd.utilities.browser.handlers.WDRouter;
import net.montoyo.wd.entity.ScreenBlockEntity; import net.montoyo.wd.entity.ScreenBlockEntity;
import net.montoyo.wd.entity.ScreenData; import net.montoyo.wd.entity.ScreenData;
import net.montoyo.wd.utilities.browser.WDBrowser; import net.montoyo.wd.utilities.browser.WDBrowser;
@ -117,8 +115,8 @@ public class KeyboardCamera {
ScreenData scr = teTmp.getScreen(sdTmp); ScreenData scr = teTmp.getScreen(sdTmp);
if (scr != null) { if (scr != null) {
if (scr.browser instanceof WDBrowser wdBrowser) { if (scr.browser instanceof WDBrowser wdBrowser) {
wdBrowser.pointerLock().dispatch(scr.browser); wdBrowser.focusedElement().dispatch(scr.browser);
updateCrd(((WDBrowser) scr.browser).pointerLock()); updateCrd(((WDBrowser) scr.browser).focusedElement());
} }
} }
} }

View File

@ -7,10 +7,12 @@ package net.montoyo.wd.client.renderers;
import com.cinemamod.mcef.MCEFBrowser; import com.cinemamod.mcef.MCEFBrowser;
import com.mojang.blaze3d.systems.RenderSystem; import com.mojang.blaze3d.systems.RenderSystem;
import com.mojang.blaze3d.vertex.*; import com.mojang.blaze3d.vertex.*;
import net.minecraft.client.Minecraft;
import net.minecraft.client.renderer.GameRenderer; import net.minecraft.client.renderer.GameRenderer;
import net.minecraft.client.renderer.MultiBufferSource; import net.minecraft.client.renderer.MultiBufferSource;
import net.minecraft.client.renderer.blockentity.BlockEntityRenderer; import net.minecraft.client.renderer.blockentity.BlockEntityRenderer;
import net.minecraft.client.renderer.blockentity.BlockEntityRendererProvider; import net.minecraft.client.renderer.blockentity.BlockEntityRendererProvider;
import net.montoyo.wd.WebDisplays;
import net.montoyo.wd.entity.ScreenData; import net.montoyo.wd.entity.ScreenData;
import net.montoyo.wd.entity.ScreenBlockEntity; import net.montoyo.wd.entity.ScreenBlockEntity;
import net.montoyo.wd.utilities.math.Vector3f; import net.montoyo.wd.utilities.math.Vector3f;
@ -41,13 +43,16 @@ public class ScreenRenderer implements BlockEntityRenderer<ScreenBlockEntity> {
//Disable lighting //Disable lighting
// RenderSystem.enableTexture(); // RenderSystem.enableTexture();
// RenderSystem.disableCull(); // RenderSystem.disableCull();
RenderSystem.disableBlend(); RenderSystem.disableBlend();
for (int i = 0; i < te.screenCount(); i++) { for (int i = 0; i < te.screenCount(); i++) {
ScreenData scr = te.getScreen(i); ScreenData scr = te.getScreen(i);
if (scr.browser == null) { if (scr.browser == null) {
scr.createBrowser(true); double dist = WebDisplays.PROXY.distanceTo(te, Minecraft.getInstance().getEntityRenderDispatcher().camera.getPosition());
if (dist <= WebDisplays.INSTANCE.loadDistance2 * 16)
scr.createBrowser(true);
else continue;
} }
// TODO: manually backface cull the screens // TODO: manually backface cull the screens

View File

@ -1073,6 +1073,21 @@ public class ScreenBlockEntity extends BlockEntity {
} }
} }
public void deactivate() {
for (ScreenData screen : screens) {
if (screen.browser != null) {
screen.browser.close(true);
screen.browser = null;
}
}
}
public void activate() {
for (ScreenData screen : screens) {
if (screen.browser == null)
screen.createBrowser(false);
}
}
// @Override // @Override
// public boolean shouldRefresh(Level world, BlockPos pos, @Nonnull BlockState oldState, @Nonnull BlockState newState) { // public boolean shouldRefresh(Level world, BlockPos pos, @Nonnull BlockState oldState, @Nonnull BlockState newState) {

View File

@ -20,10 +20,10 @@ public interface WDBrowser {
static void registerQueries(WDBrowser browser) { static void registerQueries(WDBrowser browser) {
Map<String, JSQueryHandler> handlerMap = browser.queryHandlers(); Map<String, JSQueryHandler> handlerMap = browser.queryHandlers();
JSQueryHandler handler = browser.pointerLock(); JSQueryHandler handler = browser.focusedElement();
handlerMap.put(handler.getName(), handler); handlerMap.put(handler.getName(), handler);
} }
HashMap<String, JSQueryHandler> queryHandlers(); HashMap<String, JSQueryHandler> queryHandlers();
ElementCenterQuery pointerLock(); ElementCenterQuery focusedElement();
} }

View File

@ -8,7 +8,7 @@ import net.montoyo.wd.utilities.browser.handlers.js.JSQueryHandler;
import java.util.HashMap; import java.util.HashMap;
public class WDClientBrowser extends MCEFBrowser implements WDBrowser { public class WDClientBrowser extends MCEFBrowser implements WDBrowser {
ElementCenterQuery lock = new ElementCenterQuery("ActiveElement","document.activeElement"); ElementCenterQuery focusedEl = new ElementCenterQuery("ActiveElement", "document.activeElement");
HashMap<String, JSQueryHandler> handlerHashMap = new HashMap<>(); HashMap<String, JSQueryHandler> handlerHashMap = new HashMap<>();
public WDClientBrowser(MCEFClient client, String url, boolean transparent) { public WDClientBrowser(MCEFClient client, String url, boolean transparent) {
@ -21,7 +21,7 @@ public class WDClientBrowser extends MCEFBrowser implements WDBrowser {
} }
@Override @Override
public ElementCenterQuery pointerLock() { public ElementCenterQuery focusedElement() {
return lock; return focusedEl;
} }
} }