diff options
Diffstat (limited to 'src/main/java/cc/polyfrost/oneconfig/internal')
9 files changed, 359 insertions, 20 deletions
diff --git a/src/main/java/cc/polyfrost/oneconfig/internal/assets/Colors.java b/src/main/java/cc/polyfrost/oneconfig/internal/assets/Colors.java index 84f766f..9362873 100644 --- a/src/main/java/cc/polyfrost/oneconfig/internal/assets/Colors.java +++ b/src/main/java/cc/polyfrost/oneconfig/internal/assets/Colors.java @@ -42,9 +42,6 @@ public class Colors { public static final int ERROR_800_80 = new Color(145, 24, 24, 204).getRGB(); // Red 800 public static final int ERROR_300 = new Color(253, 155, 155).getRGB(); public static final int ERROR_300_80 = new Color(253, 155, 155, 204).getRGB(); - public static boolean ROUNDED_CORNERS = true; - public static final float CORNER_RADIUS_WIN = 20f; - public static final float CORNER_RADIUS = 12f; /** List of all colors used by Minecraft in its code. * Source: <a href="https://www.digminecraft.com/lists/color_list_pc.php">Click Here</a> @@ -71,7 +68,5 @@ public class Colors { public static final int GRAY = new Color(170, 170, 170).getRGB(); // Mapped to 7 public static final int DARK_GRAY = new Color(85, 85, 85).getRGB(); // Mapped to 8 public static final int BLACK = new Color(0, 0, 0).getRGB(); // Mapped to 0 - - } } diff --git a/src/main/java/cc/polyfrost/oneconfig/internal/command/OneConfigCommand.java b/src/main/java/cc/polyfrost/oneconfig/internal/command/OneConfigCommand.java index 93d3c42..8aca921 100644 --- a/src/main/java/cc/polyfrost/oneconfig/internal/command/OneConfigCommand.java +++ b/src/main/java/cc/polyfrost/oneconfig/internal/command/OneConfigCommand.java @@ -1,6 +1,6 @@ package cc.polyfrost.oneconfig.internal.command; -import cc.polyfrost.oneconfig.gui.HudGui; +import cc.polyfrost.oneconfig.internal.gui.HudGui; import cc.polyfrost.oneconfig.gui.OneConfigGui; import cc.polyfrost.oneconfig.utils.gui.GuiUtils; import cc.polyfrost.oneconfig.utils.InputUtils; @@ -23,7 +23,7 @@ public class OneConfigCommand { private static class HUDSubCommand { @Main private static void main() { - GuiUtils.displayScreen(new HudGui(false)); + GuiUtils.displayScreen(new HudGui()); } } diff --git a/src/main/java/cc/polyfrost/oneconfig/internal/config/Preferences.java b/src/main/java/cc/polyfrost/oneconfig/internal/config/Preferences.java index cb93f0a..bf290b7 100644 --- a/src/main/java/cc/polyfrost/oneconfig/internal/config/Preferences.java +++ b/src/main/java/cc/polyfrost/oneconfig/internal/config/Preferences.java @@ -1,5 +1,6 @@ package cc.polyfrost.oneconfig.internal.config; +import cc.polyfrost.oneconfig.config.annotations.Exclude; import cc.polyfrost.oneconfig.config.annotations.KeyBind; import cc.polyfrost.oneconfig.config.annotations.Slider; import cc.polyfrost.oneconfig.config.annotations.Switch; @@ -9,7 +10,6 @@ import cc.polyfrost.oneconfig.internal.gui.BlurHandler; import cc.polyfrost.oneconfig.libs.universal.UKeyboard; import cc.polyfrost.oneconfig.platform.Platform; import cc.polyfrost.oneconfig.utils.TickDelay; -import cc.polyfrost.oneconfig.utils.gui.GuiUtils; public class Preferences extends InternalConfig { @Switch( @@ -23,10 +23,6 @@ public class Preferences extends InternalConfig { ) public static OneKeyBind oneConfigKeyBind = new OneKeyBind(UKeyboard.KEY_RSHIFT); - @Switch( - name = "Easter Egg 1" - ) - public static boolean easterEgg1 = true; @Switch( name = "Use custom GUI scale", @@ -43,6 +39,7 @@ public class Preferences extends InternalConfig { ) public static float customScale = 1f; + @Exclude private static Preferences INSTANCE; public Preferences() { diff --git a/src/main/java/cc/polyfrost/oneconfig/internal/config/compatibility/vigilance/VigilanceConfig.java b/src/main/java/cc/polyfrost/oneconfig/internal/config/compatibility/vigilance/VigilanceConfig.java index 689bf25..87ffc47 100644 --- a/src/main/java/cc/polyfrost/oneconfig/internal/config/compatibility/vigilance/VigilanceConfig.java +++ b/src/main/java/cc/polyfrost/oneconfig/internal/config/compatibility/vigilance/VigilanceConfig.java @@ -184,13 +184,10 @@ public class VigilanceConfig extends Config { } @Override - protected void setColor(OneColor color) { - if (cachedColor != color) { - Color newColor = new Color(color.getRGB(), true); - try { - this.color.set(parent, newColor); - } catch (IllegalAccessException ignored) { - } + protected void set(Object color) throws IllegalAccessException { + if (color instanceof OneColor) { + Color newColor = ((OneColor) color).toJavaColor(); + this.color.set(parent, newColor); } } } diff --git a/src/main/java/cc/polyfrost/oneconfig/internal/gui/HudGui.java b/src/main/java/cc/polyfrost/oneconfig/internal/gui/HudGui.java new file mode 100644 index 0000000..1710832 --- /dev/null +++ b/src/main/java/cc/polyfrost/oneconfig/internal/gui/HudGui.java @@ -0,0 +1,269 @@ +package cc.polyfrost.oneconfig.internal.gui; + +import cc.polyfrost.oneconfig.gui.GuiPause; +import cc.polyfrost.oneconfig.gui.OneConfigGui; +import cc.polyfrost.oneconfig.hud.Hud; +import cc.polyfrost.oneconfig.hud.Position; +import cc.polyfrost.oneconfig.internal.hud.utils.GrabOffset; +import cc.polyfrost.oneconfig.internal.hud.utils.SnappingLine; +import cc.polyfrost.oneconfig.internal.config.core.ConfigCore; +import cc.polyfrost.oneconfig.internal.hud.HudCore; +import cc.polyfrost.oneconfig.libs.universal.UKeyboard; +import cc.polyfrost.oneconfig.libs.universal.UMatrixStack; +import cc.polyfrost.oneconfig.libs.universal.UResolution; +import cc.polyfrost.oneconfig.libs.universal.UScreen; +import cc.polyfrost.oneconfig.renderer.RenderManager; +import cc.polyfrost.oneconfig.utils.MathUtils; +import cc.polyfrost.oneconfig.utils.gui.GuiUtils; +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; + +import java.awt.*; +import java.util.ArrayList; +import java.util.HashMap; + +public class HudGui extends UScreen implements GuiPause { + private static final int SNAPPING_DISTANCE = 10; + private final HashMap<Hud, GrabOffset> editingHuds = new HashMap<>(); + private boolean isDragging; + private boolean isSelecting; + private float selectX; + private float selectY; + private boolean isScaling; + + public HudGui() { + super(); + } + + @Override + public void initScreen(int width, int height) { + HudCore.editing = true; + UKeyboard.allowRepeatEvents(true); + super.initScreen(width, height); + } + + @Override + public void onDrawScreen(@NotNull UMatrixStack matrixStack, int mouseX, int mouseY, float partialTicks) { + int lineWidth = Math.max(1, Math.round(Math.min(UResolution.getWindowWidth() / 1920f, UResolution.getWindowHeight() / 1080f))); + if (isDragging) { + RenderManager.setupAndDraw(vg -> setHudPositions(vg, mouseX, mouseY, true, true, lineWidth)); + } else if (isSelecting) { + getHudsInRegion(selectX, selectY, mouseX, mouseY); + } else if (isScaling && editingHuds.size() == 1) { + RenderManager.setupAndDraw(vg -> { + Hud hud = (Hud) editingHuds.keySet().toArray()[0]; + Position position = hud.position; + float scaleX = getXSnapping(vg, lineWidth, mouseX, position.getWidth(), false); + hud.setScale(MathUtils.clamp((scaleX - position.getX()) / (position.getWidth() / hud.getScale()), 0.3f, 10f), true); + }); + } + + float scaleFactor = (float) UResolution.getScaleFactor(); + for (Hud hud : HudCore.huds) { + if (!hud.isEnabled()) continue; + Position position = hud.position; + hud.drawAll(matrixStack, true); + if (editingHuds.containsKey(hud)) + RenderManager.setupAndDraw(true, vg -> RenderManager.drawRect(vg, position.getX(), position.getY(), position.getWidth(), position.getHeight(), new Color(0, 128, 128, 60).getRGB())); + RenderManager.setupAndDraw(vg -> { + RenderManager.drawLine(vg, position.getX() * scaleFactor - lineWidth / 2f, position.getY() * scaleFactor - lineWidth / 2f, position.getRightX() * scaleFactor + lineWidth / 2f, position.getY() * scaleFactor - lineWidth / 2f, lineWidth, new Color(255, 255, 255).getRGB()); + RenderManager.drawLine(vg, position.getX() * scaleFactor - lineWidth / 2f, position.getBottomY() * scaleFactor + lineWidth / 2f, position.getRightX() * scaleFactor + lineWidth / 2f, position.getBottomY() * scaleFactor + lineWidth / 2f, lineWidth, new Color(255, 255, 255).getRGB()); + RenderManager.drawLine(vg, position.getX() * scaleFactor - lineWidth / 2f, position.getY() * scaleFactor - lineWidth / 2f, position.getX() * scaleFactor - lineWidth / 2f, position.getBottomY() * scaleFactor + lineWidth / 2f, lineWidth, new Color(255, 255, 255).getRGB()); + RenderManager.drawLine(vg, position.getRightX() * scaleFactor + lineWidth / 2f, position.getY() * scaleFactor - lineWidth / 2f, position.getRightX() * scaleFactor + lineWidth / 2f, position.getBottomY() * scaleFactor + lineWidth / 2f, lineWidth, new Color(255, 255, 255).getRGB()); + }); + if (editingHuds.containsKey(hud) && editingHuds.size() == 1) + RenderManager.setupAndDraw(true, vg -> RenderManager.drawRect(vg, position.getRightX() - 4, position.getBottomY() - 4, 8, 8, new Color(0, 128, 128, 200).getRGB())); + } + + if (isSelecting) + RenderManager.setupAndDraw(true, vg -> RenderManager.drawRect(vg, selectX, selectY, mouseX - selectX, mouseY - selectY, new Color(0, 0, 255, 100).getRGB())); + } + + @Override + public void onMouseClicked(double mouseX, double mouseY, int mouseButton) { + super.onMouseClicked(mouseX, mouseY, mouseButton); + if (mouseButton != 0) return; + isDragging = false; + isSelecting = false; + isScaling = false; + if (editingHuds.size() == 1) { + Position position = ((Hud) editingHuds.keySet().toArray()[0]).position; + if (mouseX >= position.getRightX() - 7 && mouseX <= position.getRightX() + 7 && mouseY >= position.getBottomY() - 7 && mouseY <= position.getBottomY() + 7) { + isScaling = true; + return; + } + } + for (Hud hud : HudCore.huds) { + if (!hud.isEnabled() || !mouseClickedHud(hud, (float) mouseX, (float) mouseY)) continue; + if (!editingHuds.containsKey(hud)) { + if (!UKeyboard.isCtrlKeyDown()) editingHuds.clear(); + editingHuds.put(hud, new GrabOffset()); + } + isDragging = true; + editingHuds.forEach((hud2, grabOffset) -> grabOffset.setOffset((float) (mouseX - hud2.position.getX()), (float) (mouseY - hud2.position.getY()))); + return; + } + isSelecting = true; + selectX = (float) mouseX; + selectY = (float) mouseY; + } + + @Override + public void onMouseReleased(double mouseX, double mouseY, int state) { + isDragging = false; + isSelecting = false; + isScaling = false; + super.onMouseReleased(mouseX, mouseY, state); + } + + @Override + public void onKeyPressed(int keyCode, char typedChar, @Nullable UKeyboard.Modifiers modifiers) { + if (isDragging) return; + editingHuds.forEach((hud, grabOffset) -> grabOffset.setOffset(-hud.position.getX(), -hud.position.getY())); + if (keyCode == UKeyboard.KEY_UP) { + setHudPositions(0f, -1f, false); + } else if (keyCode == UKeyboard.KEY_DOWN) { + setHudPositions(0f, 1f, false); + } else if (keyCode == UKeyboard.KEY_LEFT) { + setHudPositions(-1f, 0f, false); + } else if (keyCode == UKeyboard.KEY_RIGHT) { + setHudPositions(1f, 0f, false); + } + super.onKeyPressed(keyCode, typedChar, modifiers); + } + + @Override + public void onScreenClose() { + super.onScreenClose(); + HudCore.editing = false; + UKeyboard.allowRepeatEvents(false); + ConfigCore.saveAll(); + GuiUtils.displayScreen(OneConfigGui.create()); + } + + @Override + public boolean doesGuiPauseGame() { + return false; + } + + private void getHudsInRegion(float x1, float y1, float x2, float y2) { + if (x1 > x2) { + float temp = x1; + x1 = x2; + x2 = temp; + } + if (y1 > y2) { + float temp = y1; + y1 = y2; + y2 = temp; + } + + editingHuds.clear(); + for (Hud hud : HudCore.huds) { + if (!hud.isEnabled()) continue; + Position pos = hud.position; + if ((x1 <= pos.getX() && x2 >= pos.getX() || x1 <= pos.getRightX() && x2 >= pos.getRightX()) + && (y1 <= pos.getY() && y2 >= pos.getY() || y1 <= pos.getBottomY() && y2 >= pos.getBottomY())) + editingHuds.put(hud, new GrabOffset()); + } + } + + private void setHudPositions(long vg, float mouseX, float mouseY, boolean snap, boolean locked, int lineWidth) { + for (Hud hud : editingHuds.keySet()) { + GrabOffset grabOffset = editingHuds.get(hud); + Position position = hud.position; + float x = mouseX - grabOffset.getX(); + float y = mouseY - grabOffset.getY(); + + if (editingHuds.size() == 1 && snap) { + x = getXSnapping(vg, lineWidth, x, position.getWidth(), true); + y = getYSnapping(vg, lineWidth, y, position.getHeight(), true); + } + + if (locked) { + if (x < 0) x = 0; + else if (x + position.getWidth() > UResolution.getScaledWidth()) + x = UResolution.getScaledWidth() - position.getWidth(); + if (y < 0) y = 0; + else if (y + position.getHeight() > UResolution.getScaledHeight()) + y = UResolution.getScaledHeight() - position.getHeight(); + } + + position.setPosition(x, y); + } + } + + private void setHudPositions(float mouseX, float mouseY, boolean locked) { + setHudPositions(0, mouseX, mouseY, false, locked, 0); + } + + private boolean mouseClickedHud(Hud hud, float mouseX, float mouseY) { + Position position = hud.position; + return mouseX >= position.getX() && mouseX <= position.getRightX() && + mouseY >= position.getY() && mouseY <= position.getBottomY(); + } + + private float getXSnapping(long vg, float lineWidth, float x, float width, boolean multipleSides) { + ArrayList<Float> lines = getXSnappingLines(); + ArrayList<SnappingLine> snappingLines = new ArrayList<>(); + float closest = (float) (SNAPPING_DISTANCE / UResolution.getScaleFactor()); + for (Float line : lines) { + SnappingLine snappingLine = new SnappingLine(line, x, width, multipleSides); + if (Math.round(snappingLine.getDistance()) == Math.round(closest)) snappingLines.add(snappingLine); + else if (snappingLine.getDistance() < closest) { + closest = snappingLine.getDistance(); + snappingLines.clear(); + snappingLines.add(snappingLine); + } + } + if (snappingLines.isEmpty()) return x; + for (SnappingLine snappingLine : snappingLines) { + snappingLine.drawLine(vg, lineWidth, true); + } + return snappingLines.get(0).getPosition(); + } + + private ArrayList<Float> getXSnappingLines() { + ArrayList<Float> lines = new ArrayList<>(); + lines.add(UResolution.getScaledWidth() / 2f); + for (Hud hud : HudCore.huds) { + if (!hud.isEnabled() || editingHuds.containsKey(hud)) continue; + lines.add(hud.position.getX()); + lines.add(hud.position.getCenterX()); + lines.add(hud.position.getRightX()); + } + return lines; + } + + private float getYSnapping(long vg, float lineWidth, float y, float height, boolean multipleSides) { + ArrayList<Float> lines = getYSnappingLines(); + ArrayList<SnappingLine> snappingLines = new ArrayList<>(); + float closest = (float) (SNAPPING_DISTANCE / UResolution.getScaleFactor()); + for (Float line : lines) { + SnappingLine snappingLine = new SnappingLine(line, y, height, multipleSides); + if (Math.round(snappingLine.getDistance()) == Math.round(closest)) snappingLines.add(snappingLine); + else if (snappingLine.getDistance() < closest) { + closest = snappingLine.getDistance(); + snappingLines.clear(); + snappingLines.add(snappingLine); + } + } + if (snappingLines.isEmpty()) return y; + for (SnappingLine snappingLine : snappingLines) { + snappingLine.drawLine(vg, lineWidth, false); + } + return snappingLines.get(0).getPosition(); + } + + private ArrayList<Float> getYSnappingLines() { + ArrayList<Float> lines = new ArrayList<>(); + lines.add(UResolution.getScaledHeight() / 2f); + for (Hud hud : HudCore.huds) { + if (!hud.isEnabled() || editingHuds.containsKey(hud)) continue; + lines.add(hud.position.getY()); + lines.add(hud.position.getCenterY()); + lines.add(hud.position.getBottomY()); + } + return lines; + } +}
\ No newline at end of file diff --git a/src/main/java/cc/polyfrost/oneconfig/internal/hud/HudCore.java b/src/main/java/cc/polyfrost/oneconfig/internal/hud/HudCore.java index 31604ed..812a8e4 100644 --- a/src/main/java/cc/polyfrost/oneconfig/internal/hud/HudCore.java +++ b/src/main/java/cc/polyfrost/oneconfig/internal/hud/HudCore.java @@ -16,7 +16,7 @@ public class HudCore { if (editing) return; for (Hud hud : huds) { if (!hud.isEnabled()) continue; - hud.drawAll(event.matrices, hud.getXScaled(UResolution.getScaledWidth()), hud.getYScaled(UResolution.getScaledHeight()), hud.scale, true); + hud.drawAll(event.matrices, false); } } } diff --git a/src/main/java/cc/polyfrost/oneconfig/internal/hud/utils/GrabOffset.java b/src/main/java/cc/polyfrost/oneconfig/internal/hud/utils/GrabOffset.java new file mode 100644 index 0000000..122ff77 --- /dev/null +++ b/src/main/java/cc/polyfrost/oneconfig/internal/hud/utils/GrabOffset.java @@ -0,0 +1,27 @@ +package cc.polyfrost.oneconfig.internal.hud.utils; + +public class GrabOffset { + private float offsetX; + private float offsetY; + + public GrabOffset(float offsetX, float offsetY) { + setOffset(offsetX, offsetY); + } + + public GrabOffset() { + this(0, 0); + } + + public void setOffset(float offsetX, float offsetY) { + this.offsetX = offsetX; + this.offsetY = offsetY; + } + + public float getX() { + return offsetX; + } + + public float getY() { + return offsetY; + } +} diff --git a/src/main/java/cc/polyfrost/oneconfig/internal/hud/utils/SnappingLine.java b/src/main/java/cc/polyfrost/oneconfig/internal/hud/utils/SnappingLine.java new file mode 100644 index 0000000..2a89e1f --- /dev/null +++ b/src/main/java/cc/polyfrost/oneconfig/internal/hud/utils/SnappingLine.java @@ -0,0 +1,49 @@ +package cc.polyfrost.oneconfig.internal.hud.utils; + +import cc.polyfrost.oneconfig.libs.universal.UResolution; +import cc.polyfrost.oneconfig.renderer.RenderManager; + +import java.awt.*; + +public class SnappingLine { + private static final int COLOR = new Color(138, 43, 226).getRGB(); + private final float line; + private final float distance; + private final float position; + + public SnappingLine(float line, float left, float size, boolean multipleSides) { + this.line = line; + float center = left + size / 2f; + float right = left + size; + float leftDistance = Math.abs(line - left); + float centerDistance = Math.abs(line - center); + float rightDistance = Math.abs(line - right); + if (!multipleSides || leftDistance <= centerDistance && leftDistance <= rightDistance) { + distance = leftDistance; + position = line; + } else if (centerDistance <= rightDistance) { + distance = centerDistance; + position = line - size / 2f; + } else { + distance = rightDistance; + position = line - size; + } + } + + public void drawLine(long vg, float lineWidth, boolean isX) { + float pos = (float) (line * UResolution.getScaleFactor() - lineWidth / 2f); + if (isX) { + RenderManager.drawLine(vg, pos, 0, pos, UResolution.getWindowHeight(), lineWidth, COLOR); + } else { + RenderManager.drawLine(vg, 0, pos, UResolution.getWindowWidth(), pos, lineWidth, COLOR); + } + } + + public float getPosition() { + return position; + } + + public float getDistance() { + return distance; + } +} diff --git a/src/main/java/cc/polyfrost/oneconfig/internal/init/OneConfigInit.java b/src/main/java/cc/polyfrost/oneconfig/internal/init/OneConfigInit.java index 1f70815..60480a2 100644 --- a/src/main/java/cc/polyfrost/oneconfig/internal/init/OneConfigInit.java +++ b/src/main/java/cc/polyfrost/oneconfig/internal/init/OneConfigInit.java @@ -2,10 +2,15 @@ package cc.polyfrost.oneconfig.internal.init; import org.spongepowered.asm.mixin.Mixins; +import java.io.File; + @SuppressWarnings("unused") public class OneConfigInit { public static void initialize(String[] args) { Mixins.addConfiguration("mixins.oneconfig.json"); + final File oneConfigDir = new File("./OneConfig"); + oneConfigDir.mkdirs(); + new File(oneConfigDir, "profiles").mkdirs(); } } |