/* * This file is part of Matter Overdrive * Copyright (c) 2015., Simeon Radivoev, All rights reserved. * * Matter Overdrive is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * Matter Overdrive is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with Matter Overdrive. If not, see <http://www.gnu.org/licenses>. */ package matteroverdrive.gui.android; import matteroverdrive.MatterOverdrive; import matteroverdrive.Reference; import matteroverdrive.api.android.IBionicStat; import matteroverdrive.client.data.Color; import matteroverdrive.entity.player.AndroidPlayer; import matteroverdrive.proxy.ClientProxy; import matteroverdrive.util.MOStringHelper; import matteroverdrive.util.RenderUtils; import net.minecraft.client.gui.ScaledResolution; import net.minecraft.item.ItemStack; import static org.lwjgl.opengl.GL11.*; /** * Created by Simeon on 9/9/2015. */ public class AndroidHudBionicStats extends AndroidHudElement { public static final int STATS_PER_ROW = 6; private int lastHeightCount = 0; public AndroidHudBionicStats(AndroidHudPosition position,String name) { super(position,name, 174, 0); } @Override public boolean isVisible(AndroidPlayer android) { return true; } @Override public void drawElement(AndroidPlayer android, int mouseX, int mouseY, ScaledResolution resolution, float ticks) { int count = 0; for (int i = 0; i < android.getSizeInventory(); i++) { if (android.getStackInSlot(i) != null) { drawAndroidPart(android.getStackInSlot(i), baseColor, getX(count,resolution,android), getY(count,resolution,android)); count++; } } for (Object object : android.getUnlocked().func_150296_c()) { IBionicStat stat = MatterOverdrive.statRegistry.getStat(object.toString()); if (stat != null) { int level = android.getUnlockedLevel(stat); if (stat.showOnHud(android, level)) { if (!stat.isEnabled(android,level)) { drawBioticStat(stat,android, level, Reference.COLOR_HOLO_RED, getX(count,resolution,android), getY(count,resolution,android)); }else { drawBioticStat(stat,android, level, baseColor, getX(count,resolution,android), getY(count,resolution,android)); } count++; } } } glEnable(GL_BLEND); glBlendFunc(GL_SRC_ALPHA,GL_ONE); if (getPosition().y == 1) { mc.renderEngine.bindTexture(AndroidHudStats.top_element_bg); RenderUtils.drawPlane(12 - 24 * getPosition().x, Math.ceil((count/(double)STATS_PER_ROW))*24 + 4, 0, 174, 11); } else if (getPosition().y == 0.5) { glPushMatrix(); glTranslated(22+(getWidth(resolution,android)-24)*getPosition().x,0,0); glRotated(90,0,0,1); mc.renderEngine.bindTexture(AndroidHudStats.top_element_bg); RenderUtils.drawPlane(0, 0, 0, 174, 11); glPopMatrix(); }else { mc.renderEngine.bindTexture(AndroidHudStats.top_element_bg); RenderUtils.drawPlane(12 - 24 * getPosition().x, 10, 0, 174, 11); } lastHeightCount = count; } private int getTotalElementCount(AndroidPlayer android) { int count = 0; for (int i = 0; i < android.getSizeInventory(); i++) { if (android.getStackInSlot(i) != null) { count++; } } for (Object object : android.getUnlocked().func_150296_c()) { IBionicStat stat = MatterOverdrive.statRegistry.getStat(object.toString()); if (stat != null) { int level = android.getUnlockedLevel(stat); if (stat.showOnHud(android, level)) { count++; } } } return count; } private void drawAndroidPart(ItemStack stack, Color color, int x, int y) { drawNormalBG(color, x, y); glEnable(GL_BLEND); glColor4f(1, 1, 1, 0.5f); glBlendFunc(GL_SRC_ALPHA, GL_ONE); RenderUtils.renderStack(x + 3, y + 3, stack); glDisable(GL_BLEND); } private void drawBioticStat(IBionicStat stat,AndroidPlayer androidPlayer,int level,Color color,int x,int y) { if (stat.isActive(androidPlayer,level)) drawActiveBG(color,x,y); else drawNormalBG(color, x, y); glEnable(GL_BLEND); ClientProxy.holoIcons.renderIcon(stat.getIcon(level),x +2,y + 2,18,18); if (stat.getDelay(androidPlayer,level) > 0) { String delay = MOStringHelper.formatRemainingTime(stat.getDelay(androidPlayer, level)/20f,true); int delayWidth = mc.fontRenderer.getStringWidth(delay); mc.fontRenderer.drawString(delay, x + 22 - delayWidth, y + 22 - mc.fontRenderer.FONT_HEIGHT - 1, Reference.COLOR_HOLO.getColor()); } glDisable(GL_BLEND); } private void drawNormalBG(Color color,int x,int y) { glDisable(GL_ALPHA_TEST); glEnable(GL_BLEND); glBlendFunc(GL_SRC_ALPHA,GL_ONE_MINUS_SRC_ALPHA); glColor4f(0,0,0,backgroundAlpha); ClientProxy.holoIcons.renderIcon("android_feature_icon_bg_black", x, y, 22, 22); glBlendFunc(GL_SRC_ALPHA, GL_ONE); RenderUtils.applyColorWithAlpha(color); ClientProxy.holoIcons.renderIcon("android_feature_icon_bg", x, y, 22, 22); glDisable(GL_BLEND); glEnable(GL_ALPHA_TEST); } private void drawActiveBG(Color color,int x,int y) { glDisable(GL_ALPHA_TEST); glEnable(GL_BLEND); glBlendFunc(GL_SRC_ALPHA,GL_ONE_MINUS_SRC_ALPHA); glColor4f(0,0,0,backgroundAlpha); ClientProxy.holoIcons.renderIcon("android_feature_icon_bg_black", x, y, 22, 22); glBlendFunc(GL_SRC_ALPHA,GL_ONE); RenderUtils.applyColorWithAlpha(color); ClientProxy.holoIcons.renderIcon("android_feature_icon_bg_active", x, y, 22, 22); glDisable(GL_BLEND); glEnable(GL_ALPHA_TEST); } private int getX(int count,ScaledResolution resolution,AndroidPlayer androidPlayer) { if (getPosition().y == 0.5) { return Math.floorDiv(count,(getHeight(resolution,androidPlayer) / 24)) * 24 + 22 - (int)(44 * getPosition().x); } else { return 24 * (count % (getWidth(resolution, androidPlayer) / 24)) + 12 - (int) (22 * getPosition().x); } } private int getY(int count,ScaledResolution resolution,AndroidPlayer androidPlayer) { if (getPosition().y == 0.5) { return 24 * (count % (getHeight(resolution,androidPlayer) / 24)); }else { return Math.floorDiv(count,(getWidth(resolution,androidPlayer) / 24)) * 24 + 22 - (int) (22 * getPosition().y); } } @Override public int getHeight(ScaledResolution resolution,AndroidPlayer androidPlayer) { if (getPosition().y == 0.5) { return width; } else { int count = getTotalElementCount(androidPlayer); return (int) Math.ceil(count * 24d / width)*24 + (int)(24*getPosition().y); } } @Override public int getWidth(ScaledResolution resolution,AndroidPlayer androidPlayer) { if (getPosition().y == 0.5) { int count = getTotalElementCount(androidPlayer); return (int) Math.ceil((count * 24d) / width) * 24; } else { return width; } } }