Créer un Gui Overlay



  • Bonjour,
    Alors voilà, j'ai voulu créer un Gui Overlay. J'ai donc cherché dans les classes de Minecraft et ai vu la classe GuiIngame. Voyant que GuiForgeIngame héritait de cette classe, et que visiblement le code de rendu de l'interface utilisateur était présent, j'ai créé une class GuiCustomOverlay et ai extend de GuiIngame. Seulement voilà, je ne vois pas trop comment le dessiner (appeler le GUI).

    J'essaie d'utiliser l'event RenderGameOverlay, mais je ne vois quel code utiliser.

    Pouvez-vous éclairer ma lanterne ?


  • Administrateurs

    Salut,
    Il ne faut pas créer une classe extends GuiForgeIngame, il faut entièrement passer l'event RenderGameOverlay. Tu veux faire quoi exactement ?



  • Faire un rendu de progress bar (ça je m'en chargerai avec OpenGL et les magnifiques glVertex). Je viens aussi d'essayer quelque chose, mais ça me change la couleur du curseur (drôle mais bon…)


  • Administrateurs

    En effet cette event est capricieux, ça cause des problèmes.
    Ajoute ces deux conditions :
    https://github.com/FFMT/nanotech_mod/blob/master/common/fr/mcnanotech/kevin_68/nanotechmod/main/event/RenderEvent.java#L34-L39
    Normalement ça règlera le problème.



  • Ah merci je teste 🙂

    PS: Dans ce code, au lieu de désactiver puis réactiver  les fonctions de LWJGL, il suffit de se servir des GL11.glPushMatrix() et GL11.glPopMatrix() non ?

    EDIT :
    J'essaie de dessiner avec LWJGL mais ça marche pas 😞 :

    
    int mX = event.resolution.getScaledWidth();
    
                int mY = event.resolution.getScaledHeight();
                GL11.glPushMatrix();
                GL11.glEnable(GL11.GL_BLEND);
                GL11.glColor4f(0, (1/255)*100, 1.0F, 1.0F);
                GL11.glDisable(GL11.GL_LIGHTING);
                GL11.glDisable(GL11.GL_DEPTH_TEST);
                GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA);
    
                GL11.glBegin(GL11.GL_QUADS);
                {
                GL11.glVertex2f(100, 0);
                GL11.glVertex2f(100, 10);
                GL11.glVertex2f(0, 10);
                GL11.glVertex2f(0, 0);
                }
                GL11.glEnd();
                GL11.glPopMatrix();
    
    


  • Up, une idée ?


  • Administrateurs

    Via un Tessellator ?



  • J'ai essayé mais ça marchait pas. Je vais réessayer au cas où mais bon…

    EDIT :
    Je confirme, ça ne marche pas, mais le code s'exécute (System.out.println).

    Code :

    
    @SubscribeEvent
    
    public void onRenderGameOverlayEvent(RenderGameOverlayEvent event)
    {
          if(event.isCancelable() || event.type != ElementType.EXPERIENCE)
          { }
          else
          {
                int mX = event.resolution.getScaledWidth();
                int mY = event.resolution.getScaledHeight();
                GL11.glPushMatrix();
                GL11.glEnable(GL11.GL_BLEND);
                GL11.glColor3f(0, (1/255)*100, 1.0F);
                GL11.glDisable(GL11.GL_LIGHTING);
                GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA);
    
                Tessellator tess = Tessellator.instance;
                tess.startDrawingQuads();
                {
                      tess.addVertex(0, 0, 0);
                      tess.addVertex(0, 30, 0);
                      tess.addVertex(100, 30, 0);
                      tess.addVertex(100, 0, 0);
                }
                tess.draw();
                System.out.println("Test ---------");
                GL11.glPopMatrix();
          }
    }
    
    


  • Up, help svp


  • Administrateurs

    Essaye sans la ligne             GL11.glPushMatrix(); et             GL11.glPopMatrix();



  • ça ne change rien 😞


  • Administrateurs

    Hum faudrait attendre le message de @xavpok ou quelqu'un d'autre qui s'y connait plus en openGL.


  • Modérateurs

    Premierement, tu donnes juste des coordonnees xyz avec tess.addVertex, or sans coordonees uv (pareil que 0,0), OpenGL va charger le pixel à 0,0 sur la texture. Etant donné que tu es en olein milieu d'un rendu, la texture a surement un pixel transparent à 0,0

    Deuxiement, et là c'est plus de la stabilité qu'autre chose, essaie de mettre des glDisable après tes appels quand tu fais des glEnable avant

    Sent from my GT-I9000 using Tapatalk 2



  • Un grand merci, ça marche 🙂

    Sujet Résolu.