ReyMagos
Тег-бомбастер
- 412
- 7
- 121
Есть предмет который при нажатии правой кнопкой что-то делает через два блока перед взглядом игрока (допустим спавнит партиклы). Составил такую схему:
Тут я делю весь обзор на 4 части и в каждой высчитываю угол от ближайшей абциссы.
Но происходит всякая фигня (партиклы появляются где попало). Я натыкал sendMessage, посмотрел резы. Сравнил с калькулятором. Не сошлось. Посмотрел, как это реализуется в EntityThrowable. Поменял везде
float yaw = entityLiving.rotationYaw > 0 ? abs(entityLiving.rotationYaw) % 360.0F : 360 - abs(entityLiving.rotationYaw) % 360.0F;
и во всех случаях возвращает нормальный угол поворота. Соответственно для каждой части я знаю гипотенузу (2 блока) и угол альфа (равен yaw - 90 * номер части, чтобы построить прямоугольный треугольник) и с помощью sin и cos высчитываю катеты (x и z). Также я ставлю знак '-' если направление с отрицательным значением абциссы. Получился примерно такой код:
Java:
double axisX = 0;
double axisZ = 0;
float yaw = entityLiving.rotationYaw > 0 ? abs(entityLiving.rotationYaw) % 360.0F : 360 - abs(entityLiving.rotationYaw) % 360.0F;
if (yaw < 90 && yaw >= 0) {
axisX = 2 * -MathHelper.sin(yaw);
axisZ = 2 * MathHelper.cos(yaw);
}
if (yaw < 180 && yaw >= 90) {
axisX = 2 * -MathHelper.cos(yaw - 90);
axisZ = 2 * -MathHelper.sin(yaw - 90);
}
if (yaw < 270 && yaw >= 180) {
axisX = 2 * MathHelper.sin(yaw - 180);
axisZ = 2 * -MathHelper.cos(yaw - 180);
}
if (yaw < 360 && yaw >= 270) {
axisX = 2 * MathHelper.cos(yaw - 270);
axisZ = 2 * MathHelper.sin(yaw - 270);
}
worldIn.spawnParticle(EnumParticleTypes.FLAME, entityLiving.posX + axisX, entityLiving.posY + entityLiving.height, entityLiving.posZ + axisZ, 0.0D, 0.0D, 0.0D);
Math.sin(), Math.cos()
на MathHelper.sin(), MathHelper.cos()
. Не помогло. И вот сижу думаю в чём проблема. Кто может помочь?
Последнее редактирование: