Untitled
unknown
plain_text
8 months ago
4.6 kB
4
Indexable
package alpha.util.render;
import alpha.util.IMinecraft;
import net.minecraft.entity.Entity;
import net.minecraft.entity.player.PlayerEntity;
import net.minecraft.util.math.MathHelper;
import net.minecraft.util.math.vector.Quaternion;
import net.minecraft.util.math.vector.Vector2f;
import net.minecraft.util.math.vector.Vector3d;
import net.minecraft.util.math.vector.Vector3f;
import org.joml.Vector2d;
public class ProjectionUtils implements IMinecraft {
public static Vector2d project(double x, double y, double z) {
Vector3d camera_pos = mc.getRenderManager().info.getProjectedView();
Quaternion cameraRotation = mc.getRenderManager().getCameraOrientation().copy();
cameraRotation.conjugate();
Vector3f result3f = new Vector3f((float) (camera_pos.x - x), (float) (camera_pos.y - y), (float) (camera_pos.z - z));
result3f.transform(cameraRotation);
if (mc.gameSettings.viewBobbing) {
Entity renderViewEntity = mc.getRenderViewEntity();
if (renderViewEntity instanceof PlayerEntity playerentity) {
calculateViewBobbing(playerentity, result3f);
}
}
double fov = mc.gameRenderer.getFOVModifier(mc.getRenderManager().info, mc.getRenderPartialTicks(), true);
return calculateScreenPosition(result3f, fov);
}
private static Vector2f calculateScreenPosition1337(Vector3f result3f, double fov) {
float halfHeight = (float)mc.getMainWindow().getScaledHeight() / 2.0f;
float scaleFactor = halfHeight / (result3f.getZ() * (float)Math.tan(Math.toRadians(fov / 2.0)));
if (result3f.getZ() < 0.0f) {
return new Vector2f(-result3f.getX() * scaleFactor + (float)mc.getMainWindow().getScaledWidth() / 2.0f, (float)mc.getMainWindow().getScaledHeight() / 2.0f - result3f.getY() * scaleFactor);
}
return new Vector2f(Float.MAX_VALUE, Float.MAX_VALUE);
}
public static Vector2f project1337(double x, double y, double z) {
Entity renderViewEntity;
Vector3d camera_pos = ProjectionUtils.mc.getRenderManager().info.getProjectedView();
Quaternion cameraRotation = mc.getRenderManager().getCameraOrientation().copy();
cameraRotation.conjugate();
Vector3f result3f = new Vector3f((float)(camera_pos.x - x), (float)(camera_pos.y - y), (float)(camera_pos.z - z));
result3f.transform(cameraRotation);
if (ProjectionUtils.mc.gameSettings.viewBobbing && (renderViewEntity = mc.getRenderViewEntity()) instanceof PlayerEntity) {
PlayerEntity playerentity = (PlayerEntity)renderViewEntity;
ProjectionUtils.calculateViewBobbing(playerentity, result3f);
}
double fov = ProjectionUtils.mc.gameRenderer.getFOVModifier(ProjectionUtils.mc.getRenderManager().info, mc.getRenderPartialTicks(), true);
return ProjectionUtils.calculateScreenPosition1337(result3f, fov);
}
private static void calculateViewBobbing(PlayerEntity playerentity, Vector3f result3f) {
float walked = playerentity.distanceWalkedModified;
float f = walked - playerentity.prevDistanceWalkedModified;
float f1 = -(walked + f * mc.getRenderPartialTicks());
float f2 = MathHelper.lerp(mc.getRenderPartialTicks(), playerentity.prevCameraYaw, playerentity.cameraYaw);
Quaternion quaternion = new Quaternion(Vector3f.XP, Math.abs(MathHelper.cos(f1 * (float) Math.PI - 0.2F) * f2) * 5.0F, true);
quaternion.conjugate();
result3f.transform(quaternion);
Quaternion quaternion1 = new Quaternion(Vector3f.ZP, MathHelper.sin(f1 * (float) Math.PI) * f2 * 3.0F, true);
quaternion1.conjugate();
result3f.transform(quaternion1);
Vector3f bobTranslation = new Vector3f((MathHelper.sin(f1 * (float) Math.PI) * f2 * 0.5F), (-Math.abs(MathHelper.cos(f1 * (float) Math.PI) * f2)), 0.0f);
bobTranslation.setY(-bobTranslation.getY());
result3f.add(bobTranslation);
}
private static Vector2d calculateScreenPosition(Vector3f result3f, double fov) {
float halfHeight = mc.getMainWindow().getScaledHeight() / 2.0F;
float scaleFactor = halfHeight / (result3f.getZ() * (float) Math.tan(Math.toRadians(fov / 2.0F)));
if (result3f.getZ() < 0.0F) {
return new Vector2d(-result3f.getX() * scaleFactor + mc.getMainWindow().getScaledWidth() / 2.0F, mc.getMainWindow().getScaledHeight() / 2.0F - result3f.getY() * scaleFactor);
}
return null;
}
}
Editor is loading...
Leave a Comment