Fixed EntityDrawer
This commit is contained in:
@@ -9,9 +9,6 @@ import org.saturnclient.common.ref.game.MinecraftClientRef;
|
||||
import org.saturnclient.impl.cosmetics.utils.IdentifierUtils;
|
||||
import org.saturnclient.saturnclient.SaturnClient;
|
||||
|
||||
import net.minecraft.client.network.AbstractClientPlayerEntity;
|
||||
import net.minecraft.util.Identifier;
|
||||
|
||||
public class SaturnProviderImpl implements SaturnProvider {
|
||||
@Override
|
||||
public MinecraftClientRef getClient() {
|
||||
|
||||
@@ -3,83 +3,70 @@ package org.saturnclient.impl.ui;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
import org.joml.Quaternionf;
|
||||
import org.joml.Vector3f;
|
||||
import org.saturnclient.common.ref.render.QuaternionfRef;
|
||||
import org.saturnclient.saturnclient.SaturnClient;
|
||||
import org.saturnclient.ui.ElementContext;
|
||||
import org.saturnclient.ui.RenderScope;
|
||||
import org.saturnclient.ui.components.SkinPreview.EntityDrawer;
|
||||
|
||||
import net.minecraft.client.render.DiffuseLighting;
|
||||
import net.minecraft.client.render.entity.EntityRenderDispatcher;
|
||||
import net.minecraft.client.render.entity.EntityRenderer;
|
||||
import net.minecraft.client.render.entity.state.EntityRenderState;
|
||||
import net.minecraft.entity.LivingEntity;
|
||||
|
||||
public class EntityDrawerImpl implements EntityDrawer {
|
||||
public static void drawEntity(RenderScope renderScope, int x1, int y1, int x2, int y2, int size, float f,
|
||||
float mouseX,
|
||||
float mouseY, LivingEntity entity, float angle, boolean negativeAngle) {
|
||||
float g = (float) (x1 + x2) / 2.0F;
|
||||
float h = (float) (y1 + y2) / 2.0F;
|
||||
renderScope.enableScissor(0, 6, x2, y2);
|
||||
float i = (float) Math.atan((double) ((g - mouseX) / 40.0F));
|
||||
float j = (float) Math.atan((double) ((h - mouseY) / 40.0F));
|
||||
Quaternionf quaternionf = (new Quaternionf()).rotateZ(3.1415927F);
|
||||
float k = entity.bodyYaw;
|
||||
float l = entity.getYaw();
|
||||
float m = entity.getPitch();
|
||||
float n = entity.lastHeadYaw;
|
||||
float o = entity.headYaw;
|
||||
entity.setYaw(angle);
|
||||
entity.bodyYaw = angle;
|
||||
entity.setPitch(-(j * 20.0F));
|
||||
entity.headYaw = negativeAngle ? (i * 40.0F) + 180f : -(i * 40.0F);
|
||||
entity.lastHeadYaw = entity.getHeadYaw();
|
||||
entity.setCustomNameVisible(false);
|
||||
|
||||
float p = entity.getScale();
|
||||
Vector3f vector3f = new Vector3f(0.0F, entity.getHeight() / 2.0F + f * p, 0.0F);
|
||||
float q = (float) size / p;
|
||||
drawEntity(renderScope, g, h, q, vector3f, quaternionf, null, entity);
|
||||
|
||||
entity.setCustomNameVisible(true);
|
||||
entity.bodyYaw = k;
|
||||
entity.setYaw(l);
|
||||
entity.setPitch(m);
|
||||
entity.lastHeadYaw = n;
|
||||
entity.headYaw = o;
|
||||
renderScope.disableScissor();
|
||||
}
|
||||
|
||||
public static void drawEntity(RenderScope renderScope, float x, float y, float size, Vector3f vector3f,
|
||||
Quaternionf quaternionf, @Nullable Quaternionf quaternionf2, LivingEntity entity) {
|
||||
// if (renderScope instanceof RenderScopeImpl scopeImpl) {
|
||||
// scopeImpl.matrices.push();
|
||||
// scopeImpl.matrices.translate((double) x, (double) y, 0);
|
||||
// scopeImpl.matrices.scale(size, size, -size);
|
||||
// scopeImpl.matrices.translate(vector3f.x, vector3f.y, vector3f.z);
|
||||
// scopeImpl.matrices.multiply(quaternionf);
|
||||
// scopeImpl.draw();
|
||||
// DiffuseLighting.disableGuiDepthLighting();
|
||||
// EntityRenderDispatcher entityRenderDispatcher = SaturnClient.client.getEntityRenderDispatcher();
|
||||
|
||||
// entityRenderDispatcher.setRenderShadows(false);
|
||||
// scopeImpl.draw((vertexConsumers) -> {
|
||||
// entityRenderDispatcher.render(entity, 0.0, 0.0, 0.0, 1.0F,
|
||||
// scopeImpl.matrices, vertexConsumers, 15728880);
|
||||
// });
|
||||
|
||||
// scopeImpl.draw();
|
||||
// entityRenderDispatcher.setRenderShadows(true);
|
||||
// scopeImpl.getMatrixStack().pop();
|
||||
// DiffuseLighting.enableGuiDepthLighting();
|
||||
// }
|
||||
}
|
||||
|
||||
@Override
|
||||
public void render(RenderScope renderScope, boolean negativeAngle, float angle, float scale, ElementContext ctx) {
|
||||
LivingEntity entity = SaturnClient.client.player;
|
||||
|
||||
System.out.println(scale);
|
||||
|
||||
if (entity != null) {
|
||||
drawEntity(renderScope, 0, 0, 75, 78, 30, 0.0625F, ctx.mouseX / scale, ctx.mouseY / scale, entity, angle,
|
||||
negativeAngle);
|
||||
drawEntity(renderScope, 0, 0, 75, 78, 30, 0.0625F, ctx.mouseX / scale, ctx.mouseY / scale,
|
||||
SaturnClient.client.player);
|
||||
}
|
||||
}
|
||||
|
||||
public static void drawEntity(RenderScope renderScope, int x1, int y1, int x2, int y2, int size, float scale,
|
||||
float mouseX, float mouseY, LivingEntity entity) {
|
||||
float f = (float) (x1 + x2) / 2.0F;
|
||||
float g = (float) (y1 + y2) / 2.0F;
|
||||
renderScope.enableScissor(x1, y1, x2, y2);
|
||||
float h = (float) Math.atan((double) ((f - mouseX) / 40.0F));
|
||||
float i = (float) Math.atan((double) ((g - mouseY) / 40.0F));
|
||||
Quaternionf quaternionf = (new Quaternionf()).rotateZ((float) Math.PI);
|
||||
Quaternionf quaternionf2 = (new Quaternionf()).rotateX(i * 20.0F * ((float) Math.PI / 180F));
|
||||
quaternionf.mul(quaternionf2);
|
||||
float j = entity.bodyYaw;
|
||||
float k = entity.getYaw();
|
||||
float l = entity.getPitch();
|
||||
float m = entity.lastHeadYaw;
|
||||
float n = entity.headYaw;
|
||||
entity.bodyYaw = 180.0F + h * 20.0F;
|
||||
entity.setYaw(180.0F + h * 40.0F);
|
||||
entity.setPitch(-i * 20.0F);
|
||||
entity.headYaw = entity.getYaw();
|
||||
entity.lastHeadYaw = entity.getYaw();
|
||||
float o = entity.getScale();
|
||||
Vector3f vector3f = new Vector3f(0.0F, entity.getHeight() / 2.0F + scale * o, 0.0F);
|
||||
float p = (float) size / o;
|
||||
drawEntity(renderScope, x1, y1, x2, y2, p, vector3f, quaternionf, quaternionf2, entity);
|
||||
entity.bodyYaw = j;
|
||||
entity.setYaw(k);
|
||||
entity.setPitch(l);
|
||||
entity.lastHeadYaw = m;
|
||||
entity.headYaw = n;
|
||||
renderScope.disableScissor();
|
||||
}
|
||||
|
||||
public static void drawEntity(RenderScope renderScope, int x1, int y1, int x2, int y2, float scale,
|
||||
Vector3f translation, Quaternionf rotation, @Nullable Quaternionf overrideCameraAngle,
|
||||
LivingEntity entity) {
|
||||
EntityRenderDispatcher entityRenderDispatcher = SaturnClient.client.getEntityRenderDispatcher();
|
||||
EntityRenderer<? super LivingEntity, ?> entityRenderer = entityRenderDispatcher.getRenderer(entity);
|
||||
EntityRenderState entityRenderState = entityRenderer.getAndUpdateRenderState(entity, 1.0F);
|
||||
entityRenderState.hitbox = null;
|
||||
|
||||
if (renderScope instanceof RenderScopeImpl i)
|
||||
i.addEntity(entityRenderState, scale, translation, rotation, overrideCameraAngle, x1, y1, x2, y2);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -7,6 +7,8 @@ import java.util.Objects;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
import org.joml.Matrix3x2f;
|
||||
import org.joml.Matrix3x2fStack;
|
||||
import org.joml.Quaternionf;
|
||||
import org.joml.Vector3f;
|
||||
|
||||
import com.mojang.blaze3d.textures.GpuTextureView;
|
||||
|
||||
@@ -29,6 +31,8 @@ import net.minecraft.client.gui.render.state.GuiRenderState;
|
||||
import net.minecraft.client.gui.render.state.ItemGuiElementRenderState;
|
||||
import net.minecraft.client.gui.render.state.TextGuiElementRenderState;
|
||||
import net.minecraft.client.gui.render.state.TexturedQuadGuiElementRenderState;
|
||||
import net.minecraft.client.gui.render.state.special.EntityGuiElementRenderState;
|
||||
import net.minecraft.client.render.entity.state.EntityRenderState;
|
||||
import net.minecraft.client.render.item.ItemRenderState;
|
||||
import net.minecraft.client.texture.Sprite;
|
||||
import net.minecraft.client.texture.TextureSetup;
|
||||
@@ -317,4 +321,25 @@ public class RenderScopeImpl implements RenderScope {
|
||||
fill(x, y + 1, x + 1, y + height - 1, color);
|
||||
fill(x + width - 1, y + 1, x + width, y + height - 1, color);
|
||||
}
|
||||
|
||||
public void addEntity(EntityRenderState entityState, float scale, Vector3f translation, Quaternionf rotation,
|
||||
@Nullable Quaternionf overrideCameraAngle, int x1, int y1, int x2, int y2) {
|
||||
|
||||
Matrix3x2f mat = this.matrices.stack;
|
||||
float offsetX = mat.m20;
|
||||
float offsetY = mat.m21;
|
||||
float scaleX = mat.m00; // current matrix X scale
|
||||
float scaleY = mat.m11; // current matrix Y scale
|
||||
|
||||
int adjustedX1 = (int) (x1 * scaleX + offsetX);
|
||||
int adjustedY1 = (int) (y1 * scaleY + offsetY);
|
||||
int adjustedX2 = (int) (x2 * scaleX + offsetX);
|
||||
int adjustedY2 = (int) (y2 * scaleY + offsetY);
|
||||
|
||||
float adjustedScale = scale * scaleX; // apply matrix scale to entity scale too
|
||||
|
||||
this.state.addSpecialElement(new EntityGuiElementRenderState(entityState, translation, rotation,
|
||||
overrideCameraAngle, adjustedX1, adjustedY1, adjustedX2, adjustedY2, adjustedScale,
|
||||
this.scissorStack.peekLast()));
|
||||
}
|
||||
}
|
||||
@@ -62,7 +62,7 @@ public class SaturnScreenFabric extends Screen implements ScreenProvider {
|
||||
mouseY *= 2;
|
||||
|
||||
if (client.world == null && client.getCurrentServerEntry() == null) {
|
||||
ROTATING_PANORAMA_RENDERER.render(context, this.width, this.height, true);
|
||||
// ROTATING_PANORAMA_RENDERER.render(context, this.width, this.height, true);
|
||||
}
|
||||
|
||||
RenderScope renderScope = new RenderScopeImpl(context);
|
||||
|
||||
Reference in New Issue
Block a user