Rendu d'une barre de progression



  • Bonjour/Bonsoir,
    Alors voilà : j'ai voulu rendre une barre de mana. Pour la barre "non dynamique" (donc un rendu basique) tout va bien, mais j'ai ensuite tenté de la rendre dynamique, c'est à dire en faire une barre de progression. Problème : la barre (au niveau du mana, pas l'arrière plan) ne se rend plus du tout.

    Pour ceux qui sont fâchés avec les maths, sachez que (x/y)*z donne un pourcentage avec z comme maximum (par exemple x/60), x comme valeur actuelle et y comme valeur qui est égale à 100%.

    Code :

    
    int mX = event.resolution.getScaledWidth();
    int mY = event.resolution.getScaledHeight();
    float pixel = 1/64F;
    byte mbar_length = 94, mbar_height = 9;
    byte bar_length = 100, bar_height = 15;
    byte tex_mana_length = 60;
    
    PlayerData dat = PlayerData.get(this.mc.thePlayer);
    double charge = (dat.getMana()/dat.getPlayerMaxMana()) * mbar_length;
    double tex_charge = (dat.getMana()/dat.getPlayerMaxMana()) * tex_mana_length;
    
    GL11.glPushMatrix();
    GL11.glDisable(GL11.GL_LIGHTING);
    this.mc.renderEngine.bindTexture(gui_mana);
    
    Tessellator tess = Tessellator.instance;
    tess.startDrawingQuads();
    {
                // Bar
                tess.addVertexWithUV(mX - 110, mY - 25, 0, 0*pixel, 0*pixel);
                tess.addVertexWithUV(mX - 110, mY - 10, 0, 0*pixel, 9*pixel);
                tess.addVertexWithUV(mX - 10, mY - 10, 0, 64*pixel, 9*pixel);
                tess.addVertexWithUV(mX - 10, mY - 25, 0, 64*pixel, 0*pixel);
    
                // Mana
                tess.addVertexWithUV(mX - 107, mY - 22, 0, tex_charge*pixel, 9*pixel);
                tess.addVertexWithUV(mX - 107, mY - 13, 0, tex_charge*pixel, 14*pixel);
                tess.addVertexWithUV((mX - 107) + charge, mY - 13, 0, tex_charge*pixel, 14*pixel);
                tess.addVertexWithUV((mX - 107) + charge, mY - 22, 0, tex_charge*pixel, 9*pixel);
    }
    tess.draw();
    
    GL11.glEnable(GL11.GL_DEPTH_TEST);
    GL11.glEnable(GL11.GL_ALPHA_TEST);
    GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F);
    GL11.glPopMatrix();
    

  • Modérateurs

    Retire le rendu du fond et regarde si quelque chose s'affiche.



  • Nop, aucun rendu


  • Modérateurs

    Envoie la texture.



  •  
    ici



  • Up down, right,  left


  • Modérateurs

    C'est niveau des coordonnées que ça va pas. Ta texture fait quelle taille?

    Sent from my GT-I9000 using Tapatalk 2



  • 64x64



  • UPPPPPPP



  • Up, une idée ?


  • Modérateurs

    Je ne vois pas trop d'où vient le problème. Je vais regarder ça plus en détails demain.

    Sent from my GT-I9000 using Tapatalk 2



  • Ok (désolé pour la réponse un peu tardive) et merci  🙂

    EDIT :
    Alors j'ai réussi à faire rendre la barre vide ou pleine mais pas autrement. Je cherche toujours…

    DOUBLE EDIT :
    C'est bon tout marche, un simple cast en float a tout solutionné.

    Code mis à jour :

    
    if(event.isCancelable() || event.type != ElementType.EXPERIENCE)
    
    {
    
    }
    else
    {
    int mX = event.resolution.getScaledWidth();
                int mY = event.resolution.getScaledHeight();
                float pixel = 1/64F;
                byte mbar_length = 94, mbar_height = 9;
                byte bar_length = 100, bar_height = 15;
                byte tex_mana_length = 60;
    
                PlayerData dat = PlayerData.get(this.mc.thePlayer);
                double charge = ((float)dat.getMana()/dat.getPlayerMaxMana()) * mbar_length;
                double tex_charge = ((float)dat.getMana()/dat.getPlayerMaxMana()) * tex_mana_length;
    
                GL11.glPushMatrix();
                GL11.glDisable(GL11.GL_LIGHTING);
                this.mc.renderEngine.bindTexture(gui_mana);
    
                Tessellator tess = Tessellator.instance;
                tess.startDrawingQuads();
                {
                // Bar
                tess.addVertexWithUV(mX - 110, mY - 25, -1, 0*pixel, 0*pixel);
                tess.addVertexWithUV(mX - 110, mY - 10, -1, 0*pixel, 9*pixel);
                tess.addVertexWithUV(mX - 10, mY - 10, -1, 64*pixel, 9*pixel);
                tess.addVertexWithUV(mX - 10, mY - 25, -1, 64*pixel, 0*pixel);
    
                // Mana
                tess.addVertexWithUV(mX - 107, mY - 22, 0, 0*pixel, 9*pixel);
                tess.addVertexWithUV(mX - 107, mY - 13, 0, 0*pixel, 14*pixel);
                tess.addVertexWithUV((mX - 107) + charge, mY - 13, 0, tex_charge*pixel, 14*pixel);
                tess.addVertexWithUV((mX - 107) + charge, mY - 22, 0, tex_charge*pixel, 9*pixel);
                }
                tess.draw();
    
                GL11.glEnable(GL11.GL_DEPTH_TEST);
                GL11.glEnable(GL11.GL_ALPHA_TEST);
                GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F);
                GL11.glPopMatrix();
    
                mc.fontRenderer.drawStringWithShadow("Lvl :", mX - 50, 5, new Color(255, 255, 255).getRGB());
                mc.fontRenderer.drawStringWithShadow("XP :", mX - 107, 15, new Color(255, 255, 255).getRGB());
                mc.fontRenderer.drawStringWithShadow("100", mX - 25, 5, new Color(255, 255, 255).getRGB());
                mc.fontRenderer.drawStringWithShadow("500000/500000", mX - 85, 15, new Color(255, 255, 255).getRGB());
    }