Search in sources :

Example 6 with Portal

use of com.qouteall.immersive_portals.portal.Portal in project ImmersivePortalsMod by qouteall.

the class ViewAreaRenderer method generateTriangleRectangular.

private static void generateTriangleRectangular(Consumer<Vec3d> vertexOutput, Portal portal, float layerWidth, Vec3d posInPlayerCoordinate) {
    Vec3d layerOffsest = portal.getNormal().multiply(-layerWidth);
    Vec3d[] frontFace = Arrays.stream(portal.getFourVerticesRelativeToCenter(0)).map(pos -> pos.add(posInPlayerCoordinate)).toArray(Vec3d[]::new);
    Vec3d[] backFace = Arrays.stream(portal.getFourVerticesRelativeToCenter(0)).map(pos -> pos.add(posInPlayerCoordinate).add(layerOffsest)).toArray(Vec3d[]::new);
    // putIntoQuad(
    // vertexOutput,
    // backFace[0],
    // backFace[2],
    // backFace[3],
    // backFace[1]
    // );
    putIntoQuad(vertexOutput, frontFace[0], frontFace[2], frontFace[3], frontFace[1]);
}
Also used : GlStateManager(com.mojang.blaze3d.platform.GlStateManager) GuiLighting(net.minecraft.client.render.GuiLighting) Tessellator(net.minecraft.client.render.Tessellator) Arrays(java.util.Arrays) OFInterface(com.qouteall.immersive_portals.OFInterface) GL_CLIP_PLANE0(org.lwjgl.opengl.GL11.GL_CLIP_PLANE0) CGlobal(com.qouteall.immersive_portals.CGlobal) SpecialPortalShape(com.qouteall.immersive_portals.portal.SpecialPortalShape) Consumer(java.util.function.Consumer) Mirror(com.qouteall.immersive_portals.portal.Mirror) Vec3d(net.minecraft.util.math.Vec3d) Portal(com.qouteall.immersive_portals.portal.Portal) BufferBuilder(net.minecraft.client.render.BufferBuilder) MinecraftClient(net.minecraft.client.MinecraftClient) GL11(org.lwjgl.opengl.GL11) VertexFormats(net.minecraft.client.render.VertexFormats) GL_TRIANGLES(org.lwjgl.opengl.GL11.GL_TRIANGLES) Vec3d(net.minecraft.util.math.Vec3d)

Example 7 with Portal

use of com.qouteall.immersive_portals.portal.Portal in project ImmersivePortalsMod by qouteall.

the class ClientTeleportationManager method changePlayerDimension.

/**
 * {@link ClientPlayNetworkHandler#onPlayerRespawn(PlayerRespawnS2CPacket)}
 */
private void changePlayerDimension(ClientPlayerEntity player, ClientWorld fromWorld, ClientWorld toWorld, Vec3d destination) {
    DimensionType toDimension = toWorld.dimension.getType();
    DimensionType fromDimension = fromWorld.dimension.getType();
    ClientPlayNetworkHandler workingNetHandler = ((IEClientWorld) fromWorld).getNetHandler();
    ClientPlayNetworkHandler fakedNetHandler = ((IEClientWorld) toWorld).getNetHandler();
    ((IEClientPlayNetworkHandler) workingNetHandler).setWorld(toWorld);
    ((IEClientPlayNetworkHandler) fakedNetHandler).setWorld(fromWorld);
    ((IEClientWorld) fromWorld).setNetHandler(fakedNetHandler);
    ((IEClientWorld) toWorld).setNetHandler(workingNetHandler);
    fromWorld.removeEntity(player.getEntityId());
    player.removed = false;
    player.world = toWorld;
    player.dimension = toDimension;
    player.x = destination.x;
    player.y = destination.y;
    player.z = destination.z;
    toWorld.addPlayer(player.getEntityId(), player);
    mc.world = toWorld;
    mc.worldRenderer = CGlobal.clientWorldLoader.getWorldRenderer(toDimension);
    toWorld.setScoreboard(fromWorld.getScoreboard());
    if (mc.particleManager != null)
        mc.particleManager.setWorld(toWorld);
    BlockEntityRenderDispatcher.INSTANCE.setWorld(toWorld);
    CGlobal.clientWorldLoader.getDimensionRenderHelper(toDimension).switchToMe();
    Helper.log(String.format("Client Changed Dimension from %s to %s time: %s", fromDimension, toDimension, tickTimeForTeleportation));
    Helper.log("Portal Number Near Player Now" + McHelper.getEntitiesNearby(mc.player, Portal.class, 10).count());
    // because the teleportation may happen before rendering
    // but after pre render info being updated
    MyRenderHelper.updatePreRenderInfo(MyRenderHelper.partialTicks);
    OFInterface.onPlayerTraveled.accept(fromDimension, toDimension);
}
Also used : DimensionType(net.minecraft.world.dimension.DimensionType) IEClientWorld(com.qouteall.immersive_portals.ducks.IEClientWorld) IEClientPlayNetworkHandler(com.qouteall.immersive_portals.ducks.IEClientPlayNetworkHandler) Portal(com.qouteall.immersive_portals.portal.Portal) IEClientPlayNetworkHandler(com.qouteall.immersive_portals.ducks.IEClientPlayNetworkHandler) ClientPlayNetworkHandler(net.minecraft.client.network.ClientPlayNetworkHandler)

