diff options
| author | Jason Mitchell <mitchej@gmail.com> | 2021-01-24 00:37:23 -0800 |
|---|---|---|
| committer | Jason Mitchell <mitchej@gmail.com> | 2021-01-24 00:37:23 -0800 |
| commit | 8ecc28d1317e01036a6d0f1cefa34b0aacd2d16a (patch) | |
| tree | 6ce989529cb927ff79d2a07cd3e72176d060099a /src/main/java/com/detrav/gui | |
| parent | bf8c5581ff93b056a03017f858a8d907a2fa69e2 (diff) | |
| download | GT5-Unofficial-8ecc28d1317e01036a6d0f1cefa34b0aacd2d16a.tar.gz GT5-Unofficial-8ecc28d1317e01036a6d0f1cefa34b0aacd2d16a.tar.bz2 GT5-Unofficial-8ecc28d1317e01036a6d0f1cefa34b0aacd2d16a.zip | |
Selectable ores on electronic prospector
* Cleaned up some class/file names
* Removed unused code/comments
* Cached other mods being loaded
* Various optimizations
Diffstat (limited to 'src/main/java/com/detrav/gui')
| -rw-r--r-- | src/main/java/com/detrav/gui/DetravGuiProPick.java | 134 | ||||
| -rw-r--r-- | src/main/java/com/detrav/gui/DetravScannerGUI.java | 82 | ||||
| -rw-r--r-- | src/main/java/com/detrav/gui/OresList.java | 61 | ||||
| -rw-r--r-- | src/main/java/com/detrav/gui/textures/DetravMapTexture.java | 98 |
4 files changed, 217 insertions, 158 deletions
diff --git a/src/main/java/com/detrav/gui/DetravGuiProPick.java b/src/main/java/com/detrav/gui/DetravGuiProPick.java deleted file mode 100644 index b62be499fe..0000000000 --- a/src/main/java/com/detrav/gui/DetravGuiProPick.java +++ /dev/null @@ -1,134 +0,0 @@ -package com.detrav.gui; - -import java.util.ArrayList; -import java.util.Collections; -import java.util.HashMap; -import java.util.List; - -import org.lwjgl.opengl.GL11; - -import com.detrav.gui.textures.DetravMapTexture; - -import cpw.mods.fml.client.GuiScrollingList; -import net.minecraft.client.gui.GuiScreen; -import net.minecraft.client.renderer.Tessellator; -import net.minecraft.util.ResourceLocation; - -/** - * Created by wital_000 on 21.03.2016. - */ -public class DetravGuiProPick extends GuiScreen { - public static final int GUI_ID = 20; - private static DetravMapTexture map = null; - ListOres ores = null; - - public DetravGuiProPick() - { - - } - - public static void newMap(DetravMapTexture aMap) { - if (map != null) { - map.deleteGlTexture(); - map = null; - } - map = aMap; - map.loadTexture(null); - //ores = new ListOres(Minecraft.getMinecraft(),) - } - - int prevW; - int prevH; - - - private static int minHeight = 128; - private static int minWidth = 128; - - private static final ResourceLocation back = new ResourceLocation("gregtech:textures/gui/propick.png"); - - @Override - public void drawScreen(int x, int y, float f) { - this.drawDefaultBackground(); - if(map!=null) - { - int currentWidth = Math.max(map.width,minWidth); - int currentHeight = Math.max(map.height,minHeight); - int aX = (this.width - currentWidth-100)/2; - int aY = (this.height - currentHeight)/2; - - if(ores == null) - { - ores = new ListOres(this,100,currentHeight,aY,aY+currentHeight,aX+currentWidth,10,map.ores); - prevW = width; - prevH = height; - } - if(prevW!=width || prevH !=height) - { - ores = new ListOres(this,100,currentHeight,aY,aY+currentHeight,aX+currentWidth,10,map.ores); - prevW = width; - prevH = height; - } - - - //dradback for ores - drawRect(aX,aY,aX+currentWidth+100,aY+currentHeight,0xFFC6C6C6); - map.glBindTexture(); - map.draw(aX,aY); - ores.drawScreen(x,y,f); - mc.getTextureManager().bindTexture(back); - GL11.glColor4f(0xFF, 0xFF, 0xFF, 0xFF); - //drawcorners - drawTexturedModalRect(aX-5,aY-5,0,0,5,5);//leftTop - drawTexturedModalRect(aX+currentWidth+100,aY-5,171,0,5,5);//RightTop - drawTexturedModalRect(aX-5,aY+currentHeight,0,161,5,5);//leftDown - drawTexturedModalRect(aX+currentWidth+100,aY+currentHeight,171,161,5,5);//RightDown - //draw edges - for(int i = aX;i<aX+currentWidth+100;i+=128) drawTexturedModalRect(i,aY-5,5,0,Math.min(128,aX+currentWidth+100-i),5); //top - for(int i = aX;i<aX+currentWidth+100;i+=128) drawTexturedModalRect(i,aY+currentHeight,5,161,Math.min(128,aX+currentWidth+100-i),5); //down - for(int i = aY;i<aY+currentHeight;i+=128) drawTexturedModalRect(aX-5,i,0,5,5,Math.min(128,aY + currentHeight-i)); //left - for(int i = aY;i<aY+currentHeight;i+=128) drawTexturedModalRect(aX+currentWidth+100,i,171,5,5,Math.min(128,aY+currentHeight-i)); //right - } - } - - class ListOres extends GuiScrollingList - { - HashMap<String,Integer> ores = null; - List<String> keys = null; - - public ListOres(GuiScreen parent, int width, int height, int top, int bottom, int left, int entryHeight,HashMap<String,Integer> aOres) { - super(parent.mc, width, height, top, bottom, left, entryHeight); - ores = aOres; - keys = new ArrayList(map.ores.keySet()); - Collections.sort(keys); - } - - @Override - protected int getSize() { - return ores.size(); - } - - @Override - protected void elementClicked(int index, boolean doubleClick) { - - } - - @Override - protected boolean isSelected(int index) { - return false; - } - - @Override - protected void drawBackground() { - //drawRect(this.left,this.top,this.listWidth,this.listHeight,0xFFFFFFFF); - } - - @Override - protected void drawSlot(int slotIdx, int entryRight, int slotTop, int slotBuffer, Tessellator tess) { - //drawString(fontRendererObj,); - //fontRendererObj.drawString(fontRendererObj.trimStringToWidth()) - - fontRendererObj.drawString(fontRendererObj.trimStringToWidth(keys.get(slotIdx), listWidth - 10), this.left + 3 , slotTop + 2, ores.get(keys.get(slotIdx))); - - } - } -} diff --git a/src/main/java/com/detrav/gui/DetravScannerGUI.java b/src/main/java/com/detrav/gui/DetravScannerGUI.java new file mode 100644 index 0000000000..bc275afca5 --- /dev/null +++ b/src/main/java/com/detrav/gui/DetravScannerGUI.java @@ -0,0 +1,82 @@ +package com.detrav.gui; + +import org.lwjgl.opengl.GL11; + +import com.detrav.gui.textures.DetravMapTexture; + +import net.minecraft.client.gui.GuiScreen; +import net.minecraft.util.ResourceLocation; + +/** + * Created by wital_000 on 21.03.2016. + */ +public class DetravScannerGUI extends GuiScreen { + public static final int GUI_ID = 20; + private static DetravMapTexture map = null; + OresList oresList = null; + + private final static int minHeight = 128; + private final static int minWidth = 128; + private int prevW; + private int prevH; + + private static final ResourceLocation back = new ResourceLocation("gregtech:textures/gui/propick.png"); + + public DetravScannerGUI() { + + } + + public static void newMap(DetravMapTexture aMap) { + if (map != null) { + map.deleteGlTexture(); + map = null; + } + map = aMap; + map.loadTexture(null); + } + + + @Override + public void drawScreen(int x, int y, float f) { + this.drawDefaultBackground(); + if(map == null) return; + + int currentWidth = Math.max(map.width, minWidth); + int currentHeight = Math.max(map.height, minHeight); + int aX = (this.width - currentWidth-100)/2; + int aY = (this.height - currentHeight)/2; + + if(oresList == null || (prevW != width || prevH != height)) { + oresList = new OresList( + this, 100, currentHeight, aY, aY+currentHeight, aX+currentWidth, 10, map.packet.ores, + (name -> { + if (map != null) map.loadTexture(null, name); + }) + ); + prevW = width; + prevH = height; + } + + // draw back for ores + drawRect(aX,aY,aX+currentWidth+100,aY+currentHeight,0xFFC6C6C6); + map.glBindTexture(); + map.draw(aX,aY); + oresList.drawScreen(x, y, f); + mc.getTextureManager().bindTexture(back); + GL11.glColor4f(0xFF, 0xFF, 0xFF, 0xFF); + + // draw corners + drawTexturedModalRect(aX-5,aY-5,0,0,5,5);//leftTop + drawTexturedModalRect(aX+currentWidth+100,aY-5,171,0,5,5);//RightTop + drawTexturedModalRect(aX-5,aY+currentHeight,0,161,5,5);//leftDown + drawTexturedModalRect(aX+currentWidth+100,aY+currentHeight,171,161,5,5);//RightDown + + // draw edges + for(int i = aX ; i <aX + currentWidth + 100 ; i += 128) drawTexturedModalRect(i,aY-5,5,0,Math.min(128,aX+currentWidth+100-i),5); //top + for(int i = aX ; i <aX + currentWidth + 100 ; i += 128) drawTexturedModalRect(i,aY+currentHeight,5,161,Math.min(128,aX+currentWidth+100-i),5); //down + for(int i = aY ; i <aY + currentHeight ; i += 128) drawTexturedModalRect(aX-5,i,0,5,5,Math.min(128,aY + currentHeight-i)); //left + for(int i = aY ; i <aY + currentHeight ; i += 128) drawTexturedModalRect(aX+currentWidth+100,i,171,5,5,Math.min(128,aY+currentHeight-i)); //right + + } + +} diff --git a/src/main/java/com/detrav/gui/OresList.java b/src/main/java/com/detrav/gui/OresList.java new file mode 100644 index 0000000000..a6af396a1a --- /dev/null +++ b/src/main/java/com/detrav/gui/OresList.java @@ -0,0 +1,61 @@ +package com.detrav.gui; + +import cpw.mods.fml.client.GuiScrollingList; +import net.minecraft.client.gui.GuiScreen; +import net.minecraft.client.renderer.Tessellator; + +import java.util.ArrayList; +import java.util.Collections; +import java.util.HashMap; +import java.util.List; +import java.util.function.Consumer; + +class OresList extends GuiScrollingList { + private final HashMap<String, Integer> ores; + private final List<String> keys; + private final GuiScreen parent; + private final Consumer<String> onSelected; + + private int selected = -1; + + public OresList(GuiScreen parent, int width, int height, int top, int bottom, int left, int entryHeight, HashMap<String, Integer> aOres, Consumer<String> onSelected) { + super(parent.mc, width, height, top, bottom, left, entryHeight); + this.parent = parent; + this.onSelected = onSelected; + ores = aOres; + keys = new ArrayList(ores.keySet()); + Collections.sort(keys); + keys.add(0, "All"); + selected = 0; + } + + @Override + protected int getSize() { + return ores.size(); + } + + @Override + protected void elementClicked(int index, boolean doubleClick) { + selected = index; + if(onSelected != null) onSelected.accept(keys.get(index)); + } + + @Override + protected boolean isSelected(int index) { + return selected == index; + } + + @Override + protected void drawBackground() {} + + @Override + protected void drawSlot(int slotIdx, int entryRight, int slotTop, int slotBuffer, Tessellator tess) { + parent.drawString( + parent.mc.fontRenderer, + parent.mc.fontRenderer.trimStringToWidth(keys.get(slotIdx), listWidth - 10), + this.left + 3, + slotTop, + ores.getOrDefault(keys.get(slotIdx), 0x7d7b76) + ); + } +} diff --git a/src/main/java/com/detrav/gui/textures/DetravMapTexture.java b/src/main/java/com/detrav/gui/textures/DetravMapTexture.java index 58d69260ce..5cf913985c 100644 --- a/src/main/java/com/detrav/gui/textures/DetravMapTexture.java +++ b/src/main/java/com/detrav/gui/textures/DetravMapTexture.java @@ -1,48 +1,100 @@ package com.detrav.gui.textures; -import java.awt.image.BufferedImage; -import java.util.HashMap; - -import org.lwjgl.opengl.GL11; - -import com.detrav.net.DetravProPickPacket00; - -import net.minecraft.client.Minecraft; +import com.detrav.net.ProspectingPacket; import net.minecraft.client.renderer.Tessellator; import net.minecraft.client.renderer.texture.AbstractTexture; import net.minecraft.client.renderer.texture.TextureUtil; import net.minecraft.client.resources.IResourceManager; +import org.lwjgl.opengl.GL11; + +import java.awt.Color; +import java.awt.image.BufferedImage; +import java.awt.image.WritableRaster; /** * Created by wital_000 on 21.03.2016. */ public class DetravMapTexture extends AbstractTexture { - private DetravProPickPacket00 packet; + public final ProspectingPacket packet; + private String selected = "All"; + public int width = -1; + public int height = -1; - public DetravMapTexture(DetravProPickPacket00 aPacket) + public DetravMapTexture(ProspectingPacket aPacket) { packet = aPacket; } - public int width = -1; - public int height = -1; - public HashMap<String,Integer> ores = null; + private BufferedImage getImage() { + int wh = (packet.size * 2 + 1) * 16; + + BufferedImage image = new BufferedImage(wh, wh, BufferedImage.TYPE_INT_ARGB); + WritableRaster raster = image.getRaster(); + + int playerI = packet.posX - (packet.chunkX - packet.size) * 16 - 1; // Correct player offset + int playerJ = packet.posZ - (packet.chunkZ - packet.size) * 16 - 1; + for (int i = 0; i < wh; i++) { + for (int j = 0; j < wh; j++) { + image.setRGB(i, j, Color.WHITE.getRGB()); + if (packet.map[i][j] != null) { + if (packet.ptype == 0 || packet.ptype == 1) { + for (short meta : packet.map[i][j].values()) { + final String name = packet.metaMap.get(meta); + if (!selected.equals("All") && !selected.equals(name)) continue; + image.setRGB(i, j, packet.ores.get(name) | 0XFF000000); + break; + } + } else if (packet.ptype == 2) { + final short fluidId = packet.map[i][j].get((byte) 1), fluidSize = packet.map[i][j].get((byte) 2); + final String name = packet.metaMap.get(fluidId); + + // Variables used to locate within a chunk. + final int k = (i % 16), l = (j % 16); + + if( ( (k + l * 16) * 3) < (fluidSize + 48) ) { + image.setRGB(i, j, packet.ores.get(name)); + } + }else if (packet.ptype == 3) { + final short meta = packet.map[i][j].get((byte) 1); + final String name = packet.metaMap.get(meta); + image.setRGB(i, j, packet.ores.get(name)); + } + } + // draw player pos + if (i == playerI || j == playerJ) { + raster.setSample(i, j, 0, (raster.getSample(i, j, 0) + 255) / 2); + raster.setSample(i, j, 1, raster.getSample(i, j, 1) / 2); + raster.setSample(i, j, 2, raster.getSample(i, j, 2) / 2); + } + // draw grid + if ((i) % 16 == 0 || (j) % 16 == 0) { + raster.setSample(i, j, 0, raster.getSample(i, j, 0) / 2); + raster.setSample(i, j, 1, raster.getSample(i, j, 1) / 2); + raster.setSample(i, j, 2, raster.getSample(i, j, 2) / 2); + } + } + } + + return image; + } + @Override - public void loadTexture(IResourceManager p_110551_1_){ + public void loadTexture(IResourceManager resourceManager){ this.deleteGlTexture(); - if(packet!=null) - { + if(packet != null) { int tId = getGlTextureId(); if(tId <0) return; - BufferedImage bufferedimage = packet.getImage((int)Minecraft.getMinecraft().thePlayer.posX,(int)Minecraft.getMinecraft().thePlayer.posZ); - TextureUtil.uploadTextureImageAllocate(this.getGlTextureId(), bufferedimage, false, false); + TextureUtil.uploadTextureImageAllocate(this.getGlTextureId(), getImage(), false, false); width = packet.getSize(); height = packet.getSize(); - ores = packet.getOres(); } - //GL11.glDrawPixels(); + } + + public void loadTexture(IResourceManager resourceManager, String selected){ + this.selected = selected; + loadTexture(resourceManager); } public int glBindTexture() { @@ -51,12 +103,10 @@ public class DetravMapTexture extends AbstractTexture { return this.glTextureId; } - public void draw(int x, int y) - { + public void draw(int x, int y) { float f = 1F / (float)width; float f1 = 1F / (float)height; - int u = 0; - int v = 0; + int u = 0, v = 0; Tessellator tessellator = Tessellator.instance; tessellator.startDrawingQuads(); tessellator.addVertexWithUV((double)(x), (double)(y + height), 0, (double)((float)(u) * f), (double)((float)(v + height) * f1)); |
