-
Notifications
You must be signed in to change notification settings - Fork 5
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Made use of ScrollableWidget in AC_GuiMapSelect
- Loading branch information
1 parent
cb852e8
commit f290028
Showing
4 changed files
with
166 additions
and
211 deletions.
There are no files selected for viewing
304 changes: 123 additions & 181 deletions
304
src/main/java/dev/adventurecraft/awakening/common/AC_GuiMapSelect.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,248 +1,190 @@ | ||
package dev.adventurecraft.awakening.common; | ||
|
||
import java.io.File; | ||
import java.util.List; | ||
|
||
import dev.adventurecraft.awakening.extension.client.ExMinecraft; | ||
import dev.adventurecraft.awakening.extension.client.render.ExTextRenderer; | ||
import net.fabricmc.api.EnvType; | ||
import net.fabricmc.api.Environment; | ||
import net.minecraft.client.Minecraft; | ||
import net.minecraft.client.SingleplayerInteractionManager; | ||
import net.minecraft.client.gui.screen.Screen; | ||
import net.minecraft.client.gui.widget.ButtonWidget; | ||
import net.minecraft.client.gui.widgets.OptionButtonWidget; | ||
import net.minecraft.client.render.Tessellator; | ||
import net.minecraft.client.resource.language.TranslationStorage; | ||
import org.lwjgl.input.Mouse; | ||
import org.lwjgl.opengl.GL11; | ||
|
||
import java.io.File; | ||
import java.util.List; | ||
|
||
public class AC_GuiMapSelect extends Screen { | ||
|
||
protected Screen parent; | ||
private int field_6460_h = 0; | ||
private int field_6459_i = 32; | ||
private int field_6458_j = this.height - 55 + 4; | ||
private int field_6457_l = 0; | ||
private int field_6456_m = this.width; | ||
private int field_6455_n = -2; | ||
private int field_6454_o = -1; | ||
private String fileLocation = ""; | ||
private String saveName; | ||
private AC_MapInfo selectedMap; | ||
|
||
public AC_GuiMapSelect(Screen var1, String var2) { | ||
this.parent = var1; | ||
this.saveName = var2; | ||
private MapList mapList; | ||
|
||
public AC_GuiMapSelect(Screen parent, String saveName) { | ||
this.parent = parent; | ||
this.saveName = saveName; | ||
} | ||
|
||
@Override | ||
public void initVanillaScreen() { | ||
((ExMinecraft) this.client).getMapList().findMaps(); | ||
TranslationStorage var1 = TranslationStorage.getInstance(); | ||
var ts = TranslationStorage.getInstance(); | ||
if (this.saveName == null) { | ||
this.buttons.add(new OptionButtonWidget(6, this.width / 2 + 5, this.height - 48, var1.translate("gui.done"))); | ||
this.buttons.add(new ButtonWidget(7, this.width / 2 - 155, this.height - 48, 150, 20, "New Map")); | ||
this.buttons.add(new OptionButtonWidget(6, this.width / 2 + 5, this.height - 48, ts.translate("gui.done"))); | ||
this.buttons.add(new ButtonWidget(7, this.width / 2 - 155, this.height - 48, 150, 20, ts.translate("mapList.newMap"))); | ||
} else { | ||
this.buttons.add(new OptionButtonWidget(6, this.width / 2 - 75, this.height - 48, var1.translate("gui.done"))); | ||
this.buttons.add(new OptionButtonWidget(6, this.width / 2 - 75, this.height - 48, ts.translate("gui.done"))); | ||
} | ||
|
||
this.client.texturePackManager.findTexturePacks(); | ||
this.fileLocation = (new File(Minecraft.getGameDirectory(), "texturepacks")).getAbsolutePath(); | ||
this.field_6459_i = 32; | ||
this.field_6458_j = this.height - 58 + 4; | ||
this.field_6457_l = 0; | ||
this.field_6456_m = this.width; | ||
this.mapList = new MapList(); | ||
} | ||
|
||
protected void buttonClicked(ButtonWidget var1) { | ||
if (!var1.active) { | ||
@Override | ||
protected void buttonClicked(ButtonWidget button) { | ||
if (!button.active) { | ||
return; | ||
} | ||
|
||
if (var1.id == 6) { | ||
if (this.selectedMap == null) { | ||
if (button.id == 6) { | ||
AC_MapInfo selectedMap = this.mapList.selectedMap; | ||
if (selectedMap == null) { | ||
this.client.openScreen(this.parent); | ||
} else { | ||
if (this.saveName != null) { | ||
if (this.saveName.equals("")) { | ||
File var2 = Minecraft.getGameDirectory(); | ||
File var3 = new File(var2, "saves"); | ||
int var4 = 1; | ||
File gameDir = Minecraft.getGameDirectory(); | ||
File savesDir = new File(gameDir, "saves"); | ||
int saveIndex = 1; | ||
|
||
File var5; | ||
File saveDir; | ||
do { | ||
this.saveName = String.format("%s - Save %d", this.selectedMap.name, var4); | ||
var5 = new File(var3, this.saveName); | ||
++var4; | ||
} while (var5.exists()); | ||
this.saveName = String.format("%s - Save %d", selectedMap.name, saveIndex); | ||
saveDir = new File(savesDir, this.saveName); | ||
++saveIndex; | ||
} while (saveDir.exists()); | ||
} | ||
|
||
((ExMinecraft) this.client).saveMapUsed(this.saveName, this.selectedMap.name); | ||
((ExMinecraft) this.client).saveMapUsed(this.saveName, selectedMap.name); | ||
} | ||
|
||
this.client.interactionManager = new SingleplayerInteractionManager(this.client); | ||
((ExMinecraft) this.client).startWorld(this.saveName, this.saveName, 0L, this.selectedMap.name); | ||
((ExMinecraft) this.client).startWorld(this.saveName, this.saveName, 0L, selectedMap.name); | ||
} | ||
} else if (var1.id == 7) { | ||
} else if (button.id == 7) { | ||
this.client.openScreen(new GuiCreateNewMap(this)); | ||
} | ||
} | ||
|
||
protected void mouseClicked(int var1, int var2, int var3) { | ||
super.mouseClicked(var1, var2, var3); | ||
@Override | ||
public void onMouseEvent() { | ||
super.onMouseEvent(); | ||
this.mapList.onMouseEvent(); | ||
} | ||
|
||
protected void mouseReleased(int var1, int var2, int var3) { | ||
super.mouseReleased(var1, var2, var3); | ||
@Override | ||
public void render(int mouseX, int mouseY, float tickTime) { | ||
this.renderBackground(); | ||
|
||
this.mapList.render(mouseX, mouseY, tickTime); | ||
|
||
var translation = TranslationStorage.getInstance(); | ||
this.drawTextWithShadowCentred(this.textRenderer, translation.translate("mapList.title"), this.width / 2, 16, 16777215); | ||
super.render(mouseX, mouseY, tickTime); | ||
} | ||
|
||
public void render(int var1, int var2, float var3) { | ||
this.renderBackground(); | ||
if (this.field_6454_o <= 0) { | ||
this.client.texturePackManager.findTexturePacks(); | ||
this.field_6454_o += 20; | ||
} | ||
public void tick() { | ||
super.tick(); | ||
} | ||
|
||
List var4 = ((ExMinecraft) this.client).getMapList().availableMaps(); | ||
int var5; | ||
if (Mouse.isButtonDown(0)) { | ||
if (this.field_6455_n == -1) { | ||
if (var2 >= this.field_6459_i && var2 <= this.field_6458_j) { | ||
var5 = this.width / 2 - 110; | ||
int var6 = this.width / 2 + 110; | ||
int var7 = (var2 - this.field_6459_i + this.field_6460_h - 2) / 36; | ||
if (var1 >= var5 && var1 <= var6 && var7 >= 0 && var7 < var4.size()) { | ||
this.selectedMap = (AC_MapInfo) var4.get(var7); | ||
} | ||
@Environment(value = EnvType.CLIENT) | ||
public class MapList extends ScrollableWidget { | ||
|
||
this.field_6455_n = var2; | ||
} else { | ||
this.field_6455_n = -2; | ||
} | ||
} else if (this.field_6455_n >= 0) { | ||
this.field_6460_h -= var2 - this.field_6455_n; | ||
this.field_6455_n = var2; | ||
} | ||
} else { | ||
if (this.field_6455_n >= 0 && this.field_6455_n != var2) { | ||
} | ||
private List<AC_MapInfo> maps; | ||
private int hoveredEntry = -1; | ||
private int selectedEntry = -1; | ||
private AC_MapInfo selectedMap; | ||
|
||
public MapList() { | ||
super( | ||
AC_GuiMapSelect.this.client, | ||
0, 0, AC_GuiMapSelect.this.width, AC_GuiMapSelect.this.height, | ||
32, AC_GuiMapSelect.this.height - 58 + 4, 36); | ||
|
||
this.field_6455_n = -1; | ||
this.setContentTopPadding(4); | ||
|
||
this.maps = ((ExMinecraft) this.client).getMapList().getMaps(); | ||
} | ||
|
||
var5 = var4.size() * 36 - (this.field_6458_j - this.field_6459_i - 4); | ||
if (var5 < 0) { | ||
var5 /= 2; | ||
@Override | ||
protected int getEntryCount() { | ||
return this.maps.size(); | ||
} | ||
|
||
if (this.field_6460_h < 0) { | ||
this.field_6460_h = 0; | ||
@Override | ||
protected void entryClicked(int entryIndex, boolean doubleClick) { | ||
this.selectedEntry = entryIndex; | ||
if (entryIndex != -1) { | ||
this.selectedMap = maps.get(entryIndex); | ||
} else { | ||
this.selectedMap = null; | ||
} | ||
} | ||
|
||
if (this.field_6460_h > var5) { | ||
this.field_6460_h = var5; | ||
@Override | ||
protected void beforeEntryRender(int mouseX, int mouseY, double entryX, double entryY, Tessellator ts) { | ||
super.beforeEntryRender(mouseX, mouseY, entryX, entryY, ts); | ||
|
||
this.hoveredEntry = this.getEntryUnderPoint(mouseX, mouseY); | ||
} | ||
|
||
GL11.glDisable(GL11.GL_LIGHTING); | ||
GL11.glDisable(GL11.GL_FOG); | ||
Tessellator var16 = Tessellator.INSTANCE; | ||
GL11.glBindTexture(GL11.GL_TEXTURE_2D, this.client.textureManager.getTextureId("/gui/background.png")); | ||
GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); | ||
float var17 = 32.0F; | ||
var16.start(); | ||
var16.color(2105376); | ||
var16.vertex(this.field_6457_l, this.field_6458_j, 0.0D, (float) this.field_6457_l / var17, (float) (this.field_6458_j + this.field_6460_h) / var17); | ||
var16.vertex(this.field_6456_m, this.field_6458_j, 0.0D, (float) this.field_6456_m / var17, (float) (this.field_6458_j + this.field_6460_h) / var17); | ||
var16.vertex(this.field_6456_m, this.field_6459_i, 0.0D, (float) this.field_6456_m / var17, (float) (this.field_6459_i + this.field_6460_h) / var17); | ||
var16.vertex(this.field_6457_l, this.field_6459_i, 0.0D, (float) this.field_6457_l / var17, (float) (this.field_6459_i + this.field_6460_h) / var17); | ||
var16.tessellate(); | ||
|
||
for (int var8 = 0; var8 < var4.size(); ++var8) { | ||
AC_MapInfo var9 = (AC_MapInfo) var4.get(var8); | ||
int var10 = this.width / 2 - 92 - 16; | ||
int var11 = 36 + var8 * 36 - this.field_6460_h; | ||
byte var12 = 32; | ||
byte var13 = 32; | ||
if (var9 == this.selectedMap) { | ||
int var14 = this.width / 2 - 110; | ||
int var15 = this.width / 2 + 110; | ||
GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); | ||
@Override | ||
protected void renderEntry(int entryIndex, double entryX, double entryY, int entryHeight, Tessellator ts) { | ||
AC_MapInfo mapInfo = this.maps.get(entryIndex); | ||
var exText = (ExTextRenderer) AC_GuiMapSelect.this.textRenderer; | ||
|
||
int iconX = (int) entryX - 110 + 2; | ||
int iconY = (int) entryY + 2; | ||
int iconWidth = 32; | ||
int iconHeight = 32; | ||
|
||
if (this.selectedEntry == entryIndex || this.hoveredEntry == entryIndex) { | ||
int size = 110; | ||
int nameWidth = exText.getTextWidth(mapInfo.name, 0).width(); | ||
int desc1Width = exText.getTextWidth(mapInfo.description1, 0).width(); | ||
int desc2Width = exText.getTextWidth(mapInfo.description2, 0).width(); | ||
int entryWidth = Math.max(size * 2, iconWidth + Math.max(nameWidth, Math.max(desc1Width, desc2Width)) + 6); | ||
boolean isHover = this.selectedEntry != entryIndex && this.hoveredEntry == entryIndex; | ||
int borderColor = isHover ? 0x80808080 : 0xff808080; | ||
int backColor = isHover ? 0x80000000 : 0xff000000; | ||
|
||
GL11.glDisable(GL11.GL_TEXTURE_2D); | ||
var16.start(); | ||
var16.color(8421504); | ||
var16.vertex(var14, var11 + var12 + 2, 0.0D, 0.0D, 1.0D); | ||
var16.vertex(var15, var11 + var12 + 2, 0.0D, 1.0D, 1.0D); | ||
var16.vertex(var15, var11 - 2, 0.0D, 1.0D, 0.0D); | ||
var16.vertex(var14, var11 - 2, 0.0D, 0.0D, 0.0D); | ||
var16.color(0); | ||
var16.vertex(var14 + 1, var11 + var12 + 1, 0.0D, 0.0D, 1.0D); | ||
var16.vertex(var15 - 1, var11 + var12 + 1, 0.0D, 1.0D, 1.0D); | ||
var16.vertex(var15 - 1, var11 - 1, 0.0D, 1.0D, 0.0D); | ||
var16.vertex(var14 + 1, var11 - 1, 0.0D, 0.0D, 0.0D); | ||
var16.tessellate(); | ||
GL11.glEnable(GL11.GL_BLEND); | ||
ts.start(); | ||
this.renderContentSelection( | ||
iconX - 2, iconY - 2, entryWidth, entryHeight, 1, borderColor, backColor, ts); | ||
ts.tessellate(); | ||
GL11.glEnable(GL11.GL_TEXTURE_2D); | ||
GL11.glDisable(GL11.GL_BLEND); | ||
} | ||
|
||
var9.bindTexture(this.client); | ||
GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); | ||
var16.start(); | ||
var16.color(16777215); | ||
var16.vertex(var10, var11 + var12, 0.0D, 0.0D, 1.0D); | ||
var16.vertex(var10 + var13, var11 + var12, 0.0D, 1.0D, 1.0D); | ||
var16.vertex(var10 + var13, var11, 0.0D, 1.0D, 0.0D); | ||
var16.vertex(var10, var11, 0.0D, 0.0D, 0.0D); | ||
var16.tessellate(); | ||
this.drawTextWithShadow(this.textRenderer, var9.name, var10 + var13 + 2, var11 + 1, 16777215); | ||
this.drawTextWithShadow(this.textRenderer, var9.description1, var10 + var13 + 2, var11 + 12, 8421504); | ||
this.drawTextWithShadow(this.textRenderer, var9.description2, var10 + var13 + 2, var11 + 12 + 10, 8421504); | ||
mapInfo.bindTexture(this.client.textureManager); | ||
ts.start(); | ||
ts.color(16777215); | ||
ts.vertex(iconX, iconY + iconHeight, 0.0D, 0.0D, 1.0D); | ||
ts.vertex(iconX + iconWidth, iconY + iconHeight, 0.0D, 1.0D, 1.0D); | ||
ts.vertex(iconX + iconWidth, iconY, 0.0D, 1.0D, 0.0D); | ||
ts.vertex(iconX, iconY, 0.0D, 0.0D, 0.0D); | ||
ts.tessellate(); | ||
|
||
int textY = iconY; | ||
int textX = iconX + iconWidth; | ||
|
||
exText.drawString(mapInfo.name, textX + 2, textY + 1, 0xFFFFFF, true); | ||
exText.drawString(mapInfo.description1, textX + 2, textY + 12, 0x808080, true); | ||
exText.drawString(mapInfo.description2, textX + 2, textY + 12 + 10, 0x808080, true); | ||
} | ||
|
||
byte var18 = 4; | ||
this.drawBackground(0, this.field_6459_i, 255, 255); | ||
this.drawBackground(this.field_6458_j, this.height, 255, 255); | ||
GL11.glEnable(GL11.GL_BLEND); | ||
GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA); | ||
GL11.glDisable(GL11.GL_ALPHA_TEST); | ||
GL11.glShadeModel(GL11.GL_SMOOTH); | ||
GL11.glDisable(GL11.GL_TEXTURE_2D); | ||
var16.start(); | ||
var16.color(0, 0); | ||
var16.vertex(this.field_6457_l, this.field_6459_i + var18, 0.0D, 0.0D, 1.0D); | ||
var16.vertex(this.field_6456_m, this.field_6459_i + var18, 0.0D, 1.0D, 1.0D); | ||
var16.color(0, 255); | ||
var16.vertex(this.field_6456_m, this.field_6459_i, 0.0D, 1.0D, 0.0D); | ||
var16.vertex(this.field_6457_l, this.field_6459_i, 0.0D, 0.0D, 0.0D); | ||
var16.tessellate(); | ||
var16.start(); | ||
var16.color(0, 255); | ||
var16.vertex(this.field_6457_l, this.field_6458_j, 0.0D, 0.0D, 1.0D); | ||
var16.vertex(this.field_6456_m, this.field_6458_j, 0.0D, 1.0D, 1.0D); | ||
var16.color(0, 0); | ||
var16.vertex(this.field_6456_m, this.field_6458_j - var18, 0.0D, 1.0D, 0.0D); | ||
var16.vertex(this.field_6457_l, this.field_6458_j - var18, 0.0D, 0.0D, 0.0D); | ||
var16.tessellate(); | ||
GL11.glEnable(GL11.GL_TEXTURE_2D); | ||
GL11.glShadeModel(GL11.GL_FLAT); | ||
GL11.glEnable(GL11.GL_ALPHA_TEST); | ||
GL11.glDisable(GL11.GL_BLEND); | ||
TranslationStorage var19 = TranslationStorage.getInstance(); | ||
this.drawTextWithShadowCentred(this.textRenderer, var19.translate("mapList.title"), this.width / 2, 16, 16777215); | ||
super.render(var1, var2, var3); | ||
} | ||
|
||
public void tick() { | ||
super.tick(); | ||
--this.field_6454_o; | ||
} | ||
|
||
public void drawBackground(int var1, int var2, int var3, int var4) { | ||
Tessellator var5 = Tessellator.INSTANCE; | ||
GL11.glBindTexture(GL11.GL_TEXTURE_2D, this.client.textureManager.getTextureId("/gui/background.png")); | ||
GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); | ||
float var6 = 32.0F; | ||
var5.start(); | ||
var5.color(4210752, var4); | ||
var5.vertex(0.0D, var2, 0.0D, 0.0D, (float) var2 / var6); | ||
var5.vertex(this.width, var2, 0.0D, (float) this.width / var6, (float) var2 / var6); | ||
var5.color(4210752, var3); | ||
var5.vertex(this.width, var1, 0.0D, (float) this.width / var6, (float) var1 / var6); | ||
var5.vertex(0.0D, var1, 0.0D, 0.0D, (float) var1 / var6); | ||
var5.tessellate(); | ||
} | ||
} |
Oops, something went wrong.