[1.7.10] Партиклы

1,057
50
234
Добрый день.
Имею такой код партикла:

spawnAndSetParticle("flame", world, player.posX + 0.2D, player.posY - 1D, player.posZ, 0, -0.5, 0);

Проблема вся в том, что при повороте модели игрока, партикл естественно не поворачивается...
И я не могу понять, как правильно сделать...
 
Подмешиваем немного косинусов и синусов, учитываем player.yaw и player.pitch, помешиваем это все в котле и получаем готовый код =) . Ну а вообще, мне кажется, что Олдесткон тут можешь помочь.
 
Я не очень понял сути проблемы.
Что надо? Чтобы частица всегда была повёрнута к камере игрока? Так вроде в кубаче так и есть, нет?
Можно скрин или видео с пояснением что не так и как должно быть?
 
Oldestkon написал(а):
Я не очень понял сути проблемы.
Что надо? Чтобы частица всегда была повёрнута к камере игрока? Так вроде в кубаче так и есть, нет?
Можно скрин или видео с пояснением что не так и как должно быть?
Он наверное имел ввиду что они не движутся вместе с игроком,а висят сами по себе
 
Обновляй позицию частицы согласной этой формуле:
Код:
//dx - смещение партикля относительно игрока (при стандартном угле обзора) по оси Х
//dy - смещение партикля относительно игрока (при стандартном угле обзора) по оси Y
//dz - смещение партикля относительно игрока (при стандартном угле обзора) по оси Z
c = Math.cos(playerRotationYaw - 90);
s = Math.sin(playerRotationYaw - 90);
x = dx * c - dz * s; //поворачиваем партикль в пространстве игрока
y = dy; //по этой оси вращать не надо (если ты не хочешь, чтобы партикля меняла положение в зависимости от вертикального угла взгляда игрока
z = dx * s + dz * c;
finalX = x + playerX;//перемещаем партикль в пространство мира
finalY = y + playerY; 
finalZ = z + playerZ;
 
Код:
public class GSClientTickHandler {

 public Minecraft mc = Minecraft.getMinecraft();
 private double c;
 private double s;
 private double x;
 private double y;
 private double z;
 private double finalX;
 private double finalY;
 private double finalZ;
 private double dx;
 private double dy;
 private double dz;
 
