• Register
    • Login
    • Search
    • Recent
    • Tags
    • Popular
    • Users
    • Groups

    Solved DrawString et Overlay

    1.7.x
    1.7.10
    5
    33
    3506
    Loading More Posts
    • Oldest to Newest
    • Newest to Oldest
    • Most Votes
    Reply
    • Reply as topic
    Log in to reply
    This topic has been deleted. Only users with topic management privileges can see it.
    • Folgansky
      Folgansky Correcteurs last edited by

      Bonjour les gens, j’aimerais me servir correctement des overlays.

      Actuellement je me sers d’un bout de code bien utile mais trop spécifique.
      En effet il étire le png pour l’afficher sur l’ensemble de l’écran du joueur (conçu pour afficher la vue d’un binoculaire type jumelles)

      J’aimerais savoir si déjà je ne me trompe pas quand je pense qu’il est possible d’afficher une image (overlay donc) sur l’écran du joueur sans cacher les autres affichages (type nourriture/armure/action barre etc) et surtout l’afficher à l’endroit que l’on veut et une image de la taille que l’on veut.

      Donc actuellement j’ai cette méthode:
      :::

      public static void renderTextureOverlay(ResourceLocation s, float f)
             {
                 Minecraft minecraft = FMLClientHandler.instance().getClient();
                 ScaledResolution scaledresolution = new ScaledResolution(minecraft, minecraft.displayWidth, minecraft.displayHeight);
                 int i = scaledresolution.getScaledWidth();
                 int j = scaledresolution.getScaledHeight();
                 GL11.glEnable(GL11.GL_BLEND);
                 GL11.glDisable(GL11.GL_DEPTH_TEST);
                 GL11.glDepthMask(false);
                 GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA);
                 GL11.glColor4f(1.0F, 1.0F, 1.0F, f);
                 GL11.glDisable(GL11.GL_ALPHA_TEST);
                 minecraft.getTextureManager().bindTexture(s);
                 Tessellator tessellator = Tessellator.instance;
                 tessellator.startDrawingQuads();
                 tessellator.addVertexWithUV(0.0D, j, -90D, 0.0D, 1.0D);
                 tessellator.addVertexWithUV(i, j, -90D, 1.0D, 1.0D);
                 tessellator.addVertexWithUV(i, 0.0D, -90D, 1.0D, 0.0D);
                 tessellator.addVertexWithUV(0.0D, 0.0D, -90D, 0.0D, 0.0D);
                 tessellator.draw();
                 GL11.glDepthMask(true);
                 GL11.glEnable(GL11.GL_DEPTH_TEST);
                 GL11.glEnable(GL11.GL_ALPHA_TEST);
                 GL11.glColor4f(1.0F, 1.0F, 1.0F, f);
             }
      

      :::

      Ensuite en ayant auparavant déclaré :

      public static final ResourceLocation
      

      Je peux draw mon overlay dans ma méthode event “renderGameOverlayEvent”, avec :

      renderTextureOverlay(zoomOverlay, 1.0F);
      

      Donc au final j’aimerais apprendre comment déclarer une nouvelle méthode renderTextureOverlay1 par exemple
      Avec dedans les conditions nécessaires pour définir mon overlay.

      C’est limite un mini tuto que je demande, si c’est trop compliqué, j’aimerais simplement avoir vos avis.


      Autre petite chose liée à l’affichage en jeu

      Dans ma méthode “renderGameOverlayEvent”, en même temps que j’affiche mon overlay, j’affiche un string:

      str = EnumChatFormatting.DARK_GREEN + String.valueOf(itemstack.getTagCompound().getInteger("charge") + "/50");
          x = 383;
          y = 217;
          Minecraft.getMinecraft().fontRenderer.drawString(str, x, y, 0);
      

      Qui a la fâcheuse habitude de modifier la **couleur **des autres overlays (nourriture, armure etc) suivant la valeur du int ou de l’EnumChatFormatting si présent.

      Du coup j’aimerais savoir si c’est moi qui draw mal ou si c’est inévitable.

      1 Reply Last reply Reply Quote 0
      • AymericRed
        AymericRed last edited by

        Pas le temps de regarder en détail mais sinon pour la couleur, il faut que tu mettesEnumChatFormatting.RESET (pas sur) après ton texte

        Si je vous ai aidé, n'oubliez pas d’être heureux, j'aiderai encore +

        AymericRed, moddeur expérimenté qui aide sur ce forum et qui peut accepter de faire un mod Forge rémunéré de temps en temps.

        Mes tutos : Table de craft, plugin NEI, plugin JEI, modifier l'overlay
        Je suis un membre apprécié et joueur, j'ai déjà obtenu 6 points de réputation.

        1 Reply Last reply Reply Quote 0
        • Folgansky
          Folgansky Correcteurs last edited by

          Mettre le RESET annule bien la couleur venant du String mais pas celle du DrawString.
          Du coup je peux avoir mon string en vert qui fait bugguer en bleu le reste par exemple =p

          1 Reply Last reply Reply Quote 0
          • AymericRed
            AymericRed last edited by

            Ah d’accord, ben j’ai pas d’autre solution ^^

            Si je vous ai aidé, n'oubliez pas d’être heureux, j'aiderai encore +

            AymericRed, moddeur expérimenté qui aide sur ce forum et qui peut accepter de faire un mod Forge rémunéré de temps en temps.

            Mes tutos : Table de craft, plugin NEI, plugin JEI, modifier l'overlay
            Je suis un membre apprécié et joueur, j'ai déjà obtenu 6 points de réputation.

            1 Reply Last reply Reply Quote 0
            • SCAREX
              SCAREX last edited by

              Je comprends pas trop où est le problème, tu ne peux pas draw dans le RenderGameOverlayEvent ?

              Site web contenant mes scripts : http://SCAREXgaming.github.io

              Pas de demandes de support par MP ni par skype SVP.
              Je n'accepte sur skype que l…

              1 Reply Last reply Reply Quote 0
              • Folgansky
                Folgansky Correcteurs last edited by

                Mon problème c’est que je ne sais afficher qu’un overlay qui prend tout l’écran en gros.

                Du coup ça cache toutes les infos comme l’armure, la bouffe etc

                1 Reply Last reply Reply Quote 0
                • SCAREX
                  SCAREX last edited by

                  Et pourquoi ne pas recopier la fonction drawTextureModalRect dans la classe Gui ?

                  Site web contenant mes scripts : http://SCAREXgaming.github.io

                  Pas de demandes de support par MP ni par skype SVP.
                  Je n'accepte sur skype que l…

                  1 Reply Last reply Reply Quote 0
                  • Folgansky
                    Folgansky Correcteurs last edited by

                    Parce que je n’ai pas vraiment idée de quoi tu me parles ^^’
                    J’ai des lacunes évidentes.

                    M’enfin, si j’arrive à résoudre le problème de l’affichage de mon String, je pourrais me passer de l’affichage d’overlay (ce qui m’évitera de nombreuses heures à chercher comment afficher correctement les overlays)

                    1 Reply Last reply Reply Quote 0
                    • SCAREX
                      SCAREX last edited by

                      Cherche une fonction appelée drawTextureModalRect dans la classe Gui de Minecraft ou copie cette fonction (c’est la même mais avec les paramètres renommées pour une meilleure compréhension) :

                      @SideOnly(Side.CLIENT)
                      public static void drawTexturedModalRect(double x, double y, double textureX, double textureY, double width, double height) {
                      Tessellator tessellator = Tessellator.instance;
                      tessellator.startDrawingQuads();
                      tessellator.addVertexWithUV(x, y + height, 0F, textureX * 0.00390625F, (textureY + height) * 0.00390625F);
                      tessellator.addVertexWithUV(x + width, y + height, 0.0F, (textureX + width) * 0.00390625F, (textureY + height) * 0.00390625F);
                      tessellator.addVertexWithUV(x + width, y, 0F, (textureX + width) * 0.00390625F, textureY * 0.00390625F);
                      tessellator.addVertexWithUV(x, y, 0F, textureX * 0.00390625F, textureY * 0.00390625F);
                      tessellator.draw();
                      }
                      

                      Pour l’affichage de texte, je suppose que le problème c’est que le texte n’est pas affiché ?

                      Site web contenant mes scripts : http://SCAREXgaming.github.io

                      Pas de demandes de support par MP ni par skype SVP.
                      Je n'accepte sur skype que l…

                      1 Reply Last reply Reply Quote 0
                      • Folgansky
                        Folgansky Correcteurs last edited by

                        Non le problème concernant le drawString c’est qu’il modifie la couleur d’affichage de la nourriture et de l’armure

                        1 Reply Last reply Reply Quote 0
                        • SCAREX
                          SCAREX last edited by

                          Essaie de faire un GL11.glColor4f(0F, 0F, 0F, 1F) après le rendu, ça devrait enlever la couleur.

                          Site web contenant mes scripts : http://SCAREXgaming.github.io

                          Pas de demandes de support par MP ni par skype SVP.
                          Je n'accepte sur skype que l…

                          1 Reply Last reply Reply Quote 0
                          • robin4002
                            robin4002 Moddeurs confirmés Rédacteurs Administrateurs last edited by

                            Ou alors :

                            @SubscribeEvent
                            public void onRenderGameOverlay(RenderGameOverlayEvent.Post event)
                            {
                            if(event.type == RenderGameOverlayEvent.ElementType.TEXT)
                            {
                            // reste du code
                            
                            1 Reply Last reply Reply Quote 1
                            • Folgansky
                              Folgansky Correcteurs last edited by

                              Scarex, ton conseil fait que tout devient noir ^^
                              J’ai pas cherché à savoir si c’était le troisième int du drawString qui fait ça ou la ligne que tu m’as conseillé d’ajouter, en tout cas c’est pas ça.

                              Par contre ta condition marche robin.

                              Du coup au diable les overlays, je comprendrai un jour comment ça marche (oui comme ça en me réveillant un matin, la science infuse)

                              En tout cas merci à tous deux d’avoir passé un peu de votre temps sur ce post ^^

                              Edit:
                              Euh apparement mettre ta condition semble aussi résoudre mon problème d’overlay (et de transparence en fait), c’est parfait Oo

                              1 Reply Last reply Reply Quote 0
                              • Folgansky
                                Folgansky Correcteurs last edited by

                                J’aurais juste une dernière question du coup, concernant les paramètres.

                                Je fais comme ça actuellement:

                                
                                Minecraft minecraft = FMLClientHandler.instance().getClient();
                                ScaledResolution scaledresolution = new ScaledResolution(minecraft, minecraft.displayWidth, minecraft.displayHeight);
                                int i = scaledresolution.getScaledWidth() - 90;
                                int j = scaledresolution.getScaledHeight() - 10;
                                

                                Le soucis c’est que la position du String n’est pas la même en réduisant la taille de la fenêtre de jeu.
                                Comment remplacer les “moins quelquechose” pour que ce soit toujours placé au même endroit sur l’écran, peu importe la taille de la fenêtre de jeu, svp?

                                Edit:
                                Par exemple j’ai essayé comme ça:

                                int i = scaledresolution.getScaledWidth() * (92/100);
                                int j = scaledresolution.getScaledHeight() * (98/100);
                                

                                Visiblement cette triche sur le int ne plaît pas.
                                Au final le String se loge en PLS dans le coin en haut à gauche de l’écran au lieu d’aller tranquille dans le coin opposé en mode “no stress”.

                                1 Reply Last reply Reply Quote 0
                                • robin4002
                                  robin4002 Moddeurs confirmés Rédacteurs Administrateurs last edited by

                                  Déjà utilise event.resolution au lieu de faire une nouvelle instance de ScaledResolution.

                                  Si tu veux mettre le string en haut à droite il faut prendre la largeur de l’écran moins le décalage (5 ou 10) moins la largeur du texte. Il y a une fonction dans FontRenderer pour avoir la largeur du texte.

                                  1 Reply Last reply Reply Quote 0
                                  • Folgansky
                                    Folgansky Correcteurs last edited by

                                    Le soucis c’est justement le décalage.

                                    Des deux affichages, la seule différence c’est la taille de la fenêtre de jeu.
                                    Donc est-ce que c’est le paramètrage par défaut qui veut ça?
                                    Donc on ne pourrait rien y faire et les joueurs, qui joueraient en écran réduit, pourraientt avoir des superpositions de rendus

                                    Edit: Et ouki pour le event.resolution

                                    1 Reply Last reply Reply Quote 0
                                    • robin4002
                                      robin4002 Moddeurs confirmés Rédacteurs Administrateurs last edited by

                                      Suffit d’adapter le décalage en fonction de la largeur alors.

                                      1 Reply Last reply Reply Quote 0
                                      • Folgansky
                                        Folgansky Correcteurs last edited by

                                        Eh bien je définis la largeur avec:

                                        
                                        int i =  event.resolution.getScaledWidth() - 90;
                                        int j =  event.resolution.getScaledHeight() - 10;
                                        

                                        Sauf que justement si je suis en fenêtre réduite le -90 fera plus de décalage que si je me mets en plein écran.
                                        Aucun moyen que le décalage soit proportionnel également?

                                        1 Reply Last reply Reply Quote 0
                                        • robin4002
                                          robin4002 Moddeurs confirmés Rédacteurs Administrateurs last edited by

                                          Envoies moi ton code complet. Car ton i et ton j je ne sais pas ce que tu en fais x)

                                          1 Reply Last reply Reply Quote 0
                                          • Folgansky
                                            Folgansky Correcteurs last edited by

                                            La classe est longue et redondante mais voici un bout où on voit ce que tu me demandes:

                                            @SubscribeEvent
                                                public void renderGameOverlayEvent(RenderGameOverlayEvent event)
                                                {    
                                                     String str;
                                                      int i =  event.resolution.getScaledWidth() - 90;
                                                     int j =  event.resolution.getScaledHeight() - 10;
                                            […]
                                             if (event.type == RenderGameOverlayEvent.ElementType.TEXT && itemstack != null && itemstack.getItem() == ModPg2.itemPlasmaGun && Minecraft.getMinecraft().gameSettings.thirdPersonView == 0 && Minecraft.getMinecraft().currentScreen == null)
                                                     {        
                                                         if(itemstack.getTagCompound().getInteger("timerTir") >= 0 && itemstack.getTagCompound().getInteger("timerTir") <= 150)
                                                         {
                                                             str = EnumChatFormatting.DARK_GREEN + String.valueOf(itemstack.getTagCompound().getInteger("timerTir") + "/150");
                                                             Minecraft.getMinecraft().fontRenderer.drawString(str, i, j, 0);    
                                                         }
                                            […]
                                            
                                            
                                            1 Reply Last reply Reply Quote 0
                                            • 1
                                            • 2
                                            • 1 / 2
                                            • First post
                                              Last post
                                            Design by Woryk
                                            Contact / Mentions Légales

                                            MINECRAFT FORGE FRANCE © 2018

                                            Powered by NodeBB