Advertisement
Guest User

Untitled

a guest
Apr 21st, 2018
194
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.44 KB | None | 0 0
  1. package ru.ostiumcore.xworldrender.worldrenderer.data;
  2.  
  3. import java.awt.Color;
  4. import java.awt.Graphics2D;
  5. import java.awt.image.BufferedImage;
  6.  
  7. import static org.lwjgl.opengl.GL11.*;
  8. import org.lwjgl.opengl.GL30;
  9.  
  10. import net.minecraft.client.Minecraft;
  11. import net.minecraft.client.gui.FontRenderer;
  12. import net.minecraft.client.renderer.GlStateManager;
  13. import net.minecraft.client.renderer.texture.SimpleTexture;
  14. import net.minecraft.client.renderer.texture.TextureUtil;
  15. import net.minecraftforge.client.MinecraftForgeClient;
  16. import ru.ostiumcore.utils.DrawFrameBuffers;
  17. import ru.ostiumcore.utils.RenderHelper;
  18. import ru.ostiumcore.xworldrender.core.XWorldRender;
  19. import ru.ostiumcore.xworldrender.dataholder.element.ScrollableTable;
  20. import ru.ostiumcore.xworldrender.worldrenderer.interfaces.IScrollable;
  21.  
  22. public class WScrollableTable extends WBaseElement<ScrollableTable> implements IScrollable{
  23.  
  24. private static final float TEXT_HEIGHT = 8.0f;
  25. public static FontRenderer fr = Minecraft.getMinecraft().fontRenderer;
  26. public int scroll = 0;
  27. public int colDisplay = 3;
  28.  
  29.  
  30. public WScrollableTable(ScrollableTable table) {
  31. setElement(table);
  32. }
  33.  
  34. @Override
  35. public void render(int mouseX, int mouseY, float scale, int res) {
  36. super.hover(mouseX, mouseY);
  37. int stencilBit = MinecraftForgeClient.reserveStencilBit();
  38. glPushMatrix();
  39. glScalef(scale/res, scale/res, 1);
  40. glTranslated(getX(), getY(), 0);
  41.  
  42. // TMP: Generating mask here for being able to change it in debug mode
  43. BufferedImage imga = new BufferedImage(256, 256, BufferedImage.TYPE_INT_ARGB);
  44. Graphics2D g = imga.createGraphics();
  45. g.setColor(Color.WHITE);
  46. g.fillOval(0, 0, 256, 256);
  47. g.fillRect(128, 128, 256, 256);
  48. int t = GlStateManager.generateTexture();
  49. TextureUtil.uploadTextureImage(t, imga);
  50.  
  51. // Enabling stencil things
  52. glEnable(GL_STENCIL_TEST);
  53. GlStateManager.depthMask(false);
  54. glStencilFunc(GL_ALWAYS, stencilBit, 0xff);
  55. glStencilOp(GL_KEEP, GL_KEEP, GL_REPLACE);
  56. glStencilMask(0xFF);
  57.  
  58. glClearStencil(0);
  59. glClear(GL_STENCIL_BUFFER_BIT);
  60.  
  61. // Drawing stencil mask or whatever it called
  62. GlStateManager.bindTexture(t);
  63. RenderHelper.INSTANCE.drawImage(0, 0, getWidth(), getHeight(), -1, 1f);
  64. GlStateManager.deleteTexture(t);
  65.  
  66. glPushMatrix();
  67. // Doing something i'm not sure about
  68. glStencilMask(0);
  69. glStencilFunc(GL_EQUAL, stencilBit, 0x00);
  70. GlStateManager.enableBlend();
  71. GlStateManager.blendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
  72.  
  73. // --- START: Drawing masked table ---
  74. // Drawing table background
  75. RenderHelper.INSTANCE.drawRect(0, 0, getWidth(), getHeight(), 0, .8f);
  76. // Drawing other table pieces
  77. float rowH = (float) getHeight()/(colDisplay+1);
  78. for (int col = 0; col < element.headers.size(); col++) {
  79. float weight = element.getWeight(col);
  80.  
  81. float colW = (float) getWidth()*weight;
  82. for (int row = 0; row < colDisplay + 1; row++) {
  83. int color = 0;
  84. String text = "";
  85.  
  86. if(row==0) {
  87. text = element.headers.get(col);
  88. }else {
  89. color = col*123123123+row*5555555; // Getting pretty much random color
  90. if(element.content.size()>row-1+scroll) {
  91. text = element.content.get(row-1+scroll).get(col);
  92. }
  93. }
  94.  
  95. // Drawing column backgrounds
  96. RenderHelper.INSTANCE.drawRect(0, rowH*row, colW, rowH*0.875f, color, .3f);
  97.  
  98. // Drawing text inside columns
  99. glPushMatrix();
  100. glScalef(rowH / TEXT_HEIGHT * 0.875f, rowH / TEXT_HEIGHT * 0.875f, 1);
  101. float w = colW / rowH * TEXT_HEIGHT / 0.875f;
  102. float h = TEXT_HEIGHT / 0.875f;
  103. fr.drawStringWithShadow(text, w/2 - fr.getStringWidth(text)/2, h*row, -1);
  104. glPopMatrix();
  105. }
  106. glTranslated(colW, 0, 0);
  107. }
  108. // --- END: Drawing masked table ---
  109.  
  110. // Getting everything back to initial state
  111. glStencilMask(0xFF);
  112. GlStateManager.disableBlend();
  113. GlStateManager.depthMask(true);
  114. glDisable(GL_STENCIL_TEST);
  115. glPopMatrix();
  116. glPopMatrix();
  117. MinecraftForgeClient.releaseStencilBit(stencilBit);
  118. }
  119.  
  120. @Override
  121. public void scroll(int s) {
  122. // TODO: change per element scroll to fixed amount of pixels
  123. this.scroll = Math.max(this.scroll-s, 0);
  124. }
  125.  
  126. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement