/**
* Renders floating lines of text in the 3D world at a specific position.
* @param list The string list of text to render
* @param x X coordinate in the game world
* @param y Y coordinate in the game world
* @param z Z coordinate in the game world
* @param color
* @param renderBlackBox render a pretty black border behind the text?
* @param partialTickTime
*/
public static void renderFloatingText(List<String> list, double x, double y, double z, int color, boolean renderBlackBox, float partialTickTime, boolean ignorePitch)
{
Minecraft mc = Minecraft.getMinecraft();
RenderManager renderManager = mc.getRenderManager();
FontRenderer fontRenderer = mc.fontRendererObj;
EntityPlayer clientPlayer = CrystalMod.proxy.getClientPlayer();
float playerX = (float) (clientPlayer.lastTickPosX + (clientPlayer.posX - clientPlayer.lastTickPosX) * partialTickTime);
float playerY = (float) (clientPlayer.lastTickPosY + (clientPlayer.posY - clientPlayer.lastTickPosY) * partialTickTime);
float playerZ = (float) (clientPlayer.lastTickPosZ + (clientPlayer.posZ - clientPlayer.lastTickPosZ) * partialTickTime);
double dx = x-playerX;
double dy = y-playerY;
double dz = z-playerZ;
float distance = (float) Math.sqrt(dx*dx + dy*dy + dz*dz);
float multiplier = distance / 120f;
float scale = 0.45f * multiplier;
GlStateManager.color(1f, 1f, 1f, 0.5f);
GlStateManager.pushMatrix();
GlStateManager.translate(dx, dy, dz);
GlStateManager.rotate(-renderManager.playerViewY, 0.0F, 1.0F, 0.0F);
if(!ignorePitch)GlStateManager.rotate(renderManager.playerViewX, 1.0F, 0.0F, 0.0F);
GlStateManager.scale(-scale, -scale, scale);
GlStateManager.disableLighting();
GlStateManager.depthMask(false);
GlStateManager.disableDepth();
GlStateManager.enableBlend();
GlStateManager.blendFunc(SourceFactor.SRC_ALPHA, DestFactor.ONE_MINUS_SRC_ALPHA);
int textWidth = 0;
for (String thisMessage : list)
{
int thisMessageWidth = fontRenderer.getStringWidth(thisMessage);
if (thisMessageWidth > textWidth)
textWidth = thisMessageWidth;
}
int lineHeight = 10;
if(renderBlackBox)
{
Tessellator tessellator = Tessellator.getInstance();
VertexBuffer buffer = tessellator.getBuffer();
GlStateManager.disableTexture2D();
buffer.begin(7, DefaultVertexFormats.POSITION_COLOR);
int stringMiddle = textWidth / 2;
buffer.pos(-stringMiddle - 1, -1 + 0, 0.0D).color(0.0F, 0.0F, 0.0F, 0.5F).endVertex();
buffer.pos(-stringMiddle - 1, 8 + lineHeight*list.size()-lineHeight, 0.0D).color(0.0F, 0.0F, 0.0F, 0.5F).endVertex();
buffer.pos(stringMiddle + 1, 8 + lineHeight*list.size()-lineHeight, 0.0D).color(0.0F, 0.0F, 0.0F, 0.5F).endVertex();
buffer.pos(stringMiddle + 1, -1 + 0, 0.0D).color(0.0F, 0.0F, 0.0F, 0.5F).endVertex();
tessellator.draw();
GlStateManager.enableTexture2D();
}
int i = 0;
for(String message : list)
{
fontRenderer.drawString(message, -textWidth / 2, i*lineHeight, color);
i++;
}
GlStateManager.color(1.0F, 1.0F, 1.0F, 1.0F);
GlStateManager.depthMask(true);
GlStateManager.enableDepth();
GlStateManager.popMatrix();
}
RenderUtil.java 文件源码
java
阅读 24
收藏 0
点赞 0
评论 0
项目:CrystalMod
作者:
评论列表
文章目录