Example 8 with Portal

use of com.qouteall.immersive_portals.portal.Portal in project ImmersivePortalsMod by qouteall.

the class ViewAreaRenderer method buildPortalViewAreaTrianglesBuffer.

private static void buildPortalViewAreaTrianglesBuffer(Vec3d fogColor, Portal portal, BufferBuilder bufferbuilder, Vec3d cameraPos, float partialTicks, float layerWidth) {
    // if layerWidth is small, the teleportation will not be seamless
    // counter-clockwise triangles are front-faced in default
    bufferbuilder.begin(GL_TRIANGLES, VertexFormats.POSITION_COLOR);
    Vec3d posInPlayerCoordinate = portal.getPos().subtract(cameraPos);
    if (portal instanceof Mirror) {
        posInPlayerCoordinate = posInPlayerCoordinate.add(portal.getNormal().multiply(-0.001));
    }
    Consumer<Vec3d> vertexOutput = p -> putIntoVertex(bufferbuilder, p, fogColor);
    if (portal.specialShape == null) {
        generateTriangleRectangular(vertexOutput, portal, layerWidth, posInPlayerCoordinate);
    } else {
        generateTriangleSpecial(vertexOutput, portal, layerWidth, posInPlayerCoordinate);
    }
    if (shouldRenderAdditionalBox(portal, cameraPos)) {
        renderAdditionalBox(portal, cameraPos, vertexOutput);
    }
}
Also used : GlStateManager(com.mojang.blaze3d.platform.GlStateManager) GuiLighting(net.minecraft.client.render.GuiLighting) Tessellator(net.minecraft.client.render.Tessellator) Arrays(java.util.Arrays) OFInterface(com.qouteall.immersive_portals.OFInterface) GL_CLIP_PLANE0(org.lwjgl.opengl.GL11.GL_CLIP_PLANE0) CGlobal(com.qouteall.immersive_portals.CGlobal) SpecialPortalShape(com.qouteall.immersive_portals.portal.SpecialPortalShape) Consumer(java.util.function.Consumer) Mirror(com.qouteall.immersive_portals.portal.Mirror) Vec3d(net.minecraft.util.math.Vec3d) Portal(com.qouteall.immersive_portals.portal.Portal) BufferBuilder(net.minecraft.client.render.BufferBuilder) MinecraftClient(net.minecraft.client.MinecraftClient) GL11(org.lwjgl.opengl.GL11) VertexFormats(net.minecraft.client.render.VertexFormats) GL_TRIANGLES(org.lwjgl.opengl.GL11.GL_TRIANGLES) Mirror(com.qouteall.immersive_portals.portal.Mirror) Vec3d(net.minecraft.util.math.Vec3d)

Example 9 with Portal

