fix load distance
This commit is contained in:
parent
9452482254
commit
2e30446281
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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();
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -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());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
@ -47,7 +49,10 @@ public class ScreenRenderer implements BlockEntityRenderer<ScreenBlockEntity> {
|
|||
for (int i = 0; i < te.screenCount(); i++) {
|
||||
ScreenData scr = te.getScreen(i);
|
||||
if (scr.browser == null) {
|
||||
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
|
||||
|
|
|
|||
|
|
@ -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) {
|
||||
|
|
|
|||
|
|
@ -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();
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user