aboutsummaryrefslogtreecommitdiff
path: root/src/main
diff options
context:
space:
mode:
Diffstat (limited to 'src/main')
-rw-r--r--src/main/java/de/hysky/skyblocker/skyblock/FancyStatusBars.java18
-rw-r--r--src/main/java/de/hysky/skyblocker/skyblock/fancybars/StatusBarsConfigScreen.java99
2 files changed, 94 insertions, 23 deletions
diff --git a/src/main/java/de/hysky/skyblocker/skyblock/FancyStatusBars.java b/src/main/java/de/hysky/skyblocker/skyblock/FancyStatusBars.java
index 6995c4d2..a29d3f60 100644
--- a/src/main/java/de/hysky/skyblocker/skyblock/FancyStatusBars.java
+++ b/src/main/java/de/hysky/skyblocker/skyblock/FancyStatusBars.java
@@ -110,25 +110,33 @@ public class FancyStatusBars {
int x = width/2 - 91;
int y = height - 33 - 10*i;
- for (StatusBar bar : row) {
+ for (int j = 0; j < row.size(); j++) {
+ StatusBar bar = row.get(j);
bar.setX(x);
bar.setY(y);
bar.setWidth((int) ((bar.size / 12.f)*hotbarSize));
x += bar.getWidth();
+ bar.gridY = i+1;
+ bar.gridX = j+1;
}
}
+ final int maxSize = 3;
// BOTTOM LEFT
for (int i = 0; i < barGrid.getBottomLeftSize(); i++) {
List<StatusBar> row = barGrid.getRow(-(i + 1), false);
if (row.isEmpty()) continue;
int x = width/2 - 91 - 2;
int y = height - 15-10*i;
- for (StatusBar bar : row) {
+ for (int j = 0; j < row.size(); j++) {
+ StatusBar bar = row.get(j);
+ bar.size = Math.min(bar.size, maxSize);
bar.setY(y);
bar.setWidth(bar.size*25);
x -= bar.getWidth();
bar.setX(x);
+ bar.gridX = -j-1;
+ bar.gridY = -i-1;
}
}
// BOTTOM RIGHT
@@ -137,11 +145,15 @@ public class FancyStatusBars {
if (row.isEmpty()) continue;
int x = width/2 + 91 + 2;
int y = height - 15-10*i;
- for (StatusBar bar : row) {
+ for (int j = 0; j < row.size(); j++) {
+ StatusBar bar = row.get(j);
+ bar.size = Math.min(bar.size, maxSize);
bar.setX(x);
bar.setY(y);
bar.setWidth(bar.size*25);
x += bar.getWidth();
+ bar.gridX = j+1;
+ bar.gridY = -i-1;
}
}
}
diff --git a/src/main/java/de/hysky/skyblocker/skyblock/fancybars/StatusBarsConfigScreen.java b/src/main/java/de/hysky/skyblocker/skyblock/fancybars/StatusBarsConfigScreen.java
index c1605303..23b5b71c 100644
--- a/src/main/java/de/hysky/skyblocker/skyblock/fancybars/StatusBarsConfigScreen.java
+++ b/src/main/java/de/hysky/skyblocker/skyblock/fancybars/StatusBarsConfigScreen.java
@@ -11,7 +11,9 @@ import net.minecraft.text.Text;
import net.minecraft.util.Identifier;
import org.jetbrains.annotations.Nullable;
+import java.util.Collection;
import java.util.HashMap;
+import java.util.Iterator;
import java.util.Map;
public class StatusBarsConfigScreen extends Screen {
@@ -21,60 +23,100 @@ public class StatusBarsConfigScreen extends Screen {
private final Map<ScreenRect, int[]> meaningFullName = new HashMap<>();
private @Nullable StatusBar cursorBar = null;
+
public StatusBarsConfigScreen() {
super(Text.of("Status Bars Config"));
FancyStatusBars.updatePositions();
}
+ private final int[] currentCoords = new int[]{0, 0};
+
@Override
public void render(DrawContext context, int mouseX, int mouseY, float delta) {
for (ScreenRect screenRect : meaningFullName.keySet()) {
context.fillGradient(screenRect.position().x(), screenRect.position().y(), screenRect.position().x() + screenRect.width(), screenRect.position().y() + screenRect.height(), 0xFFFF0000, 0xFF0000FF);
}
super.render(context, mouseX, mouseY, delta);
- context.drawGuiTexture(HOTBAR_TEXTURE, width/2 - 91, height-22, 182, 22);
+ context.drawGuiTexture(HOTBAR_TEXTURE, width / 2 - 91, height - 22, 182, 22);
if (cursorBar != null) {
cursorBar.renderCursor(context, mouseX, mouseY, delta);
+ ScreenRect mouseRect = new ScreenRect(new ScreenPos(mouseX - 1, mouseY - 1), 3, 3);
- mainLoop: for (ScreenRect screenRect : meaningFullName.keySet()) {
+ if (FancyStatusBars.barGrid.getTopSize() == 0 && topBarZone.overlaps(mouseRect) && currentCoords[1] != 1) {
+ FancyStatusBars.barGrid.remove(cursorBar.gridX, cursorBar.gridY);
+ FancyStatusBars.barGrid.addRow(1, true);
+ FancyStatusBars.barGrid.add(1, 1, cursorBar);
+ currentCoords[1] = 1;
+ FancyStatusBars.updatePositions();
+ } else if (FancyStatusBars.barGrid.getBottomLeftSize() == 0 && bottomLeftBarZone.overlaps(mouseRect) && (currentCoords[0] != -1 || currentCoords[1] != -1)) {
+ FancyStatusBars.barGrid.remove(cursorBar.gridX, cursorBar.gridY);
+ FancyStatusBars.barGrid.addRow(-1, false);
+ FancyStatusBars.barGrid.add(-1, -1, cursorBar);
+ currentCoords[0] = -1;
+ currentCoords[1] = -1;
+ FancyStatusBars.updatePositions();
+ } else if (FancyStatusBars.barGrid.getBottomRightSize() == 0 && bottomRightBarZone.overlaps(mouseRect) && (currentCoords[0] != 1 || currentCoords[1] != -1)) {
+ FancyStatusBars.barGrid.remove(cursorBar.gridX, cursorBar.gridY);
+ FancyStatusBars.barGrid.addRow(-1, true);
+ FancyStatusBars.barGrid.add(1, -1, cursorBar);
+ currentCoords[0] = 1;
+ currentCoords[1] = -1;
+ FancyStatusBars.updatePositions();
+ } else rectLoop:for (ScreenRect screenRect : meaningFullName.keySet()) {
for (NavigationDirection value : NavigationDirection.values()) {
- boolean overlaps = screenRect.getBorder(value).overlaps(new ScreenRect(new ScreenPos(mouseX - 1, mouseY - 1), 3, 3));
+ boolean overlaps = screenRect.getBorder(value).add(value).overlaps(mouseRect);
+
if (overlaps) {
int[] ints = meaningFullName.get(screenRect);
- if (ints[0] != cursorBar.gridX || ints[1] != cursorBar.gridY) {
+ if (ints[0] != currentCoords[0] || ints[1] != currentCoords[1]) {
+ currentCoords[0] = ints[0];
+ currentCoords[1] = ints[1];
System.out.println("Moving " + cursorBar);
System.out.println(ints[0] + " " + ints[1]);
FancyStatusBars.barGrid.remove(cursorBar.gridX, cursorBar.gridY);
+
+ int offset;
if (value.getAxis().equals(NavigationAxis.VERTICAL)) {
- if (value.isPositive()) {
- FancyStatusBars.barGrid.addRow(ints[1]+1, ints[0]>0);
- FancyStatusBars.barGrid.add(1, ints[1] + 1, cursorBar);
+ if (!value.isPositive()) {
+ offset = ints[1] > 0 ? 1 : 0;
} else {
- FancyStatusBars.barGrid.addRow(ints[1], ints[0]>0);
- FancyStatusBars.barGrid.add(1, ints[1], cursorBar);
+ offset = ints[1] > 0 ? 0 : -1;
}
+
+ FancyStatusBars.barGrid.addRow(ints[1] + offset, ints[0] > 0);
+ FancyStatusBars.barGrid.add(ints[0] < 0 ? -1 : 1, ints[1] + offset, cursorBar);
} else {
if (value.isPositive()) {
- FancyStatusBars.barGrid.add(ints[0] + 1, ints[1], cursorBar);
+ offset = ints[0] > 0 ? 1 : 0;
} else {
- FancyStatusBars.barGrid.add(ints[0], ints[1], cursorBar);
+ offset = ints[0] > 0 ? 0 : -1;
}
+
+ FancyStatusBars.barGrid.add(ints[0] + offset, ints[1], cursorBar);
}
FancyStatusBars.updatePositions();
System.out.println("After " + cursorBar);
- break mainLoop;
}
- break;
+ break rectLoop;
}
}
}
}
}
+ private ScreenRect topBarZone = new ScreenRect(0, 0, 0, 0);
+ private ScreenRect bottomLeftBarZone = new ScreenRect(0, 0, 0, 0);
+ private ScreenRect bottomRightBarZone = new ScreenRect(0, 0, 0, 0);
+
@Override
protected void init() {
super.init();
- FancyStatusBars.statusBars.values().forEach(this::setup);
+ Collection<StatusBar> values = FancyStatusBars.statusBars.values();
+ values.forEach(this::setup);
+ checkZeroCoordinates(values);
+ topBarZone = new ScreenRect(width / 2 - 91, height - 22 - 15, 182, 15);
+ bottomLeftBarZone = new ScreenRect(width / 2 - 91 - 20, height - 22, 20, 22);
+ bottomRightBarZone = new ScreenRect(width / 2 + 91, height - 22, 20, 22);
}
private void setup(StatusBar statusBar) {
@@ -82,10 +124,23 @@ public class StatusBarsConfigScreen extends Screen {
statusBar.setOnClick(this::onClick);
}
+ private static void checkZeroCoordinates(Iterable<StatusBar> bars) {
+ int offset = 0;
+ for (StatusBar statusBar : bars) {
+ if (statusBar.gridX == 0 || statusBar.gridY == 0) {
+ statusBar.setX(5);
+ statusBar.setY(5 + offset);
+ statusBar.setWidth(30);
+ offset += statusBar.getHeight();
+ }
+ }
+ }
+
@Override
public void removed() {
super.removed();
FancyStatusBars.statusBars.values().forEach(statusBar -> statusBar.setOnClick(null));
+ FancyStatusBars.updatePositions();
}
@Override
@@ -95,14 +150,16 @@ public class StatusBarsConfigScreen extends Screen {
private void onClick(StatusBar statusBar) {
cursorBar = statusBar;
- meaningFullName.clear();
FancyStatusBars.barGrid.remove(statusBar.gridX, statusBar.gridY);
FancyStatusBars.updatePositions();
- FancyStatusBars.statusBars.values().forEach(statusBar1 -> {
- meaningFullName.put(
- new ScreenRect(new ScreenPos(statusBar1.getX(), statusBar1.getY()), statusBar1.getWidth(), statusBar1.getHeight()),
- new int[]{statusBar1.gridX, statusBar1.gridY});
- });
+ updateScreenRects();
+ }
+
+ private void updateScreenRects() {
+ meaningFullName.clear();
+ FancyStatusBars.statusBars.values().forEach(statusBar1 -> meaningFullName.put(
+ new ScreenRect(new ScreenPos(statusBar1.getX(), statusBar1.getY()), statusBar1.getWidth(), statusBar1.getHeight()),
+ new int[]{statusBar1.gridX, statusBar1.gridY}));
}
@Override
@@ -110,6 +167,8 @@ public class StatusBarsConfigScreen extends Screen {
if (cursorBar != null) {
cursorBar = null;
FancyStatusBars.updatePositions();
+ checkZeroCoordinates(FancyStatusBars.statusBars.values());
+ updateScreenRects();
return true;
}
return super.mouseReleased(mouseX, mouseY, button);