Фиксирование камеры на движущейся цели

Версия Minecraft
1.10.2
101
0
Доброго времени суток. 
Мне нужно сделать так, чтобы если игрок смотрит на какую-либо цель(игрок/моб) и зажимает шифт, то при движении этой цели, камера(и сам игрок) будут поворачиваться вслед за ней автоматически. 
Пока что я вижу это так: ищем цель, которая у нас на курсоре, проверяем расстояние до неё. Если расстояние не более 10 блоков, то при нажатии шифта(событие отслежу, сам наверняка найду какое :) ) начинается слежение(а вот как это сделать плавно, я не знаю). 
Что подскажете?)
 
4,046
63
645
Высчитываешь необходимый угол поворота игрока и присваиваешь его камере...
По углам можешь глянуть код компаса.
Ну а присваивать чему-то начинающемуся с camera... Не помню точно...
Player.cameraRaw, что ли...
 
101
0
Liahim написал(а):
Высчитываешь необходимый угол поворота игрока и присваиваешь его камере...
По углам можешь глянуть код компаса.
Ну а присваивать чему-то начинающемуся с camera... Не помню точно...
Player.cameraRaw, что ли...

А получится сделать плавно, не рывками? Я ещё не проверял, но мне кажется, что это будут какие-то мини-телепортации просто.
 
4,046
63
645
Это уже чисто математически...
Высчитываешь разницу между текущим и требуемым углами, умножаешь её на 0,1 или на 0,01, это смотря какая тебе нужна скорость, и прибавляешь значение у текущему углу...
В итоге разница постепенно сойдёт на нет.
 
101
0
Liahim написал(а):
Это уже чисто математически...
Высчитываешь разницу между текущим и требуемым углами, умножаешь её на 0,1 или на 0,01, это смотря какая тебе нужна скорость, и прибавляешь значение у текущему углу...
В итоге разница постепенно сойдёт на нет.

Ладно, это понял, спасибо) Буду пробовать


А как можно во время этого "таргеттинга" запретить поворот камеры мышкой?
 
101
0
Сорьки, что поднимаю старую тему, но я снова вернулся к этому вопросу спустя время.
Код работает так, как надо, но мне нужно сделать камеру плавнее, она очень дёргается, это не подойдёт.

Код:
public static void lookAt(EntityPlayer player) {
		EntityLiving ent = getFocusEntity();
		double endX = ent.posX;
        double endY = ent.posY - ent.getEyeHeight() + (ent.height - 1);
        double endZ = ent.posZ;
        double deltaX = endX - player.posX;
        double deltaY = endY - player.posY;
        double deltaZ = endZ - player.posZ;
        double hypotenuse = Math.sqrt(deltaX * deltaX + deltaZ * deltaZ);
        float rotationYaw = (float) Math.toDegrees(Math.atan2(deltaX, deltaZ));
        float rotationPitch = (float) Math.toDegrees(Math.atan2(deltaY, hypotenuse));
        

        player.rotationYaw = -rotationYaw;
        player.prevRotationYaw = -rotationYaw;
        player.rotationPitch = -rotationPitch;
        player.prevRotationPitch = -rotationPitch;	
        player.capabilities.setPlayerWalkSpeed(0.05F);
	}
 
3,005
192
592
Agravaine написал(а):
Посмотри как сглаживается движение в майне, там когда на какуе-то F1-12 жмешь то плавно.

Для этого, вроде оптифайн нужен.
В ванили такого нету.
 
101
0
Код:
if (this.mc.gameSettings.smoothCamera)
        {
            float f = this.mc.gameSettings.mouseSensitivity * 0.6F + 0.2F;
            float f1 = f * f * f * 8.0F;
            this.smoothCamFilterX = this.mouseFilterXAxis.smooth(this.smoothCamYaw, 0.05F * f1);
            this.smoothCamFilterY = this.mouseFilterYAxis.smooth(this.smoothCamPitch, 0.05F * f1);
            this.smoothCamPartialTicks = 0.0F;
            this.smoothCamYaw = 0.0F;
            this.smoothCamPitch = 0.0F;
        }
        else
        {
            this.smoothCamFilterX = 0.0F;
            this.smoothCamFilterY = 0.0F;
            this.mouseFilterXAxis.reset();
            this.mouseFilterYAxis.reset();
        }

Код:
if (this.mc.gameSettings.smoothCamera)
            {
                this.smoothCamYaw += f2;
                this.smoothCamPitch += f3;
                float f4 = partialTicks - this.smoothCamPartialTicks;
                this.smoothCamPartialTicks = partialTicks;
                f2 = this.smoothCamFilterX * f4;
                f3 = this.smoothCamFilterY * f4;
                this.mc.thePlayer.setAngles(f2, f3 * (float)i);
            }
            else
            {
                this.smoothCamYaw = 0.0F;
                this.smoothCamPitch = 0.0F;
                this.mc.thePlayer.setAngles(f2, f3 * (float)i);
            }
Нашёл в EntityRenderer, но пока не разобрался :\
 
Сверху