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.level.BlockGetter;
import net.minecraft.world.level.Level;
import net.minecraft.world.phys.Vec3;
import net.minecraftforge.network.NetworkEvent;
import net.minecraftforge.server.ServerLifecycleHooks;
import net.montoyo.wd.core.HasAdvancement;
import net.montoyo.wd.core.JSServerRequest;
import net.montoyo.wd.data.GuiData;
import net.montoyo.wd.entity.ScreenBlockEntity;
import net.montoyo.wd.entity.ScreenData;
import net.montoyo.wd.utilities.*;
import net.montoyo.wd.utilities.math.Vector2i;
import net.montoyo.wd.utilities.math.Vector3i;
import net.montoyo.wd.utilities.data.BlockSide;
import net.montoyo.wd.utilities.data.Rotation;
import net.montoyo.wd.utilities.serialization.NameUUIDPair;
import org.joml.Vector3d;
import javax.annotation.Nonnull;
import java.util.UUID;
@ -125,4 +128,21 @@ public class SharedProxy {
public boolean isShiftDown() {
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.client.gui.*;
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.WDRouter;
import net.montoyo.wd.client.renderers.*;
@ -207,7 +208,7 @@ public class ClientProxy extends SharedProxy implements ResourceManagerReloadLis
} catch (IOException e) {
throw new RuntimeException(e);
}
view = MCEF.createBrowser(WebDisplays.applyBlacklist(webUrl), false);
view = WDBrowser.createBrowser(WebDisplays.applyBlacklist(webUrl), false);
if (view instanceof MCEFBrowser browser) {
browser.resize((int) WebDisplays.INSTANCE.padResX, (int) WebDisplays.INSTANCE.padResY);
browser.setCursorChangeListener((cursor) -> {
@ -229,7 +230,6 @@ public class ClientProxy extends SharedProxy implements ResourceManagerReloadLis
private Minecraft mc;
private MinePadRenderer minePadRenderer;
// private JSQueryDispatcher jsDispatcher;
private LaserPointerRenderer laserPointerRenderer;
private Screen nextScreen;
private boolean isF1Down;
@ -263,10 +263,6 @@ public class ClientProxy extends SharedProxy implements ResourceManagerReloadLis
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
public void preInit() {
super.preInit();
@ -274,11 +270,6 @@ public class ClientProxy extends SharedProxy implements ResourceManagerReloadLis
MinecraftForge.EVENT_BUS.register(this);
}
@Override
public void init() {
super.init();
}
@Override
public void onCefInit() {
minePadRenderer = new MinePadRenderer();
@ -580,7 +571,7 @@ public class ClientProxy extends SharedProxy implements ResourceManagerReloadLis
if (ev.phase != TickEvent.Phase.END) return;
//Unload/load screens depending on client player distance
if (mc.player != null || !screenTracking.isEmpty())
if (mc.player == null || screenTracking.isEmpty())
return;
int id = lastTracked % screenTracking.size();
@ -597,27 +588,15 @@ public class ClientProxy extends SharedProxy implements ResourceManagerReloadLis
if (!tes.isLoaded())
tes.load();
} else {
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 + 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);
}
double dist = distanceTo(tes, mc.getEntityRenderDispatcher().camera.getPosition());
if (tes.isLoaded()) {
if (dist > WebDisplays.INSTANCE.unloadDistance2)
tes.unload();
if (dist > WebDisplays.INSTANCE.unloadDistance2 * 16)
tes.deactivate();
// else if (ClientConfig.AutoVolumeControl.enableAutoVolume)
// tes.updateTrackDistance(dist, 80); //ToDo find master volume
} else if (dist <= WebDisplays.INSTANCE.loadDistance2)
tes.load();
} else if (dist <= WebDisplays.INSTANCE.loadDistance2 * 16)
tes.activate();
}
}

View File

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

View File

@ -7,10 +7,12 @@ package net.montoyo.wd.client.renderers;
import com.cinemamod.mcef.MCEFBrowser;
import com.mojang.blaze3d.systems.RenderSystem;
import com.mojang.blaze3d.vertex.*;
import net.minecraft.client.Minecraft;
import net.minecraft.client.renderer.GameRenderer;
import net.minecraft.client.renderer.MultiBufferSource;
import net.minecraft.client.renderer.blockentity.BlockEntityRenderer;
import net.minecraft.client.renderer.blockentity.BlockEntityRendererProvider;
import net.montoyo.wd.WebDisplays;
import net.montoyo.wd.entity.ScreenData;
import net.montoyo.wd.entity.ScreenBlockEntity;
import net.montoyo.wd.utilities.math.Vector3f;
@ -38,16 +40,19 @@ public class ScreenRenderer implements BlockEntityRenderer<ScreenBlockEntity> {
public void render(ScreenBlockEntity te, float partialTick, @NotNull PoseStack poseStack, @NotNull MultiBufferSource bufferSource, int packedLight, int packedOverlay) {
if (!te.isLoaded())
return;
//Disable lighting
// RenderSystem.enableTexture();
// RenderSystem.disableCull();
// RenderSystem.disableCull();
RenderSystem.disableBlend();
for (int i = 0; i < te.screenCount(); i++) {
ScreenData scr = te.getScreen(i);
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

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
// 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) {
Map<String, JSQueryHandler> handlerMap = browser.queryHandlers();
JSQueryHandler handler = browser.pointerLock();
JSQueryHandler handler = browser.focusedElement();
handlerMap.put(handler.getName(), handler);
}
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;
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<>();
public WDClientBrowser(MCEFClient client, String url, boolean transparent) {
@ -21,7 +21,7 @@ public class WDClientBrowser extends MCEFBrowser implements WDBrowser {
}
@Override
public ElementCenterQuery pointerLock() {
return lock;
public ElementCenterQuery focusedElement() {
return focusedEl;
}
}