RenderUtil.java 文件源码

java
阅读 24 收藏 0 点赞 0 评论 0

项目:CrystalMod 作者:
/**
* 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();
  }
评论列表
文章目录


问题


面经


文章

微信
公众号

扫码关注公众号