Posted April 6, 201411 yr Ive made a level bar that currently shows the level of the player and text on the bar that shows the number of the level: http://prntscr.com/37nwjw But it doesn't fill up like the experience bar (It fills up then it will level up). It currently just fills up the whole bar according the the level. I mean that the maximum level is 245, so if the player level is 122 the bar would be halfway full. I want it to act like the experience bar with how it will fill up then you will level up The is the current code that i have Gui: private static void levelUp(EntityPlayer p){ Minecraft mc = Minecraft.getMinecraft(); ScaledResolution sc = new ScaledResolution(mc.gameSettings, mc.displayWidth, mc.displayHeight); ExtendedPlayer props = ExtendedPlayer.get(p); GuiIngame g = mc.ingameGUI; int h = sc.getScaledHeight(); int w = sc.getScaledWidth(); int h1 = h - Config.levelHeight; int w1 = w - Config.levelWidth; int maxLevel = DataHelper.getMaxLevel(); int level = props.getLevel(); if(maxLevel > 0){ g.drawTexturedModalRect(w1, h1, 0, 0, 256, 19); if(level > 0){ g.drawTexturedModalRect(w1 + 5, h1 + 5, 5, 24, level, 33); } } if(level >= maxLevel){ mc.fontRenderer.drawString(DovakiinAPI.GOLD + "Lv: " + level + " (Max)", w1 + 100, h1 + 6, 0, false); }else{ mc.fontRenderer.drawString(DovakiinAPI.GOLD + "Lv: " + level, w1 + 118, h1 + 6, 0, false); } String s = "Coins: " + props.getCoins(p); mc.fontRenderer.drawString(DovakiinAPI.GOLD + s, w1 + 110, h1 + 20, 0, false); } If anyone could help, that would be great! Former developer for DivineRPG, Pixelmon and now the maker of Essence of the Gods
April 6, 201411 yr You need to tell us some things. What causes your level bar to go up? (Is it coins?). How many of those things (coins?) does it take to level up. If it's not coins, how do you get the amount of those things. Lead DivineRPG Developer
April 8, 201411 yr Author Its just killing mobs that levels you up Former developer for DivineRPG, Pixelmon and now the maker of Essence of the Gods
April 8, 201411 yr First, you need a texture to represent the full bar that will render over top of the background image, if any. Let's assume your full xp bar texture is 50 pixels in width, then you can calculate the amount to draw as: // currentXP is the current amount the player has // maxXP is the maximum amount the player can have before increasing in level int xp_width = (currentXP / maxXP) * 50; drawTexturedModalRect(xPos, yPos, texturePosX, texturePosY, xp_width, textureHeight); Basically you are drawing your texture as normal, but restricting the width to a proportional amount. http://i.imgur.com/NdrFdld.png[/img]
April 8, 201411 yr First, you need a texture to represent the full bar that will render over top of the background image, if any. Let's assume your full xp bar texture is 50 pixels in width, then you can calculate the amount to draw as: // currentXP is the current amount the player has // maxXP is the maximum amount the player can have before increasing in level int xp_width = (currentXP / maxXP) * 50; drawTexturedModalRect(xPos, yPos, texturePosX, texturePosY, xp_width, textureHeight); Basically you are drawing your texture as normal, but restricting the width to a proportional amount. Assuming maxXP is a float/double. If it isn't, you do an integer division and thus only return 0 until currentXP (which can be an integer) reaches maxXP. Don't ask for support per PM! They'll get ignored! | If a post helped you, click the "Thank You" button at the top right corner of said post! | mah twitter This thread makes me sad because people just post copy-paste-ready code when it's obvious that the OP has little to no programming experience. This is not how learning works.
April 8, 201411 yr First, you need a texture to represent the full bar that will render over top of the background image, if any. Let's assume your full xp bar texture is 50 pixels in width, then you can calculate the amount to draw as: // currentXP is the current amount the player has // maxXP is the maximum amount the player can have before increasing in level int xp_width = (currentXP / maxXP) * 50; drawTexturedModalRect(xPos, yPos, texturePosX, texturePosY, xp_width, textureHeight); Basically you are drawing your texture as normal, but restricting the width to a proportional amount. Assuming maxXP is a float/double. If it isn't, you do an integer division and thus only return 0 until currentXP (which can be an integer) reaches maxXP. Right. I forgot to mention you need to cast your int to float when doing the division, in case you weren't already aware of that. http://i.imgur.com/NdrFdld.png[/img]
April 8, 201411 yr Author I can't cast it to a float because it has to be an integer other wise i will get an error.. Former developer for DivineRPG, Pixelmon and now the maker of Essence of the Gods
April 8, 201411 yr Author As soon as I'm level 10, the bar will fill up, other than that, the bar wont show any level: http://prntscr.com/3826le private static void levelUp(EntityPlayer p){ Minecraft mc = Minecraft.getMinecraft(); ScaledResolution sc = new ScaledResolution(mc.gameSettings, mc.displayWidth, mc.displayHeight); ExtendedPlayer props = ExtendedPlayer.get(p); GuiIngame g = mc.ingameGUI; int h = sc.getScaledHeight(); int w = sc.getScaledWidth(); int h1 = h - Config.levelHeight; int w1 = w - Config.levelWidth; int maxLevel = DataHelper.getMaxLevel(); int level = props.getLevel(); int levelUp = 10; int levelWidth = (level / levelUp) * 245; if(maxLevel > 0){ g.drawTexturedModalRect(w1, h1, 0, 0, 256, 19); if(level > 0){ g.drawTexturedModalRect(w1 + 5, h1 + 5, 5, 24, levelWidth, 33); } } if(level >= maxLevel){ mc.fontRenderer.drawString(DovakiinAPI.GOLD + "Lv: " + level + " (Max)", w1 + 100, h1 + 6, 0, false); }else{ mc.fontRenderer.drawString(DovakiinAPI.GOLD + "Lv: " + level, w1 + 118, h1 + 6, 0, false); } String s = "Coins: " + props.getCoins(p); mc.fontRenderer.drawString(DovakiinAPI.GOLD + s, w1 + 110, h1 + 20, 0, false); } Former developer for DivineRPG, Pixelmon and now the maker of Essence of the Gods
April 8, 201411 yr Like SanAndreas and diesieben07 pointed out, and I forgot to mention explicitly, cast to float during division, and back to int for your value: int xp_width = (int) ((float) xp / (float) max) * 50); http://i.imgur.com/NdrFdld.png[/img]
April 8, 201411 yr Author Okay... So now its acting like lv 10 is the max level (fills it all the way up when its level 10, so when its lv 5 it is 1/2 full) Former developer for DivineRPG, Pixelmon and now the maker of Essence of the Gods
April 8, 201411 yr Okay... So now its acting like lv 10 is the max level (fills it all the way up when its level 10, so when its lv 5 it is 1/2 full) It would help us help you if you posted your code. Also, by "max", I meant the maximum value your xp bar should hold, so if you need 100 kills to gain a level, max = 100, and kills is obviously the number of kills the player currently has. ((float) current_player_kills / 100F) * 50F would give you a scale of 2 kills per pixel. http://i.imgur.com/NdrFdld.png[/img]
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.