From ad2e81c54ebab14a001946f82809ebc9a005ec5d Mon Sep 17 00:00:00 2001 From: Christian Knaapen Date: Sun, 13 Feb 2022 16:23:22 +0100 Subject: [PATCH] Added build mode categories with colored lines. Hiding pyramid/cone/dome buttons for now. Changed icon of normal mode and renamed to disable. --- .../buildmode/BuildModes.java | 54 ++++++++++++------ .../gui/buildmode/RadialMenu.java | 25 +++++--- .../assets/effortlessbuilding/lang/en_us.json | 6 +- .../textures/icons/normal.png | Bin 317 -> 333 bytes .../textures/icons/normal_plus.png | Bin 355 -> 317 bytes 5 files changed, 56 insertions(+), 29 deletions(-) diff --git a/src/main/java/nl/requios/effortlessbuilding/buildmode/BuildModes.java b/src/main/java/nl/requios/effortlessbuilding/buildmode/BuildModes.java index eb4ca8d..f77aa90 100644 --- a/src/main/java/nl/requios/effortlessbuilding/buildmode/BuildModes.java +++ b/src/main/java/nl/requios/effortlessbuilding/buildmode/BuildModes.java @@ -1,5 +1,6 @@ package nl.requios.effortlessbuilding.buildmode; +import com.mojang.math.Vector4f; import net.minecraft.world.entity.player.Player; import net.minecraft.core.Direction; import net.minecraft.core.BlockPos; @@ -247,29 +248,31 @@ public class BuildModes { } public enum BuildModeEnum { - NORMAL("normal", new Normal()), - NORMAL_PLUS("normal_plus", new NormalPlus(), OptionEnum.BUILD_SPEED), - LINE("line", new Line() /*, OptionEnum.THICKNESS*/), - WALL("wall", new Wall(), OptionEnum.FILL), - FLOOR("floor", new Floor(), OptionEnum.FILL), - DIAGONAL_LINE("diagonal_line", new DiagonalLine() /*, OptionEnum.THICKNESS*/), - DIAGONAL_WALL("diagonal_wall", new DiagonalWall() /*, OptionEnum.FILL*/), - SLOPE_FLOOR("slope_floor", new SlopeFloor(), OptionEnum.RAISED_EDGE), - CIRCLE("circle", new Circle(), OptionEnum.CIRCLE_START, OptionEnum.FILL), - CYLINDER("cylinder", new Cylinder(), OptionEnum.CIRCLE_START, OptionEnum.FILL), - SPHERE("sphere", new Sphere(), OptionEnum.CIRCLE_START, OptionEnum.FILL), - CUBE("cube", new Cube(), OptionEnum.CUBE_FILL), - PYRAMID("pyramid", new Pyramid()), - CONE("cone", new Cone()), - DOME("dome", new Dome()); + NORMAL("normal", new Normal(), BuildModeCategoryEnum.BASIC), + NORMAL_PLUS("normal_plus", new NormalPlus(), BuildModeCategoryEnum.BASIC, OptionEnum.BUILD_SPEED), + LINE("line", new Line(), BuildModeCategoryEnum.BASIC /*, OptionEnum.THICKNESS*/), + WALL("wall", new Wall(), BuildModeCategoryEnum.BASIC, OptionEnum.FILL), + FLOOR("floor", new Floor(), BuildModeCategoryEnum.BASIC, OptionEnum.FILL), + CUBE("cube", new Cube(), BuildModeCategoryEnum.BASIC, OptionEnum.CUBE_FILL), + DIAGONAL_LINE("diagonal_line", new DiagonalLine(), BuildModeCategoryEnum.DIAGONAL /*, OptionEnum.THICKNESS*/), + DIAGONAL_WALL("diagonal_wall", new DiagonalWall(), BuildModeCategoryEnum.DIAGONAL /*, OptionEnum.FILL*/), + SLOPE_FLOOR("slope_floor", new SlopeFloor(), BuildModeCategoryEnum.DIAGONAL, OptionEnum.RAISED_EDGE), + CIRCLE("circle", new Circle(), BuildModeCategoryEnum.CIRCULAR, OptionEnum.CIRCLE_START, OptionEnum.FILL), + CYLINDER("cylinder", new Cylinder(), BuildModeCategoryEnum.CIRCULAR, OptionEnum.CIRCLE_START, OptionEnum.FILL), + SPHERE("sphere", new Sphere(), BuildModeCategoryEnum.CIRCULAR, OptionEnum.CIRCLE_START, OptionEnum.FILL); +// PYRAMID("pyramid", new Pyramid(), BuildModeCategoryEnum.ROOF), +// CONE("cone", new Cone(), BuildModeCategoryEnum.ROOF), +// DOME("dome", new Dome(), BuildModeCategoryEnum.ROOF); - private String name; - public IBuildMode instance; - public OptionEnum[] options; + private final String name; + public final IBuildMode instance; + public final BuildModeCategoryEnum category; + public final OptionEnum[] options; - BuildModeEnum(String name, IBuildMode instance, OptionEnum... options) { + BuildModeEnum(String name, IBuildMode instance, BuildModeCategoryEnum category, OptionEnum... options) { this.name = name; this.instance = instance; + this.category = category; this.options = options; } @@ -281,4 +284,17 @@ public class BuildModes { return "effortlessbuilding.modedescription." + name; } } + + public enum BuildModeCategoryEnum { + BASIC(new Vector4f(0f, .5f, 1f, .8f)), + DIAGONAL(new Vector4f(0.56f, 0.28f, 0.87f, .8f)), + CIRCULAR(new Vector4f(0.29f, 0.76f, 0.3f, 1f)), + ROOF(new Vector4f(0.83f, 0.87f, 0.23f, .8f)); + + public final Vector4f color; + + BuildModeCategoryEnum(Vector4f color) { + this.color = color; + } + } } diff --git a/src/main/java/nl/requios/effortlessbuilding/gui/buildmode/RadialMenu.java b/src/main/java/nl/requios/effortlessbuilding/gui/buildmode/RadialMenu.java index dbbd671..d150e44 100644 --- a/src/main/java/nl/requios/effortlessbuilding/gui/buildmode/RadialMenu.java +++ b/src/main/java/nl/requios/effortlessbuilding/gui/buildmode/RadialMenu.java @@ -58,6 +58,7 @@ public class RadialMenu extends Screen { private final double ringInnerEdge = 40; private final double ringOuterEdge = 80; + private final double categoryLineOuterEdge = 42; private final double textDistance = 90; private final double buttonDistance = 120; private final float fadeSpeed = 0.3f; @@ -182,15 +183,14 @@ public class RadialMenu extends Screen { private void drawRadialButtonBackgrounds(BuildModeEnum currentBuildMode, BufferBuilder buffer, double middleX, double middleY, double mouseXCenter, double mouseYCenter, double mouseRadians, double ringInnerEdge, double ringOuterEdge, double quarterCircle, ArrayList modes) { if (!modes.isEmpty()) { final int totalModes = Math.max(3, modes.size()); - int currentMode = 0; - final double fragment = Math.PI * 0.005; - final double fragment2 = Math.PI * 0.0025; - final double perObject = 2.0 * Math.PI / totalModes; + final double fragment = Math.PI * 0.005; //gap between buttons in radians at inner edge + final double fragment2 = Math.PI * 0.0025; //gap between buttons in radians at outer edge + final double radiansPerObject = 2.0 * Math.PI / totalModes; for (int i = 0; i < modes.size(); i++) { MenuRegion menuRegion = modes.get(i); - final double beginRadians = currentMode * perObject - quarterCircle; - final double endRadians = (currentMode + 1) * perObject - quarterCircle; + final double beginRadians = i * radiansPerObject - quarterCircle; + final double endRadians = (i + 1) * radiansPerObject - quarterCircle; menuRegion.x1 = Math.cos(beginRadians); menuRegion.x2 = Math.cos(endRadians); @@ -227,7 +227,18 @@ public class RadialMenu extends Screen { buffer.vertex(middleX + x2m2, middleY + y2m2, getBlitOffset()).color(color.x(), color.y(), color.z(), color.w()).endVertex(); buffer.vertex(middleX + x1m2, middleY + y1m2, getBlitOffset()).color(color.x(), color.y(), color.z(), color.w()).endVertex(); - currentMode++; + //Category line + color = menuRegion.mode.category.color; + + final double x1m3 = Math.cos(beginRadians + fragment) * categoryLineOuterEdge; + final double x2m3 = Math.cos(endRadians - fragment) * categoryLineOuterEdge; + final double y1m3 = Math.sin(beginRadians + fragment) * categoryLineOuterEdge; + final double y2m3 = Math.sin(endRadians - fragment) * categoryLineOuterEdge; + + buffer.vertex(middleX + x1m1, middleY + y1m1, getBlitOffset()).color(color.x(), color.y(), color.z(), color.w()).endVertex(); + buffer.vertex(middleX + x2m1, middleY + y2m1, getBlitOffset()).color(color.x(), color.y(), color.z(), color.w()).endVertex(); + buffer.vertex(middleX + x2m3, middleY + y2m3, getBlitOffset()).color(color.x(), color.y(), color.z(), color.w()).endVertex(); + buffer.vertex(middleX + x1m3, middleY + y1m3, getBlitOffset()).color(color.x(), color.y(), color.z(), color.w()).endVertex(); } } } diff --git a/src/main/resources/assets/effortlessbuilding/lang/en_us.json b/src/main/resources/assets/effortlessbuilding/lang/en_us.json index 1bac531..3a37363 100644 --- a/src/main/resources/assets/effortlessbuilding/lang/en_us.json +++ b/src/main/resources/assets/effortlessbuilding/lang/en_us.json @@ -18,8 +18,8 @@ "effortlessbuilding:reach_upgrade2": "Reach Upgrade 2", "effortlessbuilding:reach_upgrade3": "Reach Upgrade 3", - "effortlessbuilding.mode.normal": "Normal", - "effortlessbuilding.mode.normal_plus": "Normal+", + "effortlessbuilding.mode.normal": "Disable", + "effortlessbuilding.mode.normal_plus": "Single", "effortlessbuilding.mode.line": "Line", "effortlessbuilding.mode.wall": "Wall", "effortlessbuilding.mode.floor": "Floor", @@ -35,7 +35,7 @@ "effortlessbuilding.mode.dome": "Dome", "effortlessbuilding.modedescription.normal": "Disable mod and use vanilla placement rules", - "effortlessbuilding.modedescription.normal_plus": "Single block, but with increased reach and placement preview", + "effortlessbuilding.modedescription.normal_plus": "Like vanilla, but with increased reach and placement preview", "effortlessbuilding.modedescription.line": "", "effortlessbuilding.modedescription.wall": "", "effortlessbuilding.modedescription.floor": "", diff --git a/src/main/resources/assets/effortlessbuilding/textures/icons/normal.png b/src/main/resources/assets/effortlessbuilding/textures/icons/normal.png index 2d846ea5882eeb39d721bfe40f80f4249e6a8119..b8b3c9e5d5db888547a1653dafe3e996b5256982 100644 GIT binary patch delta 306 zcmV-20nPrs0?h)DB!3BTNLh0L01m_e01m_fl`9S#00030Nklo3~!IZb{2+=>5*7xWPvLpBgslmGw#07*qoM6N<$ Ef)E3Z<^TWy delta 290 zcmV+-0p0%10=)u|B!32COGiWi{{a60|De66lK=n!32;bRa{vGizW@LZzX3P}QzQTY z00(qQO+^Re0tf;DA}o&_$N&HU%1J~)R5;7UQ$Y@cAP^iHKf@mViV5C$hd1#la3t|H z8ox8W6iQW$Nt<*M4rFI$7Z?;te1iwR#HE3VP(&_AY-&OP*nhTdzgGvc_a5GRkc8Hn zT5Hyj>WNSCJ%NZYb*!PB$XcroM+hMR0IapA2J5=syMw*anef&tgb*&pKgmJUw(WnD zm@hHLsEjcLfMFO;$;KD}K;QQ{P|ZBg0D!LR5Mxv?;)l^*IF4gBRp~cQ)0B;hj;skY oQY6deoWrs#a2w8@*2^eA0nZ_vDtO7Ds{jB107*qoM6N<$g1t<3KmY&$ diff --git a/src/main/resources/assets/effortlessbuilding/textures/icons/normal_plus.png b/src/main/resources/assets/effortlessbuilding/textures/icons/normal_plus.png index 96d9d618d16715d53b27c140d6fbf255343f0ffc..2d846ea5882eeb39d721bfe40f80f4249e6a8119 100644 GIT binary patch delta 239 zcmVN92!5v9{q|5-gt*M@hNa5 z@iiL1Grbf_Rg6iSbP^6^XJ!`|6iIx82foCmfrwBY%F2z5|LDRPF zf0LLmF~+EjF$92N7*5H?7yv-u_c>6_JkJ1tuImtER4?L((Ox)?V>VUkH%`-(jf#$} p2{Te8%jKNIvMg}Uoz}}JKLO7noGN(9psN4?002ovPDHLkV1l!|Xjyn9f9aU20~&XEHZAp`*Gx{f!R(0`!Y`79{Jl>rb z?@ie>4FDpt2(U^Em)xZD1AJQy5mA7)ZDY-QAJ0`)acwgrNJKP*pncz~<$s=UvG7{h c`U89dB35%YU=JpJW&i*H07*qoM6N<$g1cmYIsgCw