[1.7.10] Problème affichage GUI custom



  • Bonjour,

    Je poste aujourd'hui afin d'espérer trouver une solution à mon problème.
    J'ai crée un GUI permettant d'afficher des informations sur un véhicule Flan's Mod, celui-ci fonctionne très bien, aucun problème n'est à déplorer.

    Cependant, il y a un soucis sur l'affichage du menu en lui-même, c'est-à-dire qu'en fait le menu s'affiche avec un fond blanc que je ne pourrai expliquer (la texture est bien en .png et ne possède aucun fond).

    C'est assez inexplicable et à ce jour je n'ai trouvé encore aucune solution.
    Si quelqu'un pourrait me venir en aide.

    Ci-dessous, je poste le code correspondant en enlevant quelques parties, ainsi qu'une photo du menu en jeu.

    Merci d'avance.

    0_1531757166736_2018-07-16_18.05.16.png

    Code :

    package com.flansmod.client.gui;
    
    import (...)
    
    public class GuiDriveableController extends GuiScreen
    {
        private IControllable plane;
        private boolean leftMouseHeld;
        private boolean rightMouseHeld;
        private ArrayList<DriveablePart> partsToDraw = new ArrayList<DriveablePart>();
        private ArrayList<Integer> wheels = new ArrayList<Integer>();
    
        public GuiDriveableController(IControllable thePlane)
        {
            super();
            plane = thePlane;
            speedCacheTime = thePlane instanceof EntitySeat ? 0 : -1;
            if (thePlane instanceof EntitySeat) {
                EntitySeat driving = (EntitySeat)thePlane;
            for(DriveablePart part : driving.driveable.getDriveableData().parts.values())
            {
                //Check to see if the part is actually damageable
                if(part.maxHealth > 0)
                {
                    //Add it to the list of parts to draw
                    partsToDraw.add(part);
                    if (isWheel(part)) {
                        wheels.add(part.health);
                    }
                        
                }
            }
            }
        }
    
        @Override
        public void initGui()
        {
            if(mc.gameSettings.thirdPersonView == 1)
                mc.renderViewEntity = (plane.getCamera() == null ? mc.thePlayer : plane.getCamera());
        }
    
        @Override
        public void onGuiClosed()
        {
            mc.mouseHelper.ungrabMouseCursor();
            mc.renderViewEntity = mc.thePlayer;
        }
    
        @Override
        public void handleMouseInput()
        {
            EntityPlayer player = (EntityPlayer)plane.getControllingEntity();
            if(player != mc.thePlayer)
            {
                mc.displayGuiScreen(null);
                return;
            }
    
            int dWheel = Mouse.getDWheel();
            if(dWheel != 0)
            {
                player.inventory.changeCurrentItem(dWheel);
            }
    
            // Right mouse. Fires shells, drops bombs. Is not a holding thing
            if(Mouse.isButtonDown(1))
                plane.pressKey(8, player);
    
            if(!leftMouseHeld && Mouse.isButtonDown(0)) // Left mouse, for MGs. Is a holding thing
            {
                leftMouseHeld = true;
                plane.updateKeyHeldState(9, true);
            }
            if(leftMouseHeld && !Mouse.isButtonDown(0))
            {
                leftMouseHeld = false;
                plane.updateKeyHeldState(9, false);
            }
            if(!rightMouseHeld && Mouse.isButtonDown(1)) // Right mouse
            {
                rightMouseHeld = true;
                plane.updateKeyHeldState(8, true);
            }
            if(rightMouseHeld && !Mouse.isButtonDown(1))
            {
                rightMouseHeld = false;
                plane.updateKeyHeldState(8, false);
            }
        }
    
        @Override
        protected void keyTyped(char c, int i)
        {
            if(i == 1)
            {
                mc.displayGuiScreen(null);
                mc.displayInGameMenu();
            }
            if(i == 59)
            {
                mc.gameSettings.hideGUI = !mc.gameSettings.hideGUI;
            }
            if(i == 61)
            {
                mc.gameSettings.showDebugInfo = !mc.gameSettings.showDebugInfo;
            }
            if(i == 63)
            {
                mc.gameSettings.thirdPersonView = (mc.gameSettings.thirdPersonView + 1) % 3;
                if(mc.gameSettings.thirdPersonView == 1)
                    mc.renderViewEntity = (plane.getCamera() == null ? mc.thePlayer : plane.getCamera());
                else
                    mc.renderViewEntity = mc.thePlayer;
            }
            if(i == 66)
            {
                mc.gameSettings.smoothCamera = !mc.gameSettings.smoothCamera;
            }
            if(i == mc.gameSettings.keyBindInventory.getKeyCode())
            {
                mc.displayGuiScreen(new GuiInventory(mc.thePlayer));
            }
            if(i == mc.gameSettings.keyBindDrop.getKeyCode())
            {
                // mc.thePlayer.dropCurrentItem();
            }
            if(i == mc.gameSettings.keyBindChat.getKeyCode())
            {
                mc.displayGuiScreen(new GuiChat());
            }
            if(i == mc.gameSettings.keyBindCommand.getKeyCode())
            {
                mc.displayGuiScreen(new GuiChat("/"));
            }
            /*
             * if(i == KeyInputHandler.debugKey.getKeyCode())
             * {
             * FlansMod.DEBUG = !FlansMod.DEBUG;
             * }
             */
            if(i == KeyInputHandler.reloadModelsKey.getKeyCode())
            {
                FlansModClient.reloadModels(false);
            }
            /*
             * else if(i == KeyInputHandler.enginePower.getKeyCode())
             * {
             * plane.pressKey(19, (EntityPlayer)plane.getControllingEntity());
             * }
             */
        }
    
        @Override
        public void updateScreen()
        {
            if(mc.gameSettings.thirdPersonView == 1)
                mc.renderViewEntity = (plane.getCamera() == null ? mc.thePlayer : plane.getCamera());
    
            else
                mc.renderViewEntity = mc.thePlayer;
    
            if(speedCacheTime != -1)
            {
                {
                    lastCalculatedSpeed = calculateSpeed((EntitySeat)plane);
                }
            }
        }
    
        @Override
        public void handleInput()
        {
            EntityPlayer player = (EntityPlayer)plane.getControllingEntity();
            if(player != mc.thePlayer)
            {
                mc.displayGuiScreen(null);
                return;
            }
            if(!Mouse.isGrabbed())
            {
                mc.mouseHelper.grabMouseCursor();
            }
            handleMouseInput();
            for(; Keyboard.next(); handleKeyboardInput())
            {}
    
            int l = Mouse.getDX();
            int m = Mouse.getDY();
    
            plane.onMouseMoved(l, m);
    
            if(plane != null && !plane.isDead() && plane.getControllingEntity() != null && plane.getControllingEntity() instanceof EntityPlayer)
            {
                if(FlansMod.proxy.keyDown(mc.gameSettings.keyBindForward.getKeyCode()))// KeyInputHandler.accelerateKey.getKeyCode()))
                {
                    plane.pressKey(0, player);
                }
                if(FlansMod.proxy.keyDown(mc.gameSettings.keyBindBack.getKeyCode()))// KeyInputHandler.decelerateKey.getKeyCode()))
                {
                    plane.pressKey(1, player);
                }
                if(FlansMod.proxy.keyDown(mc.gameSettings.keyBindLeft.getKeyCode()))// KeyInputHandler.leftKey.getKeyCode()))
                {
                    plane.pressKey(2, player);
                }
                if(FlansMod.proxy.keyDown(mc.gameSettings.keyBindRight.getKeyCode()))// KeyInputHandler.rightKey.getKeyCode()))
                {
                    plane.pressKey(3, player);
                }
                if(FlansMod.proxy.keyDown(mc.gameSettings.keyBindJump.getKeyCode()))// KeyInputHandler.upKey.getKeyCode()))
                {
                    plane.pressKey(4, player);
                }
                if(FlansMod.proxy.keyDown(KeyInputHandler.downKey.getKeyCode()))
                {
                    plane.pressKey(5, player);
                }
                if(FlansMod.proxy.keyDown(mc.gameSettings.keyBindSneak.getKeyCode()))// KeyInputHandler.exitKey.getKeyCode()))
                {
                    plane.pressKey(6, player);
                }
                if(FlansMod.proxy.keyDown(KeyInputHandler.inventoryKey.getKeyCode()))
                {
                    plane.pressKey(7, player);
                }
                if(FlansMod.proxy.keyDown(KeyInputHandler.bombKey.getKeyCode()))
                {
                    plane.pressKey(8, player);
                }
                if(FlansMod.proxy.keyDown(KeyInputHandler.gunKey.getKeyCode()))
                {
                    plane.pressKey(9, player);
                }
                if(FlansMod.proxy.keyDown(KeyInputHandler.controlSwitchKey.getKeyCode()))
                {
                    plane.pressKey(10, player);
                }
                if(FlansMod.proxy.keyDown(KeyInputHandler.leftRollKey.getKeyCode()))
                {
                    plane.pressKey(11, player);
                }
                if(FlansMod.proxy.keyDown(KeyInputHandler.rightRollKey.getKeyCode()))
                {
                    plane.pressKey(12, player);
                }
                if(FlansMod.proxy.keyDown(KeyInputHandler.gearKey.getKeyCode()))
                {
                    plane.pressKey(13, player);
                }
                if(FlansMod.proxy.keyDown(KeyInputHandler.doorKey.getKeyCode()))
                {
                    plane.pressKey(14, player);
                }
                if(FlansMod.proxy.keyDown(KeyInputHandler.modeKey.getKeyCode()))
                {
                    plane.pressKey(15, player);
                }
                // if(FlansMod.proxy.keyDown(KeyInputHandler.trimKey.getKeyCode()))
                // {
                // plane.pressKey(16, player);
                // }
                if(FlansMod.proxy.keyDown(KeyInputHandler.flareKey.getKeyCode()))
                {
                    plane.pressKey(18, player);
                }
                if(FlansMod.proxy.keyDown(KeyInputHandler.enginePower.getKeyCode()))
                {
                    plane.pressKey(19, player);
                }
    
            }
            else
            {
                mc.displayGuiScreen(null);
            }
        }
    
        private void drawFuelString(EntityDriveable d, int x, int y)
        {
            (...)
        }
    
        private int lastCalculatedSpeed, speedCacheTime;
    
        private int calculateSpeed(EntitySeat s)
        {
            (...)
        }
    
        @Override
        public void drawScreen(int p_73863_1_, int p_73863_2_, float p_73863_3_)
        {
            
            super.drawScreen(p_73863_1_, p_73863_2_, p_73863_3_);
            if(plane instanceof EntitySeat)
            {
                EntitySeat s = (EntitySeat)plane;
                if(s.driver)
                {
                    EntityDriveable d = s.driveable;
                    
                    mc.renderEngine.bindTexture(new ResourceLocation("flansmod", "gui/hud.png"));
                    GL11.glColor4f(1, 1, 1, 1);
                    GL11.glPushMatrix();
                    GL11.glScaled(1.2, 1.2, 1);
                    drawTexturedModalRect(0, 0, 0, 0, 256, 256);
                    GL11.glPopMatrix();
    
                    mc.fontRenderer.drawString(d.getDriveableType().name, 10, 15, Color.WHITE.getRGB());
                    mc.fontRenderer.drawString(lastCalculatedSpeed + " km/h", 180, 57, Color.WHITE.getRGB());
    
                    drawFuelString(d, 10, 40);
                    
                    
                  (...)
                    
                }
                
                
            }
    
        }
        
        public boolean isWheel(DriveablePart part) {
            (...)
        }
    
        @Override
        public void drawBackground(int i)
        {
            // Plane gauges overlay
        }
    
        @Override
        public boolean doesGuiPauseGame()
        {
            return false;
        }
    }
    
    


  • @hyperkut a dit dans [1.7.10] Problème affichage GUI custom :

    drawTexturedModalRect(0, 0, 0, 0, 256, 256);

    Je pense que l'erreur viens de cette ligne : tu dessines ton image dans une zone de 256x256, ce qui est plus grand que ton image et donc Minecraft remplis le reste par du blanc.
    Il faudrait que tu essaye de récupérer la vraie taille de ta texture.

    Après si tu veut tricher tu peut remplacer ton glColor4f(1, 1, 1, 1); par glColor4f(1f, 1f, 1f, 0f);, ce qui normalement devrait changer la couleur de fond en transparent.

    Cordialement,
    ShE3py.



  • Merci pour ta réponse.

    Je viens d'essayer et le soucis est exactement le même.
    La taille réelle de la texture est 1024x1024.

    Je comprend toujours pas 🤔



  • La taille de la texture dans sont fichier est en pixels, mais elle ne garde pas les mêmes dimensions une fois rendue. Tu peut tenter de modifier 256, en le doublant par exemple pour voir si le rectangle blanc double bien aussi.

    Je vais tenter de trouver la fonction pour récupérer la taille de la texture une fois rendus, mon forge est en 1.12.2 mais je ne pense pas que la manière devrait changer.
    J'édit quand j'ai la fonction.



  • Ok super merci.

    Sinon voici ce que cela fait en 512x512 :

    0_1531759009716_2018-07-16_18.35.01.png



  • @hyperkut a dit :

    La taille réelle de la texture est 1024x1024.

    Convertis ta texture en 256x256, c'est la taille avec laquelle Minecraft traite les textures.
    Remets drawTexturedModalRect(0, 0, 0, 0, 256, 256), et renvois un screen.



  • Voici ce que ça fait selon ce que tu m'as dis

    0_1531764305135_2018-07-16_20.04.34.png


  • Moddeurs confirmés Rédacteurs Administrateurs

    Salut,
    La fonction drawTexturedModalRect a pour argument : point x de départ sur l'écran, point y de départ sur l'écran, point x de départ sur le fichier de texture, point y sur le fichier de texture, largeur, hauteur)
    Sur ton fichier de 512x512, ta texture ne commence pas en 0,0 (en haut à gauche) donc déjà il faut que tu adaptes les deux 0 du milieu.
    Il faudra aussi changer les deux premiers 0 si tu veux que ce soit centré sur l'écran.

    Et enfin, les deux derniers 256 doivent être remplacé par la taille un pixel du morceau de texture que tu veux draw.



  • Ce que tu me dis c'est pour ajuster la texture sur l'écran c'est bien ça ? Est-ce que cela résoudra le problème de fond blanc ?


  • Moddeurs confirmés Rédacteurs Administrateurs

    Tu as actuellement un fond blanc car tu draw les pixels blanche.
    Si tu draw seulement la partie coloré tu ne les aura plus.



  • Problème résolu 😉 Merci !


Log in to reply