- 1,015
- 9
- 102
Опять на счёт HUD'a. Я пока его не сделаю, не отстану от вас, ибо я не сильно шарю в openGL. Кароче вот я написал свой рендер (скопипастил с waila):
[font=Monaco, Consolas, Courier, monospace]ImplantsHUD:
[/font]
И в самой игре наблюдается вот такая шляпа:
Вот прозрачность вокруг этой палки принимает цвет тумана (если туман темный, то цвет темный и т.д.). Такое чувство, что прозрачность формируется наложением на туман, а не на то, что перед ним. Я вообще без понятия как это исправить
Код:
public class RenderHUD {
final Minecraft mc = Minecraft.getMinecraft();
final FontRenderer font = Minecraft.getMinecraft().fontRendererObj;
final ImplantsHUD implantsHUD = new ImplantsHUD();
final int[] toSave = new int[]{
GL_BLEND,
GL_LIGHTING,
GL_LIGHT0,
GL_LIGHT1,
GL_DEPTH_TEST,
GL_RESCALE_NORMAL,
GL_COLOR_MATERIAL,
GL_ALPHA_TEST
};
int func;
boolean mask;
@SubscribeEvent
@SideOnly(Side.CLIENT)
public void tickRender(TickEvent.RenderTickEvent e) {
if (mc.currentScreen == null && mc.world != null && mc.isGuiEnabled()) {
GL11.glPushMatrix();
boolean[] data = save();
GL11.glDisable(GL12.GL_RESCALE_NORMAL);
RenderHelper.disableStandardItemLighting();
GL11.glDisable(GL11.GL_LIGHTING);
GL11.glDisable(GL11.GL_DEPTH_TEST);
GL11.glDepthMask(false);
ScaledResolution res = new ScaledResolution(mc);
int x1 = (res.getScaledWidth() - 109) / 8;
int y1 = (res.getScaledHeight() - 290) / 2;
GL11.glTranslated(x1, y1, 0);
implantsHUD.draw(mc, font, 0, 100, 0);
GL11.glEnable(GL12.GL_RESCALE_NORMAL);
load(data);
GL11.glEnable(GL_DEPTH_TEST);
GL11.glPopMatrix();
}
}
private boolean[] save(){
boolean[] data = new boolean[toSave.length];
for (int i = 0; i < toSave.length; i++)
data[i] = GL11.glGetBoolean(toSave[i]);
func = GL11.glGetInteger(GL_DEPTH_FUNC);
mask = GL11.glGetBoolean(GL_DEPTH_WRITEMASK);
GL11.glPushAttrib(GL_CURRENT_BIT);
return data;
}
private void load(boolean[] data){
for (int i = 0; i < data.length; i++) {
if (data[i])
GL11.glEnable(toSave[i]);
else
GL11.glDisable(toSave[i]);
}
GL11.glDepthFunc(func);
GL11.glDepthMask(mask);
GL11.glPopAttrib();
}
}
[font=Monaco, Consolas, Courier, monospace]ImplantsHUD:
[/font]
Код:
public class ImplantsHUD extends Gui{
public void draw(Minecraft mc, FontRenderer font, float energy, float energyMax, int voltage){
GlStateManager.enableBlend();
GlStateManager.color(1,1,1,0.75f);
GlStateManager.blendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
mc.getTextureManager().bindTexture(new ResourceLocation("meem:textures/gui/implantshud/energybackground.png"));
drawModalRectWithCustomSizedTexture(0, 0, 0,0,109,290,109,290);
font.drawString("Energy", 30, -20, 1606345);
font.drawString(voltage == 0 ? "Not charging" : voltage + " Volt", 10, 300, voltage == 0 ? 13107200 : 51200);
GlStateManager.disableBlend();
GlStateManager.color(1,1,1, 1);
}
}
И в самой игре наблюдается вот такая шляпа:
Вот прозрачность вокруг этой палки принимает цвет тумана (если туман темный, то цвет темный и т.д.). Такое чувство, что прозрачность формируется наложением на туман, а не на то, что перед ним. Я вообще без понятия как это исправить