Skip to content

Commit

Permalink
Made use of ScrollableWidget in AC_GuiMapSelect
Browse files Browse the repository at this point in the history
  • Loading branch information
TechPizzaDev committed Aug 28, 2023
1 parent cb852e8 commit f290028
Show file tree
Hide file tree
Showing 4 changed files with 166 additions and 211 deletions.
304 changes: 123 additions & 181 deletions src/main/java/dev/adventurecraft/awakening/common/AC_GuiMapSelect.java
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();
}
}
Loading

0 comments on commit f290028

Please sign in to comment.