Posted April 17, 201510 yr How do you "hook" a player arriving in a dimension? How would you continually fade a HUD element out? I assume this requires OpenGL, which I'm not very familiar with. HUD
April 17, 201510 yr How would you continually fade a HUD element out? I assume this requires OpenGL, which I'm not very familiar with. In your drawScreen() method of your GUI you would use a GL.11 alpha setting. I don't know much about GL.11 either but simply look up GL transparency, like at this link: http://relativity.net.au/gaming/java/Transparency.html. I think one approach is that you could create colors with increasing transparency and use those when you draw the GUI. There is probably another way to take the whole "matrix" and change it's transparency. Check out my tutorials here: http://jabelarminecraft.blogspot.com/
April 17, 201510 yr How do you "hook" a player arriving in a dimension? PlayerChangedDimensionEvent FML event, has from and to dimension. 1.7.10 is no longer supported by forge, you are on your own.
April 17, 201510 yr Author Alright, the only thing left is the blending...it's just not doing what I'm expecting due to my lack of knowledge of OGL, it's not automating at all. EntityPlayer player = Minecraft.getMinecraft().thePlayer; DLFileHandler.readConfig(); this.cardName = DLFileHandler.queryDimName(player.dimension); GL11.glDisable(GL11.GL_LIGHTING); this.mc.renderEngine.bindTexture(cardTexture); int cardBorder = 2; int cardOffset = 6; int cardWidth = 84; int cardHeight = 14; int color = 0xdcdcdc; this.drawTexturedModalRect(cardOffset, cardOffset, 0, 0, cardWidth, cardHeight); int stringWidth = mc.fontRenderer.getStringWidth(cardName); this.mc.fontRenderer.drawStringWithShadow(cardName, (((cardWidth - cardBorder - cardOffset) / 2) + 1) - (stringWidth / 3), 9, color); --this.cardTime; if(cardTime < 80) { GL11.glEnable(GL11.GL_BLEND); GL11.glBlendFunc(GL11.GL_SRC_COLOR, GL11.GL_ONE_MINUS_SRC_COLOR); GL11.glColor4f(0.5F, 0.5F, 0.5F, (float)this.cardTime / 80); } if(cardTime < 1) { cardTime = cardTimeMax; arrived = false; } This does nothing, it still just abruptly disappears, and there's no blending going on.
April 17, 201510 yr You need to call GL before you draw EDIT Also few things - when you finish (depending WHERE are you drawing things) you need to get back to previous state. Where are you drawing your cards? (From where*, my guess overlay event?) 1.7.10 is no longer supported by forge, you are on your own.
April 17, 201510 yr Author Yeah: HUD Edit: Ok, now the modal rect fades properly but the string doesn't :I @SubscribeEvent public void onRender(RenderGameOverlayEvent event) { if(event.isCancelable() || event.type != RenderGameOverlayEvent.ElementType.HOTBAR) { return; } if(arrived) { EntityPlayer player = Minecraft.getMinecraft().thePlayer; DLFileHandler.readConfig(); this.cardName = DLFileHandler.queryDimName(player.dimension); int cardBorder = 2; int cardOffset = 6; int cardWidth = 84; int cardHeight = 14; int color = 0xdcdcdc; int stringWidth = mc.fontRenderer.getStringWidth(cardName); --this.cardTime; if(this.cardTime >= 81) { GL11.glDisable(GL11.GL_LIGHTING); GL11.glEnable(GL11.GL_BLEND); GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA); GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); this.mc.renderEngine.bindTexture(cardTexture); this.drawTexturedModalRect(cardOffset, cardOffset, 0, 0, cardWidth, cardHeight); this.mc.fontRenderer.drawStringWithShadow(cardName, (((cardWidth - cardBorder - cardOffset) / 2) + 1) - (stringWidth / 3), 9, color); } if(this.cardTime < 81) { GL11.glDisable(GL11.GL_LIGHTING); GL11.glEnable(GL11.GL_BLEND); GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA); GL11.glColor4f(1.0F, 1.0F, 1.0F, (float)this.cardTime / 80); this.mc.renderEngine.bindTexture(cardTexture); this.drawTexturedModalRect(cardOffset, cardOffset, 0, 0, cardWidth, cardHeight); this.mc.fontRenderer.drawStringWithShadow(cardName, (((cardWidth - cardBorder - cardOffset) / 2) + 1) - (stringWidth / 3), 9, color); } if(cardTime < 1) { this.cardTime = this.cardTimeMax; arrived = false; } } }
April 18, 201510 yr I think you should set the color again right before the font render and change the alpha value passed into the color (the last parameter in the color 4f function) Check out my tutorials here: http://jabelarminecraft.blogspot.com/
April 18, 201510 yr Author Didn't work, still doesn't fade. I'm guessing I need to make my own FontRenderer and override all the drawString methods to fix this, since glColor4f is set inside the vanilla methods.
April 18, 201510 yr No you don't. I am CERTAIN that fading text using normal fontRenderer is possible as I archieved it accidentally while coding my entity labels. It's matter of some GL state/mode. I'll have look. 1.7.10 is no longer supported by forge, you are on your own.
April 18, 201510 yr No you don't. I am CERTAIN that fading text using normal fontRenderer is possible as I archieved it accidentally while coding my entity labels. It's matter of some GL state/mode. I'll have look. There may be another way, but if you look at the alpha field in FontRenderer it is set by taking some of the bits from the color passed into the drawString() method. There isn't any other manipulation of the alpha field (which is private and doesn't have a setter method). So I think my suggestion should work -- create a color that includes the alpha. Check out my tutorials here: http://jabelarminecraft.blogspot.com/
April 18, 201510 yr To make transperent things to blend (faiding - what is it?), use GL11.glEnable(GL11.gl_BLEND); and GL11.glDisable(GL11.gl_BLEND); This willdraw semi transparent things - semi transparent Check out my mods: BTAM Armor sets Avoid Exploding Creepers Tools compressor Anti Id Conflict Key bindings overhaul Colourfull blocks Invisi Zones
April 19, 201510 yr Author Did it manually: int Blue = 220; int Green = 220; int Red = 220; int Alpha = 255; int color = Blue + (Green << + (Red << 16) + (Alpha << 24); And then to automate: Alpha = (int)(cardTime * (255.0F/120.0F));
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.