use of com.qouteall.immersive_portals.portal.Portal in project ImmersivePortalsMod by qouteall.

the class MyGameRenderer method calcClipPlaneEquation.

// invoke this before rendering portal
// its result depends on camra pos
private double[] calcClipPlaneEquation() {
    Portal portal = CGlobal.renderer.getRenderingPortal();
    Vec3d planeNormal = portal.getNormal().multiply(-1);
    // Vec3d cullingPos = portal.getPos()
    // .subtract(portal.getNormal().multiply(-0.01))//avoid z fighting
    // .subtract(mc.gameRenderer.getCamera().getPos());
    Vec3d cameraPos = mc.gameRenderer.getCamera().getPos();
    Vec3d cullingPos = portal.getPointInPortalProjection(cameraPos).subtract(cameraPos).subtract(// avoid z fighting
    portal.getNormal().multiply(-0.01));
    if (OFInterface.isShaders.getAsBoolean() && portal instanceof Mirror) {
        planeNormal = planeNormal.multiply(-1);
    }
    // equation: planeNormal * p + c > 0
    // -planeNormal * portalCenter = c
    double c = planeNormal.multiply(-1).dotProduct(cullingPos);
    return new double[] { planeNormal.x, planeNormal.y, planeNormal.z, c };
}
Also used : Portal(com.qouteall.immersive_portals.portal.Portal) Mirror(com.qouteall.immersive_portals.portal.Mirror) Vec3d(net.minecraft.util.math.Vec3d)

Example 10 with Portal

use of com.qouteall.immersive_portals.portal.Portal in project ImmersivePortalsMod by qouteall.

the class MyCommandServer method completeBiWayBiFacedPortal.

private static void completeBiWayBiFacedPortal(Portal portal, Consumer<Portal> removalInformer, Consumer<Portal> addingInformer) {
    Portal oppositeFacedPortal = completeBiFacedPortal(portal, removalInformer);
    Portal r1 = completeBiWayPortal(portal, removalInformer);
    Portal r2 = completeBiWayPortal(oppositeFacedPortal, removalInformer);
    addingInformer.accept(oppositeFacedPortal);
    addingInformer.accept(r1);
    addingInformer.accept(r2);
}
Also used : VerticalConnectingPortal(com.qouteall.immersive_portals.portal.global_portals.VerticalConnectingPortal) Portal(com.qouteall.immersive_portals.portal.Portal) BorderPortal(com.qouteall.immersive_portals.portal.global_portals.BorderPortal)

Aggregations

Portal (com.qouteall.immersive_portals.portal.Portal)16 Vec3d (net.minecraft.util.math.Vec3d)9 SpecialPortalShape (com.qouteall.immersive_portals.portal.SpecialPortalShape)6 BorderPortal (com.qouteall.immersive_portals.portal.global_portals.BorderPortal)6 VerticalConnectingPortal (com.qouteall.immersive_portals.portal.global_portals.VerticalConnectingPortal)6 ServerWorld (net.minecraft.server.world.ServerWorld)6 DimensionType (net.minecraft.world.dimension.DimensionType)6 Consumer (java.util.function.Consumer)5 ServerPlayerEntity (net.minecraft.server.network.ServerPlayerEntity)5 Helper (com.qouteall.immersive_portals.Helper)4 McHelper (com.qouteall.immersive_portals.McHelper)4 Mirror (com.qouteall.immersive_portals.portal.Mirror)4 MinecraftClient (net.minecraft.client.MinecraftClient)4 CommandDispatcher (com.mojang.brigadier.CommandDispatcher)3 IntegerArgumentType (com.mojang.brigadier.arguments.IntegerArgumentType)3 LiteralArgumentBuilder (com.mojang.brigadier.builder.LiteralArgumentBuilder)3 CommandContext (com.mojang.brigadier.context.CommandContext)3 CommandSyntaxException (com.mojang.brigadier.exceptions.CommandSyntaxException)3 CGlobal (com.qouteall.immersive_portals.CGlobal)3 ModMain (com.qouteall.immersive_portals.ModMain)3