Партиклы и еще раз партиклы.

Разобрался немного. Хотелось бы получить информации по функциям, кого не затруднит.
Код:
public class BlockParticleTest extends EntityFX{
    
    private static ResourceLocation particles = new ResourceLocation("lastdays:particles/particleTest.png");

    public BlockParticleTest(World wrd, double x, double y, double z){
        super(wrd, x, y, z);
    }
        //Этот метод скопипастен полностью, кроме того, что помечено.
    @Override
    public void renderParticle(Tessellator tess, float partialTicks, float par3, float par4, float par5, float par6, float par7){
        Minecraft.getMinecraft().renderEngine.bindTexture(getIconLoc());//МЕТКА
        GL11.glDepthMask(false);
        GL11.glEnable(GL11.GL_BLEND);
        GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA);
        GL11.glAlphaFunc(GL11.GL_GREATER, 0.003921569F);//МЕТКА
        tess.startDrawingQuads();//МЕТКА
        tess.setBrightness(getBrightnessForRender(partialTicks));//МЕТКА
        float scale = 0.1F * particleScale;
        float x = (float)(prevPosX + (posX - prevPosX) * partialTicks - interpPosX);
        float y = (float)(prevPosY + (posY - prevPosY) * partialTicks - interpPosY);
        float z = (float)(prevPosZ + (posZ - prevPosZ) * partialTicks - interpPosZ);
        tess.addVertexWithUV(x - par3 * scale - par6 * scale, y - par4 * scale, z - par5 * scale - par7 * scale, /*НАЧАЛО_МЕТКИ*/0.0, 0.0/*КОНЕЦ_МЕТКИ*/);
        tess.addVertexWithUV(x - par3 * scale + par6 * scale, y + par4 * scale, z - par5 * scale + par7 * scale, /*НАЧАЛО_МЕТКИ*/1.0, 0.0/*КОНЕЦ_МЕТКИ*/);
        tess.addVertexWithUV(x + par3 * scale + par6 * scale, y + par4 * scale, z + par5 * scale + par7 * scale, /*НАЧАЛО_МЕТКИ*/1.0, 1.0/*КОНЕЦ_МЕТКИ*/);
        tess.addVertexWithUV(x + par3 * scale - par6 * scale, y - par4 * scale, z + par5 * scale - par7 * scale, /*НАЧАЛО_МЕТКИ*/0.0, 1.0/*КОНЕЦ_МЕТКИ*/);
        tess.draw();//МЕТКА
        GL11.glDisable(GL11.GL_BLEND);
        GL11.glDepthMask(true);
        GL11.glAlphaFunc(GL11.GL_GREATER, 0.1F);//МЕТКА
    }

    protected ResourceLocation getIconLoc() {
        return particles;
    }
    
    @Override
    public int getFXLayer(){
        return 3;//Корень зла, если это - 3, то при рендере он без твоего согласия не вызывает заранее tess.startDrawingQuads(); и tess.draw(); , что позволяет иметь свою текстуру.
    }
        //Те три метода, что ниже, для удобства
    public BlockParticleTest setMaxAge(int maxAge){
        particleMaxAge = maxAge;
        return this;
    }

    public BlockParticleTest setGravity(double gravity){
        particleGravity = (float)gravity;
        return this;
    }
}
Что есть что и что за что отвечает? Как допустим сделать так, что бы частица жила долго и "пульсировала" (расширялась и сжималась текстура)?
Как сделать так, что бы частицы имели гравитацию и падали на землю? Как сделать так, что бы частицы (если их спавнится много) медленно вращались вокруг своей оси?
 

necauqua

когда-то был anti344
Администратор
1,216
27
172
Ухтыы, мой код ещё используют. Даже комменты и МЕТКИ оставили, йоу.
Так вот для движений всяких насилуй onUpdate(), синусами всякими крутить, гравитацию можно выставить в переменной, что уже есть в EntityFX или в нём-же. Жила долго, аналогичная переменная, вроде-бы particleAge.
Пульсировать - менять particleScale во всё том-же злополучном onUpdate.
[merge_posts_bbcode]Добавлено: 18.05.2015 12:37:55[/merge_posts_bbcode]

Там ты даже maxAge и gravity оставил, вот и выставляй себе значение

[merge_posts_bbcode]Добавлено: 18.05.2015 12:38:10[/merge_posts_bbcode]

Хотя в моём оригинальном коде вроде и скейл был, но не помню.
 
А можно примеры кода? Просто не могу сообразить все до конца.
[merge_posts_bbcode]Добавлено: 18.05.2015 17:41:37[/merge_posts_bbcode]

А точнее, не могу создать правильные условия обработки функций, аля кривая формула или неправильно ставлю GL11.glRotatef((float) Math.random(), scale, scale, scale); после чего у меня частицы дергаются как непойми что, пытаясь вращаться вокруг оси.
 

necauqua

когда-то был anti344
Администратор
1,216
27
172
Псевдо внизу - пульсация, синусы - лень и долго, остальное элементарно

boolean pulse = false;

onUpdate(){
  particleScale += pulse ? 0.02f : -0.02f;
  if(particleScale >= 4 || particleScale <= -4){
    pulse = !pulse;
  }
}
[merge_posts_bbcode]Добавлено: 18.05.2015 13:01:17[/merge_posts_bbcode]

Вращение у тебя не то. Ибо там хитрожопое вращение, чтоб текстура всегда смотрела прямо на тебя, там хитро нужно делать.
 
Сверху