From 169669680b41b81182ae8510d99d95b54b01b1f4 Mon Sep 17 00:00:00 2001 From: simibubi <31564874+simibubi@users.noreply.github.com> Date: Wed, 9 Jun 2021 16:17:29 +0200 Subject: [PATCH] Colour shift - Switched to a more readable text colour for the config ui - Slight tweaks to ponder button colours as well - Replaced discord link with project page --- src/generated/resources/.cache/cache | 28 ++++++------ .../resources/assets/create/lang/en_us.json | 2 +- .../assets/create/lang/unfinished/de_de.json | 2 +- .../assets/create/lang/unfinished/es_es.json | 2 +- .../assets/create/lang/unfinished/es_mx.json | 2 +- .../assets/create/lang/unfinished/fr_fr.json | 2 +- .../assets/create/lang/unfinished/it_it.json | 2 +- .../assets/create/lang/unfinished/ja_jp.json | 2 +- .../assets/create/lang/unfinished/ko_kr.json | 2 +- .../assets/create/lang/unfinished/nl_nl.json | 2 +- .../assets/create/lang/unfinished/pl_pl.json | 2 +- .../assets/create/lang/unfinished/pt_br.json | 2 +- .../assets/create/lang/unfinished/ru_ru.json | 2 +- .../assets/create/lang/unfinished/zh_cn.json | 2 +- .../assets/create/lang/unfinished/zh_tw.json | 2 +- .../config/ui/BaseConfigScreen.java | 40 ++++++++++++++++-- .../config/ui/SubMenuConfigScreen.java | 5 ++- .../config/ui/entries/EnumEntry.java | 12 ++++-- .../simibubi/create/foundation/gui/Theme.java | 27 +++++++++--- .../gui/mainMenu/CreateMainMenuScreen.java | 8 ++-- .../foundation/gui/widgets/BoxWidget.java | 38 +++++++++++++---- .../create/foundation/ponder/PonderUI.java | 2 +- .../foundation/ponder/ui/PonderButton.java | 28 ++++++++++-- .../assets/create/lang/default/messages.json | 2 +- .../assets/create/textures/gui/icons.png | Bin 2117 -> 3260 bytes 25 files changed, 159 insertions(+), 59 deletions(-) diff --git a/src/generated/resources/.cache/cache b/src/generated/resources/.cache/cache index bb6aca641..2b20bd785 100644 --- a/src/generated/resources/.cache/cache +++ b/src/generated/resources/.cache/cache @@ -408,20 +408,20 @@ a3a11524cd3515fc01d905767b4b7ea782adaf03 assets/create/blockstates/yellow_seat.j 7f39521b211441f5c3e06d60c5978cebe16cacfb assets/create/blockstates/zinc_block.json b7181bcd8182b2f17088e5aa881f374c9c65470c assets/create/blockstates/zinc_ore.json c71f5246d2cb8e9913d1552d23fcc82c43cde7a0 assets/create/lang/en_ud.json -71a84272fc9400fe86b377ac7bd40615925bd018 assets/create/lang/en_us.json -a3ea0dc4f5ed123b662a4cadf31d79d110f0374a assets/create/lang/unfinished/de_de.json -ce608ed3037f73eac417f6e71577314672c1751b assets/create/lang/unfinished/es_es.json -62cb2b263e23d237a167c6d5846585bd3c8a760a assets/create/lang/unfinished/es_mx.json -a2082a9cdd20340517223ba960c22bb481154f54 assets/create/lang/unfinished/fr_fr.json -49c8f8d148fccfe390b1941111655935041cf1d0 assets/create/lang/unfinished/it_it.json -f12eb0d39eee6af201274c46c0080423741f9a53 assets/create/lang/unfinished/ja_jp.json -6b3efed651645d4d38fd1839a9465913a829a507 assets/create/lang/unfinished/ko_kr.json -2a36cd97e79ac808a5a9a995ea42cb99f3567caa assets/create/lang/unfinished/nl_nl.json -2e5ae4757496ac2e1915e629d164977aa0cbf134 assets/create/lang/unfinished/pl_pl.json -bf53ced4eacfb7b6f95120059023698b3cbbbbaf assets/create/lang/unfinished/pt_br.json -581fe62af8811637c7b328e8d9ff8489b7d2ac1e assets/create/lang/unfinished/ru_ru.json -2646f7463c7910d5e03168a789ff0bf510e4c249 assets/create/lang/unfinished/zh_cn.json -20a6450f0b22620139eeabbb23f65633c8225550 assets/create/lang/unfinished/zh_tw.json +ec002cefbb883258daed50448e17f874eb814c18 assets/create/lang/en_us.json +639b3bbd99887014d67fc943d6e1415bebd1c70a assets/create/lang/unfinished/de_de.json +3dca81115778734215a4d361ec30f43b1342b51c assets/create/lang/unfinished/es_es.json +df82753f7276ceb72a834170bb09260c4c4f7936 assets/create/lang/unfinished/es_mx.json +021158ff586e33ccfd0012c2c4fbfba83b62d57b assets/create/lang/unfinished/fr_fr.json +4d3132ccb4a8d7c211451e195165fb3719c135a6 assets/create/lang/unfinished/it_it.json +741f5a61d9fec8ece2936649490318ef4b06b15f assets/create/lang/unfinished/ja_jp.json +79983f46c225a3dca6b9e6cecc26f73e07db1b86 assets/create/lang/unfinished/ko_kr.json +c85b841cf6ef7a5205782da242e98c2dc3b2af9a assets/create/lang/unfinished/nl_nl.json +2bcee4396da8bc2cbba794e7dd4b33a406d58360 assets/create/lang/unfinished/pl_pl.json +0b45c9ecdf8fc82f7f1e112d82cb95e94cf8b064 assets/create/lang/unfinished/pt_br.json +b7ef8659876e0890016e696b5adf73404b31ef8a assets/create/lang/unfinished/ru_ru.json +f04ba370732503448596909c56ff0e05aec5a233 assets/create/lang/unfinished/zh_cn.json +708e423b949fc4113cefc46a0119d02cad8f71ad assets/create/lang/unfinished/zh_tw.json 487a511a01b2a4531fb672f917922312db78f958 assets/create/models/block/acacia_window.json b48060cba1a382f373a05bf0039054053eccf076 assets/create/models/block/acacia_window_pane_noside.json 3066db1bf03cffa1a9c7fbacf47ae586632f4eb3 assets/create/models/block/acacia_window_pane_noside_alt.json diff --git a/src/generated/resources/assets/create/lang/en_us.json b/src/generated/resources/assets/create/lang/en_us.json index 8523a8dba..3b3111b83 100644 --- a/src/generated/resources/assets/create/lang/en_us.json +++ b/src/generated/resources/assets/create/lang/en_us.json @@ -677,7 +677,7 @@ "create.menu.return": "Return to Menu", "create.menu.configure": "Configure...", "create.menu.getting_started": "Getting Started", - "create.menu.send_feedback": "Feedback & Help", + "create.menu.project_page": "Project Page", "create.menu.report_bugs": "Report Issues", "create.menu.support": "Support Us", diff --git a/src/generated/resources/assets/create/lang/unfinished/de_de.json b/src/generated/resources/assets/create/lang/unfinished/de_de.json index a49ea8e4c..ca0d85c19 100644 --- a/src/generated/resources/assets/create/lang/unfinished/de_de.json +++ b/src/generated/resources/assets/create/lang/unfinished/de_de.json @@ -678,7 +678,7 @@ "create.menu.return": "UNLOCALIZED: Return to Menu", "create.menu.configure": "UNLOCALIZED: Configure...", "create.menu.getting_started": "UNLOCALIZED: Getting Started", - "create.menu.send_feedback": "UNLOCALIZED: Feedback & Help", + "create.menu.project_page": "UNLOCALIZED: Project Page", "create.menu.report_bugs": "UNLOCALIZED: Report Issues", "create.menu.support": "UNLOCALIZED: Support Us", diff --git a/src/generated/resources/assets/create/lang/unfinished/es_es.json b/src/generated/resources/assets/create/lang/unfinished/es_es.json index 8257c3264..f0ba92258 100644 --- a/src/generated/resources/assets/create/lang/unfinished/es_es.json +++ b/src/generated/resources/assets/create/lang/unfinished/es_es.json @@ -678,7 +678,7 @@ "create.menu.return": "UNLOCALIZED: Return to Menu", "create.menu.configure": "UNLOCALIZED: Configure...", "create.menu.getting_started": "UNLOCALIZED: Getting Started", - "create.menu.send_feedback": "UNLOCALIZED: Feedback & Help", + "create.menu.project_page": "UNLOCALIZED: Project Page", "create.menu.report_bugs": "UNLOCALIZED: Report Issues", "create.menu.support": "UNLOCALIZED: Support Us", diff --git a/src/generated/resources/assets/create/lang/unfinished/es_mx.json b/src/generated/resources/assets/create/lang/unfinished/es_mx.json index ece8d3494..4f36388a0 100644 --- a/src/generated/resources/assets/create/lang/unfinished/es_mx.json +++ b/src/generated/resources/assets/create/lang/unfinished/es_mx.json @@ -678,7 +678,7 @@ "create.menu.return": "UNLOCALIZED: Return to Menu", "create.menu.configure": "UNLOCALIZED: Configure...", "create.menu.getting_started": "UNLOCALIZED: Getting Started", - "create.menu.send_feedback": "UNLOCALIZED: Feedback & Help", + "create.menu.project_page": "UNLOCALIZED: Project Page", "create.menu.report_bugs": "UNLOCALIZED: Report Issues", "create.menu.support": "UNLOCALIZED: Support Us", diff --git a/src/generated/resources/assets/create/lang/unfinished/fr_fr.json b/src/generated/resources/assets/create/lang/unfinished/fr_fr.json index c0d435f89..a8a82de7b 100644 --- a/src/generated/resources/assets/create/lang/unfinished/fr_fr.json +++ b/src/generated/resources/assets/create/lang/unfinished/fr_fr.json @@ -678,7 +678,7 @@ "create.menu.return": "UNLOCALIZED: Return to Menu", "create.menu.configure": "UNLOCALIZED: Configure...", "create.menu.getting_started": "UNLOCALIZED: Getting Started", - "create.menu.send_feedback": "UNLOCALIZED: Feedback & Help", + "create.menu.project_page": "UNLOCALIZED: Project Page", "create.menu.report_bugs": "UNLOCALIZED: Report Issues", "create.menu.support": "UNLOCALIZED: Support Us", diff --git a/src/generated/resources/assets/create/lang/unfinished/it_it.json b/src/generated/resources/assets/create/lang/unfinished/it_it.json index 6b9e088bd..d781a948b 100644 --- a/src/generated/resources/assets/create/lang/unfinished/it_it.json +++ b/src/generated/resources/assets/create/lang/unfinished/it_it.json @@ -678,7 +678,7 @@ "create.menu.return": "UNLOCALIZED: Return to Menu", "create.menu.configure": "UNLOCALIZED: Configure...", "create.menu.getting_started": "UNLOCALIZED: Getting Started", - "create.menu.send_feedback": "UNLOCALIZED: Feedback & Help", + "create.menu.project_page": "UNLOCALIZED: Project Page", "create.menu.report_bugs": "UNLOCALIZED: Report Issues", "create.menu.support": "UNLOCALIZED: Support Us", diff --git a/src/generated/resources/assets/create/lang/unfinished/ja_jp.json b/src/generated/resources/assets/create/lang/unfinished/ja_jp.json index 161a1fc0d..692e7414d 100644 --- a/src/generated/resources/assets/create/lang/unfinished/ja_jp.json +++ b/src/generated/resources/assets/create/lang/unfinished/ja_jp.json @@ -678,7 +678,7 @@ "create.menu.return": "UNLOCALIZED: Return to Menu", "create.menu.configure": "UNLOCALIZED: Configure...", "create.menu.getting_started": "UNLOCALIZED: Getting Started", - "create.menu.send_feedback": "UNLOCALIZED: Feedback & Help", + "create.menu.project_page": "UNLOCALIZED: Project Page", "create.menu.report_bugs": "UNLOCALIZED: Report Issues", "create.menu.support": "UNLOCALIZED: Support Us", diff --git a/src/generated/resources/assets/create/lang/unfinished/ko_kr.json b/src/generated/resources/assets/create/lang/unfinished/ko_kr.json index 62ab38bbc..1b93d1132 100644 --- a/src/generated/resources/assets/create/lang/unfinished/ko_kr.json +++ b/src/generated/resources/assets/create/lang/unfinished/ko_kr.json @@ -678,7 +678,7 @@ "create.menu.return": "UNLOCALIZED: Return to Menu", "create.menu.configure": "UNLOCALIZED: Configure...", "create.menu.getting_started": "UNLOCALIZED: Getting Started", - "create.menu.send_feedback": "UNLOCALIZED: Feedback & Help", + "create.menu.project_page": "UNLOCALIZED: Project Page", "create.menu.report_bugs": "UNLOCALIZED: Report Issues", "create.menu.support": "UNLOCALIZED: Support Us", diff --git a/src/generated/resources/assets/create/lang/unfinished/nl_nl.json b/src/generated/resources/assets/create/lang/unfinished/nl_nl.json index ae15eef43..75817f457 100644 --- a/src/generated/resources/assets/create/lang/unfinished/nl_nl.json +++ b/src/generated/resources/assets/create/lang/unfinished/nl_nl.json @@ -678,7 +678,7 @@ "create.menu.return": "UNLOCALIZED: Return to Menu", "create.menu.configure": "UNLOCALIZED: Configure...", "create.menu.getting_started": "UNLOCALIZED: Getting Started", - "create.menu.send_feedback": "UNLOCALIZED: Feedback & Help", + "create.menu.project_page": "UNLOCALIZED: Project Page", "create.menu.report_bugs": "UNLOCALIZED: Report Issues", "create.menu.support": "UNLOCALIZED: Support Us", diff --git a/src/generated/resources/assets/create/lang/unfinished/pl_pl.json b/src/generated/resources/assets/create/lang/unfinished/pl_pl.json index e4d6fb0c4..f63040330 100644 --- a/src/generated/resources/assets/create/lang/unfinished/pl_pl.json +++ b/src/generated/resources/assets/create/lang/unfinished/pl_pl.json @@ -678,7 +678,7 @@ "create.menu.return": "UNLOCALIZED: Return to Menu", "create.menu.configure": "UNLOCALIZED: Configure...", "create.menu.getting_started": "UNLOCALIZED: Getting Started", - "create.menu.send_feedback": "UNLOCALIZED: Feedback & Help", + "create.menu.project_page": "UNLOCALIZED: Project Page", "create.menu.report_bugs": "UNLOCALIZED: Report Issues", "create.menu.support": "UNLOCALIZED: Support Us", diff --git a/src/generated/resources/assets/create/lang/unfinished/pt_br.json b/src/generated/resources/assets/create/lang/unfinished/pt_br.json index 9978181e9..a26d71483 100644 --- a/src/generated/resources/assets/create/lang/unfinished/pt_br.json +++ b/src/generated/resources/assets/create/lang/unfinished/pt_br.json @@ -678,7 +678,7 @@ "create.menu.return": "UNLOCALIZED: Return to Menu", "create.menu.configure": "UNLOCALIZED: Configure...", "create.menu.getting_started": "UNLOCALIZED: Getting Started", - "create.menu.send_feedback": "UNLOCALIZED: Feedback & Help", + "create.menu.project_page": "UNLOCALIZED: Project Page", "create.menu.report_bugs": "UNLOCALIZED: Report Issues", "create.menu.support": "UNLOCALIZED: Support Us", diff --git a/src/generated/resources/assets/create/lang/unfinished/ru_ru.json b/src/generated/resources/assets/create/lang/unfinished/ru_ru.json index 3271634f7..a6850a6d7 100644 --- a/src/generated/resources/assets/create/lang/unfinished/ru_ru.json +++ b/src/generated/resources/assets/create/lang/unfinished/ru_ru.json @@ -678,7 +678,7 @@ "create.menu.return": "UNLOCALIZED: Return to Menu", "create.menu.configure": "UNLOCALIZED: Configure...", "create.menu.getting_started": "UNLOCALIZED: Getting Started", - "create.menu.send_feedback": "UNLOCALIZED: Feedback & Help", + "create.menu.project_page": "UNLOCALIZED: Project Page", "create.menu.report_bugs": "UNLOCALIZED: Report Issues", "create.menu.support": "UNLOCALIZED: Support Us", diff --git a/src/generated/resources/assets/create/lang/unfinished/zh_cn.json b/src/generated/resources/assets/create/lang/unfinished/zh_cn.json index 0ace7a94a..eaacac299 100644 --- a/src/generated/resources/assets/create/lang/unfinished/zh_cn.json +++ b/src/generated/resources/assets/create/lang/unfinished/zh_cn.json @@ -678,7 +678,7 @@ "create.menu.return": "UNLOCALIZED: Return to Menu", "create.menu.configure": "UNLOCALIZED: Configure...", "create.menu.getting_started": "UNLOCALIZED: Getting Started", - "create.menu.send_feedback": "UNLOCALIZED: Feedback & Help", + "create.menu.project_page": "UNLOCALIZED: Project Page", "create.menu.report_bugs": "UNLOCALIZED: Report Issues", "create.menu.support": "UNLOCALIZED: Support Us", diff --git a/src/generated/resources/assets/create/lang/unfinished/zh_tw.json b/src/generated/resources/assets/create/lang/unfinished/zh_tw.json index 80504bc86..a5cf31096 100644 --- a/src/generated/resources/assets/create/lang/unfinished/zh_tw.json +++ b/src/generated/resources/assets/create/lang/unfinished/zh_tw.json @@ -678,7 +678,7 @@ "create.menu.return": "UNLOCALIZED: Return to Menu", "create.menu.configure": "UNLOCALIZED: Configure...", "create.menu.getting_started": "UNLOCALIZED: Getting Started", - "create.menu.send_feedback": "UNLOCALIZED: Feedback & Help", + "create.menu.project_page": "UNLOCALIZED: Project Page", "create.menu.report_bugs": "UNLOCALIZED: Report Issues", "create.menu.support": "UNLOCALIZED: Support Us", diff --git a/src/main/java/com/simibubi/create/foundation/config/ui/BaseConfigScreen.java b/src/main/java/com/simibubi/create/foundation/config/ui/BaseConfigScreen.java index ecc496e34..a07281cf6 100644 --- a/src/main/java/com/simibubi/create/foundation/config/ui/BaseConfigScreen.java +++ b/src/main/java/com/simibubi/create/foundation/config/ui/BaseConfigScreen.java @@ -5,16 +5,19 @@ import javax.annotation.Nullable; import com.simibubi.create.Create; import com.simibubi.create.foundation.config.AllConfigs; +import com.simibubi.create.foundation.gui.AllIcons; import com.simibubi.create.foundation.gui.DelegatedStencilElement; import com.simibubi.create.foundation.gui.ScreenOpener; import com.simibubi.create.foundation.gui.TextStencilElement; import com.simibubi.create.foundation.gui.Theme; import com.simibubi.create.foundation.gui.UIRenderHelper; import com.simibubi.create.foundation.gui.widgets.BoxWidget; +import com.simibubi.create.foundation.item.TooltipHelper; import net.minecraft.client.Minecraft; import net.minecraft.client.gui.screen.Screen; import net.minecraft.util.text.StringTextComponent; +import net.minecraft.util.text.TextFormatting; import net.minecraftforge.common.ForgeConfigSpec; import net.minecraftforge.fml.config.ModConfig; @@ -31,6 +34,7 @@ public class BaseConfigScreen extends ConfigScreen { BoxWidget clientConfigWidget; BoxWidget commonConfigWidget; BoxWidget serverConfigWidget; + BoxWidget goBack; ForgeConfigSpec clientSpec; ForgeConfigSpec commonSpec; @@ -39,6 +43,7 @@ public class BaseConfigScreen extends ConfigScreen { String commonTile = "COMMON CONFIG"; String serverTile = "SERVER CONFIG"; String modID = Create.ID; + protected boolean returnOnClose; /** * If you are a Create Addon dev and want to make use of the same GUI @@ -106,12 +111,13 @@ public class BaseConfigScreen extends ConfigScreen { protected void init() { widgets.clear(); super.init(); + returnOnClose = true; TextStencilElement clientText = new TextStencilElement(client.fontRenderer, new StringTextComponent(clientTile)).centered(true, true); widgets.add(clientConfigWidget = new BoxWidget(width / 2 - 100, height / 2 - 15 - 30, 200, 16).showingElement(clientText)); if (clientSpec != null) { - clientConfigWidget.withCallback(() -> ScreenOpener.open(new SubMenuConfigScreen(this, ModConfig.Type.CLIENT, clientSpec))); + clientConfigWidget.withCallback(() -> linkTo(new SubMenuConfigScreen(this, ModConfig.Type.CLIENT, clientSpec))); clientText.withElementRenderer(BoxWidget.gradientFactory.apply(clientConfigWidget)); } else { clientConfigWidget.active = false; @@ -123,7 +129,7 @@ public class BaseConfigScreen extends ConfigScreen { widgets.add(commonConfigWidget = new BoxWidget(width / 2 - 100, height / 2 - 15, 200, 16).showingElement(commonText)); if (commonSpec != null) { - commonConfigWidget.withCallback(() -> ScreenOpener.open(new SubMenuConfigScreen(this, ModConfig.Type.COMMON, commonSpec))); + commonConfigWidget.withCallback(() -> linkTo(new SubMenuConfigScreen(this, ModConfig.Type.COMMON, commonSpec))); commonText.withElementRenderer(BoxWidget.gradientFactory.apply(commonConfigWidget)); } else { commonConfigWidget.active = false; @@ -135,14 +141,42 @@ public class BaseConfigScreen extends ConfigScreen { widgets.add(serverConfigWidget = new BoxWidget(width / 2 - 100, height / 2 - 15 + 30, 200, 16).showingElement(serverText)); if (serverSpec != null && Minecraft.getInstance().world != null) { - serverConfigWidget.withCallback(() -> ScreenOpener.open(new SubMenuConfigScreen(this, ModConfig.Type.SERVER, serverSpec))); + serverConfigWidget.withCallback(() -> linkTo(new SubMenuConfigScreen(this, ModConfig.Type.SERVER, serverSpec))); serverText.withElementRenderer(BoxWidget.gradientFactory.apply(serverConfigWidget)); } else { serverConfigWidget.active = false; serverConfigWidget.updateColorsFromState(); serverText.withElementRenderer(DISABLED_RENDERER); + serverConfigWidget.active = true; + serverConfigWidget.getToolTip() + .add(new StringTextComponent("Stored individually per World")); + serverConfigWidget.getToolTip() + .addAll(TooltipHelper.cutTextComponent( + new StringTextComponent( + "Gameplay settings can only be accessed from the in-game menu after joining a World or Server."), + TextFormatting.GRAY, TextFormatting.GRAY)); } ConfigScreen.modID = this.modID; + + goBack = new BoxWidget(width / 2 - 134, height / 2, 20, 20).withPadding(2, 2) + .withCallback(this::onClose); + goBack.showingElement(AllIcons.I_CONFIG_BACK.asStencil() + .withElementRenderer(BoxWidget.gradientFactory.apply(goBack))); + goBack.getToolTip() + .add(new StringTextComponent("Go Back")); + widgets.add(goBack); } + + private void linkTo(Screen screen) { + returnOnClose = false; + ScreenOpener.open(screen); + } + + @Override + public void onClose() { + super.onClose(); + ScreenOpener.open(parent); + } + } diff --git a/src/main/java/com/simibubi/create/foundation/config/ui/SubMenuConfigScreen.java b/src/main/java/com/simibubi/create/foundation/config/ui/SubMenuConfigScreen.java index 892b57ef9..2562f6038 100644 --- a/src/main/java/com/simibubi/create/foundation/config/ui/SubMenuConfigScreen.java +++ b/src/main/java/com/simibubi/create/foundation/config/ui/SubMenuConfigScreen.java @@ -264,6 +264,8 @@ public class SubMenuConfigScreen extends ConfigScreen { //extras for server configs if (type != ModConfig.Type.SERVER) return; + if (client.isSingleplayer()) + return; list.isForServer = true; boolean canEdit = client != null && client.player != null && client.player.hasPermissionLevel(2); @@ -277,6 +279,7 @@ public class SubMenuConfigScreen extends ConfigScreen { .withPadding(2, 2) .showingElement(stencil); + if (!canEdit) { list.children().forEach(e -> e.setEditable(false)); resetAll.active = false; @@ -301,7 +304,7 @@ public class SubMenuConfigScreen extends ConfigScreen { super.renderWindow(ms, mouseX, mouseY, partialTicks); int x = width/2; - drawCenteredString(ms, client.fontRenderer, "Editing config: " + ConfigScreen.modID + ":" + type.toString().toLowerCase(Locale.ROOT) + "@" + title, x, 15, Theme.i(Theme.Key.TEXT)); + drawCenteredString(ms, client.fontRenderer, ConfigScreen.modID + " > " + type.toString().toLowerCase(Locale.ROOT) + " > " + title, x, 15, Theme.i(Theme.Key.TEXT)); list.render(ms, mouseX, mouseY, partialTicks); } diff --git a/src/main/java/com/simibubi/create/foundation/config/ui/entries/EnumEntry.java b/src/main/java/com/simibubi/create/foundation/config/ui/entries/EnumEntry.java index 08d7e8288..1bce38ca4 100644 --- a/src/main/java/com/simibubi/create/foundation/config/ui/entries/EnumEntry.java +++ b/src/main/java/com/simibubi/create/foundation/config/ui/entries/EnumEntry.java @@ -1,5 +1,7 @@ package com.simibubi.create.foundation.config.ui.entries; +import java.util.Locale; + import com.mojang.blaze3d.matrix.MatrixStack; import com.simibubi.create.foundation.gui.AllIcons; import com.simibubi.create.foundation.gui.BoxElement; @@ -22,7 +24,7 @@ public class EnumEntry extends ValueEntry> { public EnumEntry(String label, ForgeConfigSpec.ConfigValue> value, ForgeConfigSpec.ValueSpec spec) { super(label, value, spec); - + valueText = new TextStencilElement(Minecraft.getInstance().fontRenderer, "YEP").centered(true, true); valueText.withElementRenderer((ms, width, height, alpha) -> UIRenderHelper.angledGradient(ms, 0, 0, height / 2, height, width, Theme.p(Theme.Key.TEXT))); @@ -78,7 +80,7 @@ public class EnumEntry extends ValueEntry> { cycleLeft.y = y + 10; cycleLeft.render(ms, mouseX, mouseY, partialTicks); - valueText.at(cycleLeft.x + cycleWidth - 8, y + 11, 200) + valueText.at(cycleLeft.x + cycleWidth - 8, y + 10, 200) .withBounds(width - getLabelWidth(width) - 2 * cycleWidth - resetWidth - 4, 16) .render(ms); @@ -97,6 +99,10 @@ public class EnumEntry extends ValueEntry> { @Override public void onValueChange(Enum newValue) { super.onValueChange(newValue); - valueText.withText(newValue.name()); + valueText.withText(newValue.name() + .substring(0, 1) + + newValue.name() + .substring(1) + .toLowerCase(Locale.ROOT)); } } diff --git a/src/main/java/com/simibubi/create/foundation/gui/Theme.java b/src/main/java/com/simibubi/create/foundation/gui/Theme.java index fbe23d750..82022b7a2 100644 --- a/src/main/java/com/simibubi/create/foundation/gui/Theme.java +++ b/src/main/java/com/simibubi/create/foundation/gui/Theme.java @@ -17,6 +17,12 @@ public class Theme { public static void setTheme(@Nullable Theme theme) { custom = theme; } + + public static void reload() { + base.init(); + if (custom != null) + custom.init(); + } private static ColorHolder resolve(String key) { ColorHolder h = null; @@ -58,25 +64,29 @@ public class Theme { } protected void init() { - put(Key.BUTTON_IDLE, new Color(0x60_c0c0ff, true), new Color(0x30_c0c0ff, true)); - put(Key.BUTTON_HOVER, new Color(0xa0_c0c0ff, true), new Color(0x50_c0c0ff, true)); - put(Key.BUTTON_CLICK, new Color(0xff_4b4bff), new Color(0xff_3b3bdd)); - put(Key.BUTTON_DISABLE, new Color(0x80_909090, true), new Color(0x20_909090, true)); + put(Key.BUTTON_IDLE, new Color(0xdd_8ab6d6, true), new Color(0x90_8ab6d6, true)); + put(Key.BUTTON_HOVER, new Color(0xff_9ABBD3, true), new Color(0xd0_9ABBD3, true)); + put(Key.BUTTON_CLICK, new Color(0xff_ffffff), new Color(0xee_ffffff)); + put(Key.BUTTON_DISABLE, new Color(0x80_909090, true), new Color(0x60_909090, true)); put(Key.BUTTON_SUCCESS, new Color(0xcc_88f788, true), new Color(0xcc_20cc20, true)); put(Key.BUTTON_FAIL, new Color(0xcc_f78888, true), new Color(0xcc_cc2020, true)); put(Key.TEXT, new Color(0xff_eeeeee), new Color(0xff_a3a3a3)); put(Key.TEXT_DARKER, new Color(0xff_a3a3a3), new Color(0xff_808080)); - put(Key.TEXT_ACCENT_STRONG, new Color(0xff_7b7ba3), new Color(0xff_7b7ba3)); + put(Key.TEXT_ACCENT_STRONG, new Color(0xff_8ab6d6), new Color(0xff_8ab6d6)); put(Key.TEXT_ACCENT_SLIGHT, new Color(0xff_ddeeff), new Color(0xff_a0b0c0)); put(Key.STREAK, new Color(0x101010, false)); + put(Key.PONDER_BUTTON_IDLE, new Color(0x60_c0c0ff, true), new Color(0x30_c0c0ff, true)); + put(Key.PONDER_BUTTON_HOVER, new Color(0xf0_c0c0ff, true), new Color(0xa0_c0c0ff, true)); + put(Key.PONDER_BUTTON_CLICK, new Color(0xff_ffffff), new Color(0xdd_ffffff)); + put(Key.PONDER_BUTTON_DISABLE, new Color(0x80_909090, true), new Color(0x20_909090, true)); put(Key.PONDER_BACKGROUND_TRANSPARENT, new Color(0xdd_000000, true)); put(Key.PONDER_BACKGROUND_FLAT, new Color(0xff_000000, false)); put(Key.PONDER_IDLE, new Color(0x40ffeedd, true), new Color(0x20ffeedd, true)); put(Key.PONDER_HOVER, new Color(0x70ffffff, true), new Color(0x30ffffff, true)); put(Key.PONDER_HIGHLIGHT, new Color(0xf0ffeedd, true), new Color(0x60ffeedd, true)); put(Key.TEXT_WINDOW_BORDER, new Color(0x607a6000, true), new Color(0x207a6000, true)); - put(Key.PONDER_BACK_ARROW, new Color(0x70aa9999, true), new Color(0x30aa9999, true)); + put(Key.PONDER_BACK_ARROW, new Color(0xf0aa9999, true), new Color(0x30aa9999, true)); put(Key.PONDER_PROGRESSBAR, new Color(0x80ffeedd, true), new Color(0x50ffeedd, true)); put(Key.PONDER_MISSING_CREATE, new Color(0x70_984500, true), new Color(0x70_692400, true)); put(Key.PONDER_MISSING_VANILLA, new Color(0x50_5000ff, true), new Color(0x50_300077, true)); @@ -129,6 +139,11 @@ public class Theme { public static Key PONDER_PROGRESSBAR = new Key(); public static Key PONDER_MISSING_CREATE = new Key(); public static Key PONDER_MISSING_VANILLA = new Key(); + + public static Key PONDER_BUTTON_IDLE = new Key(); + public static Key PONDER_BUTTON_HOVER = new Key(); + public static Key PONDER_BUTTON_CLICK = new Key(); + public static Key PONDER_BUTTON_DISABLE = new Key(); private static int index = 0; diff --git a/src/main/java/com/simibubi/create/foundation/gui/mainMenu/CreateMainMenuScreen.java b/src/main/java/com/simibubi/create/foundation/gui/mainMenu/CreateMainMenuScreen.java index 918a4f1ff..9640885cb 100644 --- a/src/main/java/com/simibubi/create/foundation/gui/mainMenu/CreateMainMenuScreen.java +++ b/src/main/java/com/simibubi/create/foundation/gui/mainMenu/CreateMainMenuScreen.java @@ -95,13 +95,13 @@ public class CreateMainMenuScreen extends AbstractSimiScreen { gettingStarted.active = false; addButton(gettingStarted); - String feedbackLink = "https://discord.gg/hmaD7Se"; + String projectLink = "https://www.curseforge.com/minecraft/mc-mods/create"; String issueTrackerLink = "https://github.com/Creators-of-Create/Create/issues"; String supportLink = "https://github.com/Creators-of-Create/Create/wiki/Supporting-the-Project"; - addButton(new Button(center - 100, yStart + 72 + -16, bShortWidth, bHeight, - Lang.translate("menu.send_feedback"), $ -> linkTo(feedbackLink))); - addButton(new Button(center + 2, yStart + 72 + -16, bShortWidth, bHeight, Lang.translate("menu.report_bugs"), + addButton(new Button(center - 100, yStart + 68, bShortWidth, bHeight, + Lang.translate("menu.project_page"), $ -> linkTo(projectLink))); + addButton(new Button(center + 2, yStart + 68, bShortWidth, bHeight, Lang.translate("menu.report_bugs"), $ -> linkTo(issueTrackerLink))); addButton(new Button(center - 100, yStart + 92, bLongWidth, bHeight, Lang.translate("menu.support"), $ -> linkTo(supportLink))); diff --git a/src/main/java/com/simibubi/create/foundation/gui/widgets/BoxWidget.java b/src/main/java/com/simibubi/create/foundation/gui/widgets/BoxWidget.java index 07b35d4f9..76d8e60db 100644 --- a/src/main/java/com/simibubi/create/foundation/gui/widgets/BoxWidget.java +++ b/src/main/java/com/simibubi/create/foundation/gui/widgets/BoxWidget.java @@ -9,6 +9,7 @@ import com.mojang.blaze3d.matrix.MatrixStack; import com.simibubi.create.foundation.gui.BoxElement; import com.simibubi.create.foundation.gui.DelegatedStencilElement; import com.simibubi.create.foundation.gui.Theme; +import com.simibubi.create.foundation.gui.Theme.Key; import com.simibubi.create.foundation.gui.UIRenderHelper; import com.simibubi.create.foundation.utility.ColorHelper; import com.simibubi.create.foundation.utility.Couple; @@ -24,9 +25,11 @@ public class BoxWidget extends ElementWidget { protected Color customBorderBot; protected boolean animateColors = true; protected LerpedFloat colorAnimation = LerpedFloat.linear(); + protected Color gradientColor1, gradientColor2; - private Color colorTarget1 = Theme.c(Theme.Key.BUTTON_IDLE, true), colorTarget2 = Theme.c(Theme.Key.BUTTON_IDLE, false); private Color previousColor1, previousColor2; + private Color colorTarget1 = Theme.c(getIdleTheme(), true); + private Color colorTarget2 = Theme.c(getIdleTheme(), false); public BoxWidget() { this(0, 0); @@ -84,8 +87,8 @@ public class BoxWidget extends ElementWidget { public void onClick(double x, double y) { super.onClick(x, y); - gradientColor1 = Theme.c(Theme.Key.BUTTON_CLICK, true); - gradientColor2 = Theme.c(Theme.Key.BUTTON_CLICK, true); + gradientColor1 = Theme.c(getClickTheme(), true); + gradientColor2 = Theme.c(getClickTheme(), false); startGradientAnimation(getColorForState(true), getColorForState(false), true, 0.15); } @@ -175,23 +178,40 @@ public class BoxWidget extends ElementWidget { } private void startGradientAnimation(Color c1, Color c2, boolean positive) { - startGradientAnimation(c1, c2, positive, 0.3); + startGradientAnimation(c1, c2, positive, 0.6); } private Color getColorForState(boolean first) { if (!active) - return Theme.p(Theme.Key.BUTTON_DISABLE).get(first); + return Theme.p(getDisabledTheme()).get(first); if (hovered) { if (first) - return customBorderTop != null ? customBorderTop.darker() : Theme.c(Theme.Key.BUTTON_HOVER, true); + return customBorderTop != null ? customBorderTop.darker() : Theme.c(getHoverTheme(), true); else - return customBorderBot != null ? customBorderBot.darker() : Theme.c(Theme.Key.BUTTON_HOVER, false); + return customBorderBot != null ? customBorderBot.darker() : Theme.c(getHoverTheme(), false); } if (first) - return customBorderTop != null ? customBorderTop : Theme.c(Theme.Key.BUTTON_IDLE, true); + return customBorderTop != null ? customBorderTop : Theme.c(getIdleTheme(), true); else - return customBorderBot != null ? customBorderBot : Theme.c(Theme.Key.BUTTON_IDLE, false); + return customBorderBot != null ? customBorderBot : Theme.c(getIdleTheme(), false); } + + public Key getDisabledTheme() { + return Theme.Key.BUTTON_DISABLE; + } + + public Key getIdleTheme() { + return Theme.Key.BUTTON_IDLE; + } + + public Key getHoverTheme() { + return Theme.Key.BUTTON_HOVER; + } + + public Key getClickTheme() { + return Theme.Key.BUTTON_CLICK; + } + } diff --git a/src/main/java/com/simibubi/create/foundation/ponder/PonderUI.java b/src/main/java/com/simibubi/create/foundation/ponder/PonderUI.java index 7f0e951fd..1fd74078e 100644 --- a/src/main/java/com/simibubi/create/foundation/ponder/PonderUI.java +++ b/src/main/java/com/simibubi/create/foundation/ponder/PonderUI.java @@ -693,7 +693,7 @@ public class PonderUI extends NavigatableSimiScreen { chase.tickChaser(); - if (highlightAll || sceneTags.contains(this.tags.get(i))) + if (highlightAll) button.flash(); else button.dim(); diff --git a/src/main/java/com/simibubi/create/foundation/ponder/ui/PonderButton.java b/src/main/java/com/simibubi/create/foundation/ponder/ui/PonderButton.java index 2533e3e9a..fd0141967 100644 --- a/src/main/java/com/simibubi/create/foundation/ponder/ui/PonderButton.java +++ b/src/main/java/com/simibubi/create/foundation/ponder/ui/PonderButton.java @@ -8,6 +8,7 @@ import com.mojang.blaze3d.matrix.MatrixStack; import com.simibubi.create.foundation.gui.GuiGameElement; import com.simibubi.create.foundation.gui.RenderElement; import com.simibubi.create.foundation.gui.Theme; +import com.simibubi.create.foundation.gui.Theme.Key; import com.simibubi.create.foundation.gui.widgets.BoxWidget; import com.simibubi.create.foundation.gui.widgets.ElementWidget; import com.simibubi.create.foundation.utility.AnimationTickHolder; @@ -74,12 +75,12 @@ public class PonderButton extends BoxWidget { float flashValue = flash.getValue(partialTicks); if (flashValue > .1f) { - float sin = 0.5f + 0.5f * MathHelper.sin((AnimationTickHolder.getTicks(true) + partialTicks) / 6f); + float sin = 0.5f + 0.5f * MathHelper.sin((AnimationTickHolder.getTicks(true) + partialTicks) / 5f); sin *= flashValue; Color c1 = gradientColor1; Color c2 = gradientColor2; - Color nc1 = new Color(c1.getRed(), c1.getGreen(), c1.getBlue(), MathHelper.clamp(c1.getAlpha() + 50, 0, 255)); - Color nc2 = new Color(c2.getRed(), c2.getGreen(), c2.getBlue(), MathHelper.clamp(c2.getAlpha() + 50, 0, 255)); + Color nc1 = new Color(255, 255, 255, MathHelper.clamp(c1.getAlpha() + 150, 0, 255)); + Color nc2 = new Color(155, 155, 155, MathHelper.clamp(c2.getAlpha() + 150, 0, 255)); gradientColor1 = ColorHelper.mixColors(c1, nc1, sin); gradientColor2 = ColorHelper.mixColors(c2, nc2, sin); } @@ -102,4 +103,25 @@ public class PonderButton extends BoxWidget { public ItemStack getItem() { return item; } + + @Override + public Key getDisabledTheme() { + return Theme.Key.PONDER_BUTTON_DISABLE; + } + + @Override + public Key getIdleTheme() { + return Theme.Key.PONDER_BUTTON_IDLE; + } + + @Override + public Key getHoverTheme() { + return Theme.Key.PONDER_BUTTON_HOVER; + } + + @Override + public Key getClickTheme() { + return Theme.Key.PONDER_BUTTON_CLICK; + } + } diff --git a/src/main/resources/assets/create/lang/default/messages.json b/src/main/resources/assets/create/lang/default/messages.json index 37bb8efff..ef13ce6fa 100644 --- a/src/main/resources/assets/create/lang/default/messages.json +++ b/src/main/resources/assets/create/lang/default/messages.json @@ -15,7 +15,7 @@ "create.menu.return": "Return to Menu", "create.menu.configure": "Configure...", "create.menu.getting_started": "Getting Started", - "create.menu.send_feedback": "Feedback & Help", + "create.menu.project_page": "Project Page", "create.menu.report_bugs": "Report Issues", "create.menu.support": "Support Us", diff --git a/src/main/resources/assets/create/textures/gui/icons.png b/src/main/resources/assets/create/textures/gui/icons.png index f0b91e13c2d3e1e01ba3cf81927714605da4c230..7186ecf29d9604492805ddfa26871b3958805918 100644 GIT binary patch literal 3260 zcmdT{`8(9@_kYifeH!%GB73DYw#pKPX(o?-jIlG3Hv7_GEMpi-gojbql&smZ3}eZj zP^pliv1W)e_6RjuK6<|2A3p!W=f1A{IFMcaW@c0>6^%xd$>amyO!TtQfq(^K(N_EaH2~dt`FjTjUVkHp z007{B^=E=!`<2`PfJ27fC+4Ao&!G3zeyA8fH*cnR@{_LbBZE`l zJ3zi%_xM2~DY}p#2sI44R1FDQS zntqsDHI3Mo$HnO^afs?vX;vh!w&(ro{ejVaMi(edGua#iE5Q~|RFv5`^&A`We4g(q zi1SB|Qf3F?H|az@#*1>n*i?CgQK&`WhOPxGR8EE zpq`fo93>L!rtO`BIKH=p8^6=^!tlZut&ZEF=;z8r3%^N>)1SWFvS;ZRh+$5d)9tnx z84to{YVL%SrEg;yo5Zov_(-iy9XG8I724jPU~(&>mhWt87dX}321SRO?^E2HS%e~DuW({XyeVS%pNr2)yO7z9Ue=XPRPZ!+ znPZGrYpMC^96W(mnVeFVX1Z=dpD~J!=f*k68sEzo#1XH)ix8bS>0J}tUbj)dc=KEF zH(ch-DQx~jU+H*#u7)nfvMBVE`OUWAJ1k|LdV18BMBw|?NzS82+89f%K(-LcH zgMO|vRY%t3?(Om#=PP`m>|S{n8g@ODG`Y&CZ8MJ}i7NMk**#<&6IFpL>F!p&cqq$PDbV9cD7#l& zr;1xR{+IOa?gy#XcLeJ2rT0vvR#@fNg}w`A*B~AW?&aC4441K!9_91P&G*!4IQ|H> zaVT?m-iDD8q>Vg!fBM}Wms$2f4fDUV;i}$--7fT_9PD-f9o3<|!SSpqT64(T@toxy zkKGTr>MuRtTeVtdKe*FZW=^cO{!#iHPCA_#R!_6kNXh;2$vI^9VPME~ipAix$VAW| z>k&!N`+B%JgKnsYhZX&rKZWGR%AxJm~8AcT*>lc zkL%iRid2x(cQ-TIoc)5k!Qsnx91g+Ns}W(DQ}mLzoq`uvq*RMex!o=!`Zgf>wjsJqbTqYDap|%jy*WC&?lj|>_1VteHpDqgn7m zIRnmM-`{jb6md>>+E|T#JJ2UM8fR$OB8#ar3F)|4r@E^f5+OjWD?gcF{}phL<%CfD zZV=-_uRx7?Y^IbWYz{Ch>0g|TPqz4???rqQ@9X!VOZSUiZE>wU)~JN7_p9@Sv^#(o zA-)l3yN*a8hz~_lkiqXzxEc7*{z2)Qb)nCq!F`Y`a{>Q0*#F%YOq(9rG3gB3IXZrl zZ$;dhGXh1^RrvsCM{!l(arv1S$vuK9yXC+b{Z zX~zyDcOm;nT!3hS+}8VX&$?s2cYGo7uDBW`fF3veWRBQ$X2-dQ?eT})_!HXAKQV>_ zsgop%>MCJ z#+1z27)HZ)1zE_?jcxOGu=A$Z)fV21Z+Bhxh{VVY@$jA9BkRE(v1ZI&RL2jD#BT8EUVrH!FHPDGZaibbjTZ}2e5(N~9cKTt^pC6EShx(Z0)HwR znncG?7VNMm?Jl3FD`W2&c8(1ZP?3#(e8ar{;-Bkrm#aF~8)cRCgx$@E=K3 z@_xBM$!c~)LT%OY{gRKKB#DG5oVv8=Hy8_-P2jJj2w$;KR3HIu_HG~PfIRm+rO?M? z9N{yz{D^jaX-Gks?{xQZF%~#L=}RcccVO+h&I#S+!yzx2VO`JG9OC)#pPr_LRJpzw z#?%8MEt&Tm(_crIf8Q`g4!XAgbsM;;YHy<*s5}zynirD}$XMM< zW%5-Zo>V`M5WsAKMGVrT%U{~gD(&7x$RTq#&lDLCz{z6nIjWuiF3bZ;kBwf;i+y8B zKtZS7!%I?LUGEi|jDktMf=NV}6(2W%zBJ~v<2bpfs@-oP?Bd}F4mS(UztEKmPJsj( z4GK$JWfPhe!V(|HZ0#ETyyO(6_iU{73*QyNHw*Z-rakW;l3p&=1IPx1ZM?xs7I$MO qBNLJgwuDOiXuocb1lx<>lqE zv9Z$9(oRlJj*gDv;^K5tY=Zy*00DGTPE!Ct=GbNc00+EDL_t(|+U;CBj~q7)76PP* zhh>mDW$M5`AwUpU?&HouinIX&IAsb0cIWDXROw=;+9uUr!N%3`M`a|DdT^wD%xQmj z>@$hG*#C*wagS!4{J8)O5|Hm> z)__Ha4g*LHagP~D0gNTVz~L~Q2K%d1ey{kWU;P354&g(1R$*tZ0L2zUVeKSXh?fMm?tV-4OHQq3zF zkcv<;02Z!@o+aQ_(4RoQ(0c&FmhX^I&xMe!K>~& zBLhH*^^!fPc|dzhZ2*vc;2|5(aSS=pHi^4kJ>w8{{B6SkR^=tqWf6bP;&bRqU||3& zX2KH?)0sCM4Z!GQCa4{FR*DpGSA2N$1O@ZCn^Q?-nlh;4Htz|59XFd1l8zWK%{kDT zsWcxo0G!?jiICz4oJ?zOZ69-Z;Uo#BkjsUMHr}6g09XQ0{2mslL?ZRv54y*kV&dJ? z&<_6i)Thg!JTymE%%-rq(5x4R$#clRuQl9Jy}PFM6) zajGQ%N&+cJ<6~|RpFNELWF1MeNz{2Tz7 z@bIIuut1p*{O z1GtKv34k0MGXQ^R0-(b@s1BWD1>S79(60c*GvwVeDeg*M02nek74EXTU`Zvf&(q@k zy=UOYjSEhy(lH#sxh}%!K@gr^P`fOEMXpvaLes^x9qR&N#uEXgV;nZ|P*st|RAjE< zD4qbIyI+K#ym545sjlBBPsnct0BErzVKo3K>-y|dyUu^d$1M~EaxV!4XPBabT-Q(a ziDiKXu&nSxEcrD6oSwcI8C@u2*gUMnc04kCca2nD)iQlf@SxsEI2-`G62z3D z$(pNFGO2$hfpIu^?WT|blrv4JdQ>gD(Etcq0Hk4Z(A*<25&$&-_);yF%lHcb<8**p zLjWOEC;%Wg%zS1vsDL1=^h*G;E0)XUX#pV~b_xiqi*m{g%W^%rjs)m}6HzYL_v#&R z#mTY*abo~RM&q0zQdRLfvYq$g0r+r+peKoI0cd|bQ?hvxlC~LwJQUkn0ev!c-~$pc zGBUdEe9PwOWBu@y99^pp)&L;8=r<|EZ6E>tXcu-WG?(jh0>H;=XZD6_xlKs6cv#~K z{VkUR!fp!O&`@TQUXRs*QYPG25|H3*V_Vk{=*;Jj=)dZ9@@!^Yi1I$AA8^od8~a_1*I)uQ!yy+c!_Xe7mI*K6>@;_t%@6;oF;+ zn_8iJ^zz@0r{b;KH~Ihw7IFEtQ!!*1P$fj|=WO7-ZOf-6-Kv8!Uf-DexUJl3o2|6!BW^@=@@y0`NVbfv&45Zy@Vr83RJFM$d`0@YjYr7pNf&gH@^FM#7 z<aZ0F;mON?3yVy<|L9w(;bx zUTg7!Jno-gbcPW?e7zs#tyWb-`9(;fuDISu34r{fvj`wQeFqY#0HytXTwA7EfUE18 z?X_ZrxN98rOL0J61L*39+i9H$(i4AO`Za+mP9%QgVite^s3N7cA~*^_WYhqRSgC|3061ob^6<+#Gt2;zs1*P>G7)KOT9KA1 zB`n^1O4pc&?L`DeMn*