- 204
- 7
- 25
Допустим мне нужно смотреть под углами YAW 123.7, PITCH 71, как нарисовать(а точнее получить координаты на экране) точку с которой нужно совместить курсор(прицел) ?
Follow along with the video below to see how to install our site as a web app on your home screen.
Примечание: This feature may not be available in some browsers.
@SubscribeEvent
public void onRenderText(RenderGameOverlayEvent event){
if(event.type == RenderGameOverlayEvent.ElementType.TEXT) {
if (mc.fontRendererObj != null) {
float playerYaw=mc.thePlayer.getRotationYawHead();
float playerPitch=mc.thePlayer.rotationPitch;
float anglesDiffYaw = (float) (to360(targetYaw) - to360(playerYaw));
float anglesDiffPitch = (float) (to360(targetPitch) - to360(playerPitch));
float degreesInPixel = mc.gameSettings.fovSetting/event.resolution.getScaledWidth();
mc.fontRendererObj.drawString("+"...
class LookHelper {
public void lookAtPos(EntityPlayer player, double x, double y, double z) {
// Тут мы получаем расстояние между смотрящим и точкой куда надо смотреть
double distX = player.posX - targetX;
double distY = player.posY - targetY;
double distZ = player.posZ - targetZ;
// Хз что это за градусы, в майне это финальное(после компиляции) значение
double degMc = 57.2957763671875;
// Стандартное вычисление угла по двум координатам
float targetYaw = (float)(MathHelper.atan2(distZ, distX) * degMc) - 90.0F;
// Так как у нас нет доп. точки для Y(оно и логично), мы должно произвести вычисление за счёт X и Z
double sqrtXZ = (double) MathHelper.sqrt(distX * distX + distZ * distZ);
float targetPitch = (float)(-(MathHelper.atan2(distY, sqrtXZ) * degMc));
player.rotationPitch = interpolateAngle(player.rotationPitch, targetPitch, 30F);
player.rotationYawHead = interpolateAngle(player.rotationYawHead, targetYaw, 30F);
}
// Некая "интерполяция" угла, чтобы не было более/менее 0-360 градусов(кек) с последующим сдвигом начальной точки обзора на конечную точку
private float interpolateAngle(float start, float end, float delta) {
float deg = MathHelper.clamp(MathHelper.wrapDegrees(end - start), -delta, delta);
return start + deg;
}
}
@SubscribeEvent
public void onRenderText(RenderGameOverlayEvent event){
if(event.type == RenderGameOverlayEvent.ElementType.TEXT) {
if (mc.fontRendererObj != null) {
float playerYaw=mc.thePlayer.getRotationYawHead();
float playerPitch=mc.thePlayer.rotationPitch;
float anglesDiffYaw = (float) (to360(targetYaw) - to360(playerYaw));
float anglesDiffPitch = (float) (to360(targetPitch) - to360(playerPitch));
float degreesInPixel = mc.gameSettings.fovSetting/event.resolution.getScaledWidth();
mc.fontRendererObj.drawString("+", (event.resolution.getScaledWidth()/2)+(anglesDiffYaw/degreesInPixel)-2, (event.resolution.getScaledHeight()/2)+(anglesDiffPitch/degreesInPixel)-3, mc.thePlayer.worldObj.rand.nextBoolean()?0xFF0000:0x00FF00, false);
}
}
}
public static double to360(double in) {
return (in + 360) % 360;
}