 @SideOnly(Side.CLIENT)
 @SubscribeEvent
 public void onClientTick(ClientTickEvent event)
 {
 if(event.phase == Phase.END)
 {
 final Minecraft minecraft = FMLClientHandler.instance().getClient();
 final EntityClientPlayerMP player = minecraft.thePlayer;
 final WorldClient world = minecraft.theWorld;
   
 if (Side.CLIENT != null) 
 {
 if (player != null && world != null && player.inventory.armorItemInSlot(2) != null && player.inventory.armorItemInSlot(2).getItem() == ItemsAddon.JetPack && mc.gameSettings.keyBindJump.getIsKeyPressed() && player.posY < 360)
 {/*
 ((JetPack) player.inventory.armorItemInSlot(2).getItem()).setActive();
 player.motionY -= 0.05D;
 player.motionY += 0.07 + player.rotationPitch * 2 / 150 * 0.750;
 player.fallDistance = 0.0F;
 */ 
 //dx - смещение партикля относительно игрока (при стандартном угле обзора) по оси Х
 //dy - смещение партикля относительно игрока (при стандартном угле обзора) по оси Y
 //dz - смещение партикля относительно игрока (при стандартном угле обзора) по оси Z
 dx = 0.0D;
 dy = -0.5D;
 dz = 0.0D;
 c = Math.cos(player.rotationYaw - 90);
 s = Math.sin(player.rotationYaw - 90);
 x = dx * c - dz * s; //поворачиваем партикль в пространстве игрока
 y = dy; //по этой оси вращать не надо (если ты не хочешь, чтобы партикля меняла положение в зависимости от вертикального угла взгляда игрока
 z = dx * s + dz * c;
 finalX = x + player.posX;//перемещаем партикль в пространство мира
 finalY = y + player.posY; 
 finalZ = z + player.posZ;
 
 spawnAndSetParticle("flame", world, finalX + 0.2D, finalY, finalZ, 0, -0.5, 0);
 spawnAndSetParticle("flame", world, finalX + 0.2D, finalY - 1.0D, finalZ, 0, -0.5, 0);
 spawnAndSetParticle("flame", world, finalX + 0.2D, finalY - 1.1D, finalZ, 0, -0.5, 0);
 spawnAndSetParticle("flame", world, finalX + 0.2D, finalY - 1.2D, finalZ, 0, -0.5, 0);
 
 spawnAndSetParticle("smoke", world, finalX + 0.2D, finalY - 2.0D, finalZ, 0, -0.5, 0);
 spawnAndSetParticle("smoke", world, finalX + 0.2D, finalY - 2.1D, finalZ, 0, -0.5, 0);
 spawnAndSetParticle("smoke", world, finalX + 0.2D, finalY - 2.2D, finalZ, 0, -0.5, 0);
 spawnAndSetParticle("smoke", world, finalX + 0.2D, finalY - 2.3D, finalZ, 0, -0.5, 0);
 
 spawnAndSetParticle("flame", world, finalX - 0.2D, finalY, finalZ, 0, -0.5, 0);
 spawnAndSetParticle("flame", world, finalX - 0.2D, finalY - 1.0D, finalZ, 0, -0.5, 0);
 spawnAndSetParticle("flame", world, finalX - 0.2D, finalY - 1.1D, finalZ, 0, -0.5, 0);
 spawnAndSetParticle("flame", world, finalX - 0.2D, finalY - 1.2D, finalZ, 0, -0.5, 0);
 
 spawnAndSetParticle("smoke", world, finalX - 0.2D, finalY - 2.0D, finalZ, 0, -0.5, 0);
 spawnAndSetParticle("smoke", world, finalX - 0.2D, finalY - 2.1D, finalZ, 0, -0.5, 0);
 spawnAndSetParticle("smoke", world, finalX - 0.2D, finalY - 2.2D, finalZ, 0, -0.5, 0);
 spawnAndSetParticle("smoke", world, finalX - 0.2D, finalY - 2.3D, finalZ, 0, -0.5, 0);
 
 }
 }
 }
 }

 public void spawnAndSetParticle(String s, World world, double x, double y, double z, double velX, double velY, double velZ)
 {
 EntityFX fx = null;

 if(s.equals("flame"))
 {
 fx = new EntityJetpackFlameFX(world, x, y, z, velX, velY, velZ);
 }
 else if(s.equals("smoke"))
 {
 fx = new EntityJetpackSmokeFX(world, x, y, z, velX, velY, velZ);
 }

 mc.effectRenderer.addEffect(fx);
 }

}
"Толи лыжи не едут, то ли я дурак..."
pv1bcs0xsdlt.png

nxvazpswxcmc.png
 
Интерполируй rotationYaw и позицию игрока.
Заодно покажи, что с кодом сделал.
 
BlesseNtumble, а зачем что то менять? Пусть будет двигаться. Мне наоборот нрав. Так мне кажется больше реализма.
 
Oldestkon написал(а):
Интерполируй rotationYaw и позицию игрока.
Заодно покажи, что с кодом сделал.
Так это, убрал "+ N.ND"
Код:
 spawnAndSetParticle("flame", world, finalX, finalY, finalZ, 0, -0.5, 0);
 spawnAndSetParticle("flame", world, finalX, finalY - 1.0D, finalZ, 0, -0.5, 0);
 spawnAndSetParticle("flame", world, finalX, finalY - 1.1D, finalZ, 0, -0.5, 0);
 spawnAndSetParticle("flame", world, finalX, finalY - 1.2D, finalZ, 0, -0.5, 0);
 
 spawnAndSetParticle("smoke", world, finalX, finalY - 2.0D, finalZ, 0, -0.5, 0);
 spawnAndSetParticle("smoke", world, finalX, finalY - 2.1D, finalZ, 0, -0.5, 0);
 spawnAndSetParticle("smoke", world, finalX, finalY - 2.2D, finalZ, 0, -0.5, 0);
 spawnAndSetParticle("smoke", world, finalX, finalY - 2.3D, finalZ, 0, -0.5, 0);
 
Назад
Сверху