From 25cb6bd9c3c483a434e1582ee3514b885ac39bc7 Mon Sep 17 00:00:00 2001 From: Octol1ttle Date: Wed, 28 Feb 2024 19:34:02 +0500 Subject: [PATCH] Allow maximum flight protections mode in the config screen, refactor config (again) Signed-off-by: Octol1ttle --- .../flightassistant/Dimensions.java | 8 +- .../flightassistant/FAModMenuImpl.java | 182 ++++++++++-------- .../flightassistant/FlightAssistant.java | 3 +- .../flightassistant/HudRenderer.java | 7 +- .../autoflight/AutoFireworkOffAlert.java | 2 +- .../alerts/autoflight/AutopilotOffAlert.java | 2 +- .../alerts/fault/ComputerFaultAlert.java | 2 +- .../alerts/fault/IndicatorFaultAlert.java | 2 +- .../firework/FireworkNoResponseAlert.java | 2 +- .../alerts/firework/FireworkUnsafeAlert.java | 2 +- .../nav/ApproachingVoidDamageLevelAlert.java | 2 +- .../alerts/nav/MinimumsAlert.java | 2 +- .../nav/gpws/ExcessiveDescentAlert.java | 4 +- .../gpws/ExcessiveTerrainClosureAlert.java | 4 +- .../alerts/other/ElytraHealthLowAlert.java | 2 +- .../alerts/other/StallAlert.java | 2 +- .../computers/AirDataComputer.java | 9 +- .../autoflight/AutoFlightComputer.java | 2 +- .../computers/autoflight/PitchController.java | 1 + .../computers/safety/GPWSComputer.java | 8 +- .../config/ComputerConfig.java | 23 +++ .../flightassistant/config/FAConfig.java | 73 ++++--- .../flightassistant/config/HudConfig.java | 108 ++--------- .../config/IndicatorConfigStorage.java | 126 ++++++++++++ .../indicators/AlertIndicator.java | 4 +- .../indicators/AltitudeIndicator.java | 20 +- .../indicators/ElytraHealthIndicator.java | 8 +- .../indicators/FlightDirectorsIndicator.java | 6 +- .../indicators/FlightMode.java | 4 +- .../indicators/FlightModeIndicator.java | 10 +- .../indicators/FlightPathIndicator.java | 4 +- .../indicators/HeadingIndicator.java | 14 +- .../indicators/LocationIndicator.java | 6 +- .../indicators/PitchIndicator.java | 10 +- .../indicators/SpeedIndicator.java | 26 +-- .../indicators/StatusIndicator.java | 14 +- .../assets/flightassistant/lang/en_us.json | 83 ++++---- .../assets/flightassistant/lang/ru_ru.json | 84 ++++---- 38 files changed, 496 insertions(+), 375 deletions(-) create mode 100644 src/main/java/ru/octol1ttle/flightassistant/config/ComputerConfig.java create mode 100644 src/main/java/ru/octol1ttle/flightassistant/config/IndicatorConfigStorage.java diff --git a/src/main/java/ru/octol1ttle/flightassistant/Dimensions.java b/src/main/java/ru/octol1ttle/flightassistant/Dimensions.java index 25efc037..9e4f7b35 100644 --- a/src/main/java/ru/octol1ttle/flightassistant/Dimensions.java +++ b/src/main/java/ru/octol1ttle/flightassistant/Dimensions.java @@ -20,15 +20,15 @@ public class Dimensions { public int bFrame; public void update(DrawContext context, double fov) { - hScreen = MathHelper.floor(context.getScaledWindowHeight() / FAConfig.get().hudScale); - wScreen = MathHelper.floor(context.getScaledWindowWidth() / FAConfig.get().hudScale); + hScreen = MathHelper.floor(context.getScaledWindowHeight() / FAConfig.hud().hudScale); + wScreen = MathHelper.floor(context.getScaledWindowWidth() / FAConfig.hud().hudScale); degreesPerPixel = MathHelper.floor(hScreen / fov); xMid = wScreen / 2; yMid = hScreen / 2; - wFrame = (int) (wScreen * FAConfig.get().frameWidth); - hFrame = (int) (hScreen * FAConfig.get().frameHeight); + wFrame = (int) (wScreen * FAConfig.hud().frameWidth); + hFrame = (int) (hScreen * FAConfig.hud().frameHeight); lFrame = (wScreen - wFrame) / 2; rFrame = lFrame + wFrame; diff --git a/src/main/java/ru/octol1ttle/flightassistant/FAModMenuImpl.java b/src/main/java/ru/octol1ttle/flightassistant/FAModMenuImpl.java index a743efae..1b85259a 100644 --- a/src/main/java/ru/octol1ttle/flightassistant/FAModMenuImpl.java +++ b/src/main/java/ru/octol1ttle/flightassistant/FAModMenuImpl.java @@ -13,204 +13,234 @@ import java.awt.Color; import net.minecraft.text.Text; import net.minecraft.util.math.MathHelper; +import ru.octol1ttle.flightassistant.config.ComputerConfig; import ru.octol1ttle.flightassistant.config.FAConfig; -import ru.octol1ttle.flightassistant.config.HudConfig; +import ru.octol1ttle.flightassistant.config.HUDConfig; +import ru.octol1ttle.flightassistant.config.IndicatorConfigStorage; public class FAModMenuImpl implements ModMenuApi { @Override public ConfigScreenFactory getModConfigScreenFactory() { - return parent -> YetAnotherConfigLib.create(FAConfig.HANDLER, (defaults, config, builder) -> builder - .title(Text.translatable("mod.flightassistant")) - .category(ConfigCategory.createBuilder() - .name(Text.translatable("config.flightassistant.category.hud_settings")) - .option(Option.createBuilder() - .name(Text.translatable("config.flightassistant.settings.batching")) - .available(FlightAssistant.canUseBatching()) - .binding(FAConfig.BatchedRendering.SINGLE_BATCH, () -> config.batchedRendering, o -> config.batchedRendering = o) - .controller(opt -> EnumControllerBuilder.create(opt).enumClass(FAConfig.BatchedRendering.class)) - .build() - ) - .option(Option.createBuilder() - .name(Text.translatable("config.flightassistant.settings.hud_scale")) - .binding(1.0f, () -> config.hudScale, o -> config.hudScale = o) - .controller(opt -> FloatSliderControllerBuilder.create(opt) - .range(0.1f, 5.0f) - .step(0.05f) - .formatValue(value -> Text.literal(MathHelper.floor(value * 100.0f) + "%")) - ) - .build() + return parent -> { + HUDConfig hud = FAConfig.hud(); + IndicatorConfigStorage indicators = FAConfig.getIndicatorConfigStorage(); + ComputerConfig computers = FAConfig.computer(); + + return YetAnotherConfigLib.createBuilder() + .title(Text.translatable("mod.flightassistant")) + .category(hud(Text.translatable("config.flightassistant.category.hud_settings"), hud, new HUDConfig())) + .category(indicators(Text.translatable("config.flightassistant.category.not_flying_no_elytra"), indicators.notFlyingNoElytra, IndicatorConfigStorage.createFull())) + .category(indicators(Text.translatable("config.flightassistant.category.not_flying_has_elytra"), indicators.notFlyingHasElytra, IndicatorConfigStorage.createMinimal())) + .category(indicators(Text.translatable("config.flightassistant.category.flying"), indicators.flying, IndicatorConfigStorage.createDisabled())) + .category(computers(Text.translatable("config.flightassistant.category.computer_settings"), computers, new ComputerConfig())) + + .build().generateScreen(parent); + }; + } + + private ConfigCategory hud(Text name, HUDConfig config, HUDConfig defaults) { + return ConfigCategory.createBuilder() + .name(name) + + .option(Option.createBuilder() + .name(Text.translatable("config.flightassistant.hud.batching")) + .available(FlightAssistant.canUseBatching()) + .binding(defaults.batchedRendering, () -> config.batchedRendering, o -> config.batchedRendering = o) + .controller(opt -> EnumControllerBuilder.create(opt).enumClass(HUDConfig.BatchedRendering.class)) + .build() + ) + .option(Option.createBuilder() + .name(Text.translatable("config.flightassistant.hud.scale")) + .binding(defaults.hudScale, () -> config.hudScale, o -> config.hudScale = o) + .controller(opt -> FloatSliderControllerBuilder.create(opt) + .range(0.1f, 5.0f) + .step(0.05f) + .formatValue(value -> Text.literal(MathHelper.floor(value * 100.0f) + "%")) ) - .option(Option.createBuilder() - .name(Text.translatable("config.flightassistant.settings.frame_width")) - .binding(0.6f, () -> config.frameWidth, o -> config.frameWidth = o) - .controller(opt -> FloatSliderControllerBuilder.create(opt) - .range(0.3f, 0.9f) - .step(0.05f) - .formatValue(value -> Text.literal(MathHelper.floor(value * 100.0f) + "%")) - ) - .build() + .build() + ) + .option(Option.createBuilder() + .name(Text.translatable("config.flightassistant.hud.frame_width")) + .binding(defaults.frameWidth, () -> config.frameWidth, o -> config.frameWidth = o) + .controller(opt -> FloatSliderControllerBuilder.create(opt) + .range(0.3f, 0.9f) + .step(0.05f) + .formatValue(value -> Text.literal(MathHelper.floor(value * 100.0f) + "%")) ) - .option(Option.createBuilder() - .name(Text.translatable("config.flightassistant.settings.frame_height")) - .binding(0.6f, () -> config.frameHeight, o -> config.frameHeight = o) - .controller(opt -> FloatSliderControllerBuilder.create(opt) - .range(0.3f, 0.9f) - .step(0.05f) - .formatValue(value -> Text.literal(MathHelper.floor(value * 100.0f) + "%")) - ) - .build() + .build() + ) + .option(Option.createBuilder() + .name(Text.translatable("config.flightassistant.hud.frame_height")) + .binding(defaults.frameHeight, () -> config.frameHeight, o -> config.frameHeight = o) + .controller(opt -> FloatSliderControllerBuilder.create(opt) + .range(0.3f, 0.9f) + .step(0.05f) + .formatValue(value -> Text.literal(MathHelper.floor(value * 100.0f) + "%")) ) .build() ) - .category(hud(Text.translatable("config.flightassistant.category.not_flying_no_elytra"), config.notFlyingNoElytra, new HudConfig().disableAll())) - .category(hud(Text.translatable("config.flightassistant.category.not_flying_has_elytra"), config.notFlyingHasElytra, new HudConfig().setMinimal())) - .category(hud(Text.translatable("config.flightassistant.category.flying"), config.flying, new HudConfig())) - ).generateScreen(parent); + + .build(); } - private ConfigCategory hud(Text name, HudConfig config, HudConfig defaults) { + private ConfigCategory indicators(Text name, IndicatorConfigStorage.IndicatorConfig config, IndicatorConfigStorage.IndicatorConfig defaults) { return ConfigCategory.createBuilder() .name(name) - .option(LabelOption.create(Text.translatable("config.flightassistant.hud.color"))) + .option(LabelOption.create(Text.translatable("config.flightassistant.indicators.color"))) .option(Option.createBuilder() - .name(Text.translatable("config.flightassistant.hud.color.frame")) + .name(Text.translatable("config.flightassistant.indicators.color.frame")) .binding(defaults.frameColor, () -> config.frameColor, o -> config.frameColor = o) .controller(ColorControllerBuilder::create) .build()) .option(Option.createBuilder() - .name(Text.translatable("config.flightassistant.hud.color.status")) + .name(Text.translatable("config.flightassistant.indicators.color.status")) .binding(defaults.statusColor, () -> config.statusColor, o -> config.statusColor = o) .controller(ColorControllerBuilder::create) .build()) .option(Option.createBuilder() - .name(Text.translatable("config.flightassistant.hud.color.advisory")) + .name(Text.translatable("config.flightassistant.indicators.color.advisory")) .binding(defaults.advisoryColor, () -> config.advisoryColor, o -> config.advisoryColor = o) .controller(ColorControllerBuilder::create) .build()) .option(Option.createBuilder() - .name(Text.translatable("config.flightassistant.hud.color.caution")) + .name(Text.translatable("config.flightassistant.indicators.color.caution")) .binding(defaults.cautionColor, () -> config.cautionColor, o -> config.cautionColor = o) .controller(ColorControllerBuilder::create) .build()) .option(Option.createBuilder() - .name(Text.translatable("config.flightassistant.hud.color.warning")) + .name(Text.translatable("config.flightassistant.indicators.color.warning")) .binding(defaults.warningColor, () -> config.warningColor, o -> config.warningColor = o) .controller(ColorControllerBuilder::create) .build()) - .option(LabelOption.create(Text.translatable("config.flightassistant.hud.speed"))) + .option(LabelOption.create(Text.translatable("config.flightassistant.indicators.speed"))) .option(Option.createBuilder() - .name(Text.translatable("config.flightassistant.hud.speed.scale")) + .name(Text.translatable("config.flightassistant.indicators.speed.scale")) .binding(defaults.showSpeedScale, () -> config.showSpeedScale, o -> config.showSpeedScale = o) .controller(TickBoxControllerBuilder::create) .build()) .option(Option.createBuilder() - .name(Text.translatable("config.flightassistant.hud.speed.readout")) + .name(Text.translatable("config.flightassistant.indicators.speed.readout")) .binding(defaults.showSpeedReadout, () -> config.showSpeedReadout, o -> config.showSpeedReadout = o) .controller(TickBoxControllerBuilder::create) .build()) .option(Option.createBuilder() - .name(Text.translatable("config.flightassistant.hud.speed.ground_readout")) + .name(Text.translatable("config.flightassistant.indicators.speed.ground_readout")) .binding(defaults.showGroundSpeedReadout, () -> config.showGroundSpeedReadout, o -> config.showGroundSpeedReadout = o) .controller(TickBoxControllerBuilder::create) .build()) .option(Option.createBuilder() - .name(Text.translatable("config.flightassistant.hud.speed.vertical_readout")) + .name(Text.translatable("config.flightassistant.indicators.speed.vertical_readout")) .binding(defaults.showVerticalSpeedReadout, () -> config.showVerticalSpeedReadout, o -> config.showVerticalSpeedReadout = o) .controller(TickBoxControllerBuilder::create) .build()) - .option(LabelOption.create(Text.translatable("config.flightassistant.hud.altitude"))) + .option(LabelOption.create(Text.translatable("config.flightassistant.indicators.altitude"))) .option(Option.createBuilder() - .name(Text.translatable("config.flightassistant.hud.altitude.scale")) + .name(Text.translatable("config.flightassistant.indicators.altitude.scale")) .binding(defaults.showAltitudeScale, () -> config.showAltitudeScale, o -> config.showAltitudeScale = o) .controller(TickBoxControllerBuilder::create) .build()) .option(Option.createBuilder() - .name(Text.translatable("config.flightassistant.hud.altitude.readout")) + .name(Text.translatable("config.flightassistant.indicators.altitude.readout")) .binding(defaults.showAltitudeReadout, () -> config.showAltitudeReadout, o -> config.showAltitudeReadout = o) .controller(TickBoxControllerBuilder::create) .build()) .option(Option.createBuilder() - .name(Text.translatable("config.flightassistant.hud.altitude.ground")) + .name(Text.translatable("config.flightassistant.indicators.altitude.ground")) .binding(defaults.showGroundAltitude, () -> config.showGroundAltitude, o -> config.showGroundAltitude = o) .controller(TickBoxControllerBuilder::create) .build()) - .option(LabelOption.create(Text.translatable("config.flightassistant.hud.heading"))) + .option(LabelOption.create(Text.translatable("config.flightassistant.indicators.heading"))) .option(Option.createBuilder() - .name(Text.translatable("config.flightassistant.hud.heading.scale")) + .name(Text.translatable("config.flightassistant.indicators.heading.scale")) .binding(defaults.showHeadingScale, () -> config.showHeadingScale, o -> config.showHeadingScale = o) .controller(TickBoxControllerBuilder::create) .build()) .option(Option.createBuilder() - .name(Text.translatable("config.flightassistant.hud.heading.readout")) + .name(Text.translatable("config.flightassistant.indicators.heading.readout")) .binding(defaults.showHeadingReadout, () -> config.showHeadingReadout, o -> config.showHeadingReadout = o) .controller(TickBoxControllerBuilder::create) .build()) - .option(LabelOption.create(Text.translatable("config.flightassistant.hud.automation"))) + .option(LabelOption.create(Text.translatable("config.flightassistant.indicators.automation"))) .option(Option.createBuilder() - .name(Text.translatable("config.flightassistant.hud.automation.firework")) + .name(Text.translatable("config.flightassistant.indicators.automation.firework")) .binding(defaults.showFireworkMode, () -> config.showFireworkMode, o -> config.showFireworkMode = o) .controller(TickBoxControllerBuilder::create) .build()) .option(Option.createBuilder() - .name(Text.translatable("config.flightassistant.hud.automation.vertical")) + .name(Text.translatable("config.flightassistant.indicators.automation.vertical")) .binding(defaults.showVerticalMode, () -> config.showVerticalMode, o -> config.showVerticalMode = o) .controller(TickBoxControllerBuilder::create) .build()) .option(Option.createBuilder() - .name(Text.translatable("config.flightassistant.hud.automation.lateral")) + .name(Text.translatable("config.flightassistant.indicators.automation.lateral")) .binding(defaults.showLateralMode, () -> config.showLateralMode, o -> config.showLateralMode = o) .controller(TickBoxControllerBuilder::create) .build()) .option(Option.createBuilder() - .name(Text.translatable("config.flightassistant.hud.automation.status")) + .name(Text.translatable("config.flightassistant.indicators.automation.status")) .binding(defaults.showAutomationStatus, () -> config.showAutomationStatus, o -> config.showAutomationStatus = o) .controller(TickBoxControllerBuilder::create) .build()) - .option(LabelOption.create(Text.translatable("config.flightassistant.hud.info"))) + .option(LabelOption.create(Text.translatable("config.flightassistant.indicators.info"))) .option(Option.createBuilder() - .name(Text.translatable("config.flightassistant.hud.info.alerts")) + .name(Text.translatable("config.flightassistant.indicators.info.alerts")) .binding(defaults.showAlerts, () -> config.showAlerts, o -> config.showAlerts = o) .controller(TickBoxControllerBuilder::create) .build()) .option(Option.createBuilder() - .name(Text.translatable("config.flightassistant.hud.info.firework_count")) + .name(Text.translatable("config.flightassistant.indicators.info.firework_count")) .binding(defaults.showFireworkCount, () -> config.showFireworkCount, o -> config.showFireworkCount = o) .controller(TickBoxControllerBuilder::create) .build()) .option(Option.createBuilder() - .name(Text.translatable("config.flightassistant.hud.info.waypoint_distance")) + .name(Text.translatable("config.flightassistant.indicators.info.waypoint_distance")) .binding(defaults.showDistanceToWaypoint, () -> config.showDistanceToWaypoint, o -> config.showDistanceToWaypoint = o) .controller(TickBoxControllerBuilder::create) .build()) - .option(LabelOption.create(Text.translatable("config.flightassistant.hud.misc"))) + .option(LabelOption.create(Text.translatable("config.flightassistant.indicators.misc"))) .option(Option.createBuilder() - .name(Text.translatable("config.flightassistant.hud.misc.pitch_ladder")) + .name(Text.translatable("config.flightassistant.indicators.misc.pitch_ladder")) .binding(defaults.showPitchLadder, () -> config.showPitchLadder, o -> config.showPitchLadder = o) .controller(TickBoxControllerBuilder::create) .build()) .option(Option.createBuilder() - .name(Text.translatable("config.flightassistant.hud.misc.flight_path")) + .name(Text.translatable("config.flightassistant.indicators.misc.flight_path")) .binding(defaults.showFlightPath, () -> config.showFlightPath, o -> config.showFlightPath = o) .controller(TickBoxControllerBuilder::create) .build()) .option(Option.createBuilder() - .name(Text.translatable("config.flightassistant.hud.misc.coordinates")) + .name(Text.translatable("config.flightassistant.indicators.misc.coordinates")) .binding(defaults.showCoordinates, () -> config.showCoordinates, o -> config.showCoordinates = o) .controller(TickBoxControllerBuilder::create) .build()) .option(Option.createBuilder() - .name(Text.translatable("config.flightassistant.hud.misc.elytra_health")) + .name(Text.translatable("config.flightassistant.indicators.misc.elytra_health")) .binding(defaults.showElytraHealth, () -> config.showElytraHealth, o -> config.showElytraHealth = o) .controller(TickBoxControllerBuilder::create) .build()) .build(); } + + private ConfigCategory computers(Text name, ComputerConfig config, ComputerConfig defaults) { + return ConfigCategory.createBuilder() + .name(name) + + .option(Option.createBuilder() + .name(Text.translatable("config.flightassistant.computers.protections")) + .available(FlightAssistant.canUseBatching()) + .binding(defaults.protectionsMode, () -> config.protectionsMode, o -> config.protectionsMode = o) + .controller(opt -> EnumControllerBuilder.create(opt).enumClass(ComputerConfig.FlightProtectionsMode.class)) + .build() + ) + + .build(); + } } diff --git a/src/main/java/ru/octol1ttle/flightassistant/FlightAssistant.java b/src/main/java/ru/octol1ttle/flightassistant/FlightAssistant.java index 7937dfbd..34aae159 100644 --- a/src/main/java/ru/octol1ttle/flightassistant/FlightAssistant.java +++ b/src/main/java/ru/octol1ttle/flightassistant/FlightAssistant.java @@ -5,6 +5,7 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; import ru.octol1ttle.flightassistant.config.FAConfig; +import ru.octol1ttle.flightassistant.config.HUDConfig; public class FlightAssistant implements ClientModInitializer { public static final String MODID = "flightassistant"; @@ -18,7 +19,7 @@ public void onInitializeClient() { } public static boolean isHUDBatched() { - return canUseBatching() && FAConfig.get().batchedRendering != FAConfig.BatchedRendering.NO_BATCHING; + return canUseBatching() && FAConfig.hud().batchedRendering != HUDConfig.BatchedRendering.NO_BATCHING; } public static boolean canUseBatching() { diff --git a/src/main/java/ru/octol1ttle/flightassistant/HudRenderer.java b/src/main/java/ru/octol1ttle/flightassistant/HudRenderer.java index 2ff44029..4267b476 100644 --- a/src/main/java/ru/octol1ttle/flightassistant/HudRenderer.java +++ b/src/main/java/ru/octol1ttle/flightassistant/HudRenderer.java @@ -9,6 +9,7 @@ import ru.octol1ttle.flightassistant.compatibility.ImmediatelyFastBatchingAccessor; import ru.octol1ttle.flightassistant.computers.ComputerHost; import ru.octol1ttle.flightassistant.config.FAConfig; +import ru.octol1ttle.flightassistant.config.HUDConfig; import ru.octol1ttle.flightassistant.indicators.AlertIndicator; import ru.octol1ttle.flightassistant.indicators.AltitudeIndicator; import ru.octol1ttle.flightassistant.indicators.ElytraHealthIndicator; @@ -53,8 +54,8 @@ public void render(MinecraftClient mc, DrawContext context, float tickDelta) { GameRendererInvoker renderer = (GameRendererInvoker) mc.gameRenderer; dim.update(context, renderer.getFov(mc.gameRenderer.getCamera(), tickDelta, true)); - float hudScale = FAConfig.get().hudScale; - boolean batchAll = FlightAssistant.canUseBatching() && FAConfig.get().batchedRendering == FAConfig.BatchedRendering.SINGLE_BATCH; + float hudScale = FAConfig.hud().hudScale; + boolean batchAll = FlightAssistant.canUseBatching() && FAConfig.hud().batchedRendering == HUDConfig.BatchedRendering.SINGLE_BATCH; context.getMatrices().push(); context.getMatrices().scale(hudScale, hudScale, hudScale); @@ -92,7 +93,7 @@ public void render(MinecraftClient mc, DrawContext context, float tickDelta) { } public void drawBatchedComponent(Runnable draw) { - boolean batch = FlightAssistant.canUseBatching() && FAConfig.get().batchedRendering == FAConfig.BatchedRendering.BATCH_PER_COMPONENT; + boolean batch = FlightAssistant.canUseBatching() && FAConfig.hud().batchedRendering == HUDConfig.BatchedRendering.PER_COMPONENT; if (batch) { ImmediatelyFastBatchingAccessor.beginHudBatching(); } diff --git a/src/main/java/ru/octol1ttle/flightassistant/alerts/autoflight/AutoFireworkOffAlert.java b/src/main/java/ru/octol1ttle/flightassistant/alerts/autoflight/AutoFireworkOffAlert.java index 10be1a57..8fb3dfc8 100644 --- a/src/main/java/ru/octol1ttle/flightassistant/alerts/autoflight/AutoFireworkOffAlert.java +++ b/src/main/java/ru/octol1ttle/flightassistant/alerts/autoflight/AutoFireworkOffAlert.java @@ -30,7 +30,7 @@ public boolean isTriggered() { @Override public int renderECAM(TextRenderer textRenderer, DrawContext context, int x, int y, boolean highlight) { return HudComponent.drawHighlightedText(textRenderer, context, Text.translatable("alerts.flightassistant.autoflight.auto_firework_off"), x, y, - FAConfig.hud().cautionColor, + FAConfig.indicator().cautionColor, highlight && autoflight.afrwkDisconnectionForced); } } diff --git a/src/main/java/ru/octol1ttle/flightassistant/alerts/autoflight/AutopilotOffAlert.java b/src/main/java/ru/octol1ttle/flightassistant/alerts/autoflight/AutopilotOffAlert.java index 745fcb6a..e93545d6 100644 --- a/src/main/java/ru/octol1ttle/flightassistant/alerts/autoflight/AutopilotOffAlert.java +++ b/src/main/java/ru/octol1ttle/flightassistant/alerts/autoflight/AutopilotOffAlert.java @@ -30,7 +30,7 @@ public boolean isTriggered() { @Override public int renderECAM(TextRenderer textRenderer, DrawContext context, int x, int y, boolean highlight) { return HudComponent.drawHighlightedText(textRenderer, context, Text.translatable("alerts.flightassistant.autoflight.autopilot_off"), x, y, - FAConfig.hud().warningColor, + FAConfig.indicator().warningColor, highlight && autoflight.apDisconnectionForced); } } diff --git a/src/main/java/ru/octol1ttle/flightassistant/alerts/fault/ComputerFaultAlert.java b/src/main/java/ru/octol1ttle/flightassistant/alerts/fault/ComputerFaultAlert.java index 3c6f014d..beb946c3 100644 --- a/src/main/java/ru/octol1ttle/flightassistant/alerts/fault/ComputerFaultAlert.java +++ b/src/main/java/ru/octol1ttle/flightassistant/alerts/fault/ComputerFaultAlert.java @@ -33,7 +33,7 @@ public int renderECAM(TextRenderer textRenderer, DrawContext context, int x, int int i = 0; for (IComputer computer : host.faulted) { i += HudComponent.drawHighlightedText(textRenderer, context, Text.translatable("alerts.flightassistant.fault.computers." + computer.getId()), x, y, - FAConfig.hud().warningColor, highlight); + FAConfig.indicator().warningColor, highlight); y += 10; } diff --git a/src/main/java/ru/octol1ttle/flightassistant/alerts/fault/IndicatorFaultAlert.java b/src/main/java/ru/octol1ttle/flightassistant/alerts/fault/IndicatorFaultAlert.java index f76bd674..cf71128c 100644 --- a/src/main/java/ru/octol1ttle/flightassistant/alerts/fault/IndicatorFaultAlert.java +++ b/src/main/java/ru/octol1ttle/flightassistant/alerts/fault/IndicatorFaultAlert.java @@ -35,7 +35,7 @@ public int renderECAM(TextRenderer textRenderer, DrawContext context, int x, int int i = 0; for (HudComponent component : renderer.faulted) { i += HudComponent.drawText(textRenderer, context, Text.translatable("alerts.flightassistant.fault.indicators." + component.getId()), x, y, - FAConfig.hud().cautionColor); + FAConfig.indicator().cautionColor); y += 10; } diff --git a/src/main/java/ru/octol1ttle/flightassistant/alerts/firework/FireworkNoResponseAlert.java b/src/main/java/ru/octol1ttle/flightassistant/alerts/firework/FireworkNoResponseAlert.java index 1d6ead47..d3789ee2 100644 --- a/src/main/java/ru/octol1ttle/flightassistant/alerts/firework/FireworkNoResponseAlert.java +++ b/src/main/java/ru/octol1ttle/flightassistant/alerts/firework/FireworkNoResponseAlert.java @@ -33,6 +33,6 @@ public boolean isTriggered() { @Override public int renderECAM(TextRenderer textRenderer, DrawContext context, int x, int y, boolean highlight) { return HudComponent.drawHighlightedText(textRenderer, context, Text.translatable("alerts.flightassistant.firework.no_response"), x, y, - FAConfig.hud().warningColor, highlight); + FAConfig.indicator().warningColor, highlight); } } diff --git a/src/main/java/ru/octol1ttle/flightassistant/alerts/firework/FireworkUnsafeAlert.java b/src/main/java/ru/octol1ttle/flightassistant/alerts/firework/FireworkUnsafeAlert.java index 8a842db6..3d138f14 100644 --- a/src/main/java/ru/octol1ttle/flightassistant/alerts/firework/FireworkUnsafeAlert.java +++ b/src/main/java/ru/octol1ttle/flightassistant/alerts/firework/FireworkUnsafeAlert.java @@ -45,6 +45,6 @@ public boolean isTriggered() { @Override public int renderECAM(TextRenderer textRenderer, DrawContext context, int x, int y, boolean highlight) { return HudComponent.drawHighlightedText(textRenderer, context, Text.translatable("alerts.flightassistant.firework.unsafe"), x, y, - FAConfig.hud().warningColor, highlight && data.isFlying); + FAConfig.indicator().warningColor, highlight && data.isFlying); } } diff --git a/src/main/java/ru/octol1ttle/flightassistant/alerts/nav/ApproachingVoidDamageLevelAlert.java b/src/main/java/ru/octol1ttle/flightassistant/alerts/nav/ApproachingVoidDamageLevelAlert.java index be96f12b..4a89a795 100644 --- a/src/main/java/ru/octol1ttle/flightassistant/alerts/nav/ApproachingVoidDamageLevelAlert.java +++ b/src/main/java/ru/octol1ttle/flightassistant/alerts/nav/ApproachingVoidDamageLevelAlert.java @@ -34,6 +34,6 @@ public int renderECAM(TextRenderer textRenderer, DrawContext context, int x, int : Text.translatable("alerts.flightassistant.approaching_void_damage_level"); return HudComponent.drawHighlightedText(textRenderer, context, text, x, y, - FAConfig.hud().warningColor, highlight); + FAConfig.indicator().warningColor, highlight); } } diff --git a/src/main/java/ru/octol1ttle/flightassistant/alerts/nav/MinimumsAlert.java b/src/main/java/ru/octol1ttle/flightassistant/alerts/nav/MinimumsAlert.java index ebeec20a..b50343a9 100644 --- a/src/main/java/ru/octol1ttle/flightassistant/alerts/nav/MinimumsAlert.java +++ b/src/main/java/ru/octol1ttle/flightassistant/alerts/nav/MinimumsAlert.java @@ -30,6 +30,6 @@ public boolean isTriggered() { @Override public int renderECAM(TextRenderer textRenderer, DrawContext context, int x, int y, boolean highlight) { return HudComponent.drawHighlightedText(textRenderer, context, Text.translatable("alerts.flightassistant.reached_minimums"), x, y, - FAConfig.hud().cautionColor, false); + FAConfig.indicator().cautionColor, false); } } diff --git a/src/main/java/ru/octol1ttle/flightassistant/alerts/nav/gpws/ExcessiveDescentAlert.java b/src/main/java/ru/octol1ttle/flightassistant/alerts/nav/gpws/ExcessiveDescentAlert.java index 7b990075..1729fbfb 100644 --- a/src/main/java/ru/octol1ttle/flightassistant/alerts/nav/gpws/ExcessiveDescentAlert.java +++ b/src/main/java/ru/octol1ttle/flightassistant/alerts/nav/gpws/ExcessiveDescentAlert.java @@ -33,14 +33,14 @@ public boolean isTriggered() { public boolean renderCentered(TextRenderer textRenderer, DrawContext context, int x, int y, boolean highlight) { if (gpws.descentImpactTime <= PULL_UP_THRESHOLD) { HudComponent.drawHighlightedMiddleAlignedText(textRenderer, context, Text.translatable("alerts.flightassistant.pull_up"), x, y, - FAConfig.hud().warningColor, highlight); + FAConfig.indicator().warningColor, highlight); return true; } if (gpws.descentImpactTime <= SINK_RATE_THRESHOLD) { HudComponent.drawHighlightedMiddleAlignedText(textRenderer, context, Text.translatable("alerts.flightassistant.sink_rate"), x, y, - FAConfig.hud().cautionColor, highlight); + FAConfig.indicator().cautionColor, highlight); return true; } diff --git a/src/main/java/ru/octol1ttle/flightassistant/alerts/nav/gpws/ExcessiveTerrainClosureAlert.java b/src/main/java/ru/octol1ttle/flightassistant/alerts/nav/gpws/ExcessiveTerrainClosureAlert.java index 5d4a4884..276eae17 100644 --- a/src/main/java/ru/octol1ttle/flightassistant/alerts/nav/gpws/ExcessiveTerrainClosureAlert.java +++ b/src/main/java/ru/octol1ttle/flightassistant/alerts/nav/gpws/ExcessiveTerrainClosureAlert.java @@ -56,14 +56,14 @@ public boolean isTriggered() { public boolean renderCentered(TextRenderer textRenderer, DrawContext context, int x, int y, boolean highlight) { if (gpws.terrainImpactTime <= PULL_UP_THRESHOLD) { HudComponent.drawHighlightedMiddleAlignedText(textRenderer, context, Text.translatable("alerts.flightassistant.pull_up"), x, y, - FAConfig.hud().warningColor, highlight); + FAConfig.indicator().warningColor, highlight); return true; } if (gpws.terrainImpactTime <= TERRAIN_THRESHOLD) { HudComponent.drawHighlightedMiddleAlignedText(textRenderer, context, Text.translatable("alerts.flightassistant.terrain_ahead"), x, y, - FAConfig.hud().cautionColor, highlight); + FAConfig.indicator().cautionColor, highlight); return true; } diff --git a/src/main/java/ru/octol1ttle/flightassistant/alerts/other/ElytraHealthLowAlert.java b/src/main/java/ru/octol1ttle/flightassistant/alerts/other/ElytraHealthLowAlert.java index f5ca766d..f966fb50 100644 --- a/src/main/java/ru/octol1ttle/flightassistant/alerts/other/ElytraHealthLowAlert.java +++ b/src/main/java/ru/octol1ttle/flightassistant/alerts/other/ElytraHealthLowAlert.java @@ -30,6 +30,6 @@ public boolean isTriggered() { @Override public int renderECAM(TextRenderer textRenderer, DrawContext context, int x, int y, boolean highlight) { return HudComponent.drawHighlightedText(textRenderer, context, Text.translatable("alerts.flightassistant.elytra_health_low"), x, y, - FAConfig.hud().warningColor, highlight && data.isFlying); + FAConfig.indicator().warningColor, highlight && data.isFlying); } } \ No newline at end of file diff --git a/src/main/java/ru/octol1ttle/flightassistant/alerts/other/StallAlert.java b/src/main/java/ru/octol1ttle/flightassistant/alerts/other/StallAlert.java index 53222f8e..e7b714e3 100644 --- a/src/main/java/ru/octol1ttle/flightassistant/alerts/other/StallAlert.java +++ b/src/main/java/ru/octol1ttle/flightassistant/alerts/other/StallAlert.java @@ -31,7 +31,7 @@ public boolean isTriggered() { @Override public boolean renderCentered(TextRenderer textRenderer, DrawContext context, int x, int y, boolean highlight) { - HudComponent.drawHighlightedMiddleAlignedText(textRenderer, context, Text.translatable("alerts.flightassistant.stall"), x, y, FAConfig.hud().warningColor, highlight); + HudComponent.drawHighlightedMiddleAlignedText(textRenderer, context, Text.translatable("alerts.flightassistant.stall"), x, y, FAConfig.indicator().warningColor, highlight); return true; } diff --git a/src/main/java/ru/octol1ttle/flightassistant/computers/AirDataComputer.java b/src/main/java/ru/octol1ttle/flightassistant/computers/AirDataComputer.java index e73f6d03..d3d3a77f 100644 --- a/src/main/java/ru/octol1ttle/flightassistant/computers/AirDataComputer.java +++ b/src/main/java/ru/octol1ttle/flightassistant/computers/AirDataComputer.java @@ -14,6 +14,8 @@ import net.minecraft.world.World; import org.joml.Matrix3f; import ru.octol1ttle.flightassistant.FAMathHelper; +import ru.octol1ttle.flightassistant.config.ComputerConfig; +import ru.octol1ttle.flightassistant.config.FAConfig; import static net.minecraft.SharedConstants.TICKS_PER_SECOND; @@ -52,7 +54,12 @@ public boolean canAutomationsActivate() { } public boolean canAutomationsActivate(boolean checkFlying) { - return (!checkFlying || isFlying) && mc.currentScreen == null && mc.getOverlay() == null; + ComputerConfig.FlightProtectionsMode mode = FAConfig.computer().protectionsMode; + return switch (mode) { + case FULL -> true; // TODO: wtf? this works even with singleplayer paused + case NO_OVERLAYS -> (!checkFlying || isFlying) && mc.currentScreen == null && mc.getOverlay() == null; + case DISABLED -> false; + }; } public boolean isGround(BlockPos pos) { diff --git a/src/main/java/ru/octol1ttle/flightassistant/computers/autoflight/AutoFlightComputer.java b/src/main/java/ru/octol1ttle/flightassistant/computers/autoflight/AutoFlightComputer.java index 65f82a58..7c733fa9 100644 --- a/src/main/java/ru/octol1ttle/flightassistant/computers/autoflight/AutoFlightComputer.java +++ b/src/main/java/ru/octol1ttle/flightassistant/computers/autoflight/AutoFlightComputer.java @@ -42,7 +42,7 @@ public AutoFlightComputer(AirDataComputer data, GPWSComputer gpws, FlightPlanner @Override public void tick() { - if (autoFireworkEnabled && gpws.getGPWSLampColor() == FAConfig.hud().frameColor) { + if (autoFireworkEnabled && gpws.getGPWSLampColor() == FAConfig.indicator().frameColor) { Integer targetSpeed = getTargetSpeed(); Integer targetAltitude = getTargetAltitude(); if (targetSpeed != null) { diff --git a/src/main/java/ru/octol1ttle/flightassistant/computers/autoflight/PitchController.java b/src/main/java/ru/octol1ttle/flightassistant/computers/autoflight/PitchController.java index 5e463395..5d69bdaa 100644 --- a/src/main/java/ru/octol1ttle/flightassistant/computers/autoflight/PitchController.java +++ b/src/main/java/ru/octol1ttle/flightassistant/computers/autoflight/PitchController.java @@ -76,6 +76,7 @@ public void smoothSetPitch(Float pitch, float delta) { newPitch = data.pitch + (pitch - data.pitch) * delta; } + // TODO: wtf? interpolation is missing when opening the inventory data.player.setPitch(-newPitch); } diff --git a/src/main/java/ru/octol1ttle/flightassistant/computers/safety/GPWSComputer.java b/src/main/java/ru/octol1ttle/flightassistant/computers/safety/GPWSComputer.java index 918f2155..0b996b0b 100644 --- a/src/main/java/ru/octol1ttle/flightassistant/computers/safety/GPWSComputer.java +++ b/src/main/java/ru/octol1ttle/flightassistant/computers/safety/GPWSComputer.java @@ -46,7 +46,7 @@ public void tick() { } public boolean isInDanger() { - return getGPWSLampColor() == FAConfig.hud().warningColor; + return getGPWSLampColor() == FAConfig.indicator().warningColor; } public boolean shouldCorrectSinkrate() { @@ -60,13 +60,13 @@ public boolean shouldCorrectTerrain() { public Color getGPWSLampColor() { if (positiveLessOrEquals(descentImpactTime, PULL_UP_THRESHOLD) || positiveLessOrEquals(terrainImpactTime, PULL_UP_THRESHOLD)) { - return FAConfig.hud().warningColor; + return FAConfig.indicator().warningColor; } if (positiveLessOrEquals(descentImpactTime, CAUTION_THRESHOLD) || positiveLessOrEquals(terrainImpactTime, CAUTION_THRESHOLD)) { - return FAConfig.hud().cautionColor; + return FAConfig.indicator().cautionColor; } - return FAConfig.hud().frameColor; + return FAConfig.indicator().frameColor; } public boolean shouldBlockPitchChanges() { diff --git a/src/main/java/ru/octol1ttle/flightassistant/config/ComputerConfig.java b/src/main/java/ru/octol1ttle/flightassistant/config/ComputerConfig.java new file mode 100644 index 00000000..fd150518 --- /dev/null +++ b/src/main/java/ru/octol1ttle/flightassistant/config/ComputerConfig.java @@ -0,0 +1,23 @@ +package ru.octol1ttle.flightassistant.config; + +import dev.isxander.yacl3.api.NameableEnum; +import dev.isxander.yacl3.config.v2.api.SerialEntry; +import java.util.Locale; +import net.minecraft.text.Text; + +public class ComputerConfig { + @SerialEntry + public FlightProtectionsMode protectionsMode = FlightProtectionsMode.NO_OVERLAYS; + + public enum FlightProtectionsMode implements NameableEnum { + FULL, + // TODO: LIMIT TO NO_OVERLAYS ON SERVERS + NO_OVERLAYS, + DISABLED; + + @Override + public Text getDisplayName() { + return Text.translatable("config.flightassistant.computers.protections." + name().toLowerCase(Locale.ROOT)); + } + } +} diff --git a/src/main/java/ru/octol1ttle/flightassistant/config/FAConfig.java b/src/main/java/ru/octol1ttle/flightassistant/config/FAConfig.java index eb76fd0a..d7fb3f0a 100644 --- a/src/main/java/ru/octol1ttle/flightassistant/config/FAConfig.java +++ b/src/main/java/ru/octol1ttle/flightassistant/config/FAConfig.java @@ -1,80 +1,77 @@ package ru.octol1ttle.flightassistant.config; import com.google.gson.GsonBuilder; -import dev.isxander.yacl3.api.NameableEnum; import dev.isxander.yacl3.config.v2.api.ConfigClassHandler; -import dev.isxander.yacl3.config.v2.api.SerialEntry; import dev.isxander.yacl3.config.v2.api.serializer.GsonConfigSerializerBuilder; import dev.isxander.yacl3.platform.YACLPlatform; -import java.util.Locale; import net.minecraft.client.MinecraftClient; import net.minecraft.item.ItemStack; import net.minecraft.item.Items; -import net.minecraft.text.Text; import net.minecraft.util.Identifier; import ru.octol1ttle.flightassistant.FlightAssistant; public class FAConfig { - public static ConfigClassHandler HANDLER = ConfigClassHandler.createBuilder(FAConfig.class) - .id(new Identifier(FlightAssistant.MODID, "main")) + private static final ConfigClassHandler HUD_HANDLER = ConfigClassHandler.createBuilder(HUDConfig.class) + .id(new Identifier(FlightAssistant.MODID, "hud")) .serializer(config -> GsonConfigSerializerBuilder.create(config) - .setPath(YACLPlatform.getConfigDir().resolve("flightassistant.json5")) + .setPath(YACLPlatform.getConfigDir().resolve("flightassistant_hud.json5")) .appendGsonBuilder(GsonBuilder::setPrettyPrinting) // not needed, pretty print by default .setJson5(true) .build()) .build(); - @SerialEntry - public HudConfig flying = new HudConfig(); - @SerialEntry - public HudConfig notFlyingHasElytra = new HudConfig().setMinimal(); - @SerialEntry - public HudConfig notFlyingNoElytra = new HudConfig().disableAll(); + private static final ConfigClassHandler INDICATORS_STORAGE_HANDLER = ConfigClassHandler.createBuilder(IndicatorConfigStorage.class) + .id(new Identifier(FlightAssistant.MODID, "indicators")) + .serializer(config -> GsonConfigSerializerBuilder.create(config) + .setPath(YACLPlatform.getConfigDir().resolve("flightassistant_indicators.json5")) + .appendGsonBuilder(GsonBuilder::setPrettyPrinting) // not needed, pretty print by default + .setJson5(true) + .build()) + .build(); - @SerialEntry - public BatchedRendering batchedRendering = BatchedRendering.SINGLE_BATCH; - @SerialEntry - public float hudScale = 1.0f; - @SerialEntry - public float frameWidth = 0.6f; - @SerialEntry - public float frameHeight = 0.6f; + private static final ConfigClassHandler COMPUTER_HANDLER = ConfigClassHandler.createBuilder(ComputerConfig.class) + .id(new Identifier(FlightAssistant.MODID, "computers")) + .serializer(config -> GsonConfigSerializerBuilder.create(config) + .setPath(YACLPlatform.getConfigDir().resolve("flightassistant_computers.json5")) + .appendGsonBuilder(GsonBuilder::setPrettyPrinting) // not needed, pretty print by default + .setJson5(true) + .build()) + .build(); public static void setup() { - HANDLER.load(); + HUD_HANDLER.load(); + INDICATORS_STORAGE_HANDLER.load(); + COMPUTER_HANDLER.load(); } - public static FAConfig get() { - return HANDLER.instance(); + public static HUDConfig hud() { + return HUD_HANDLER.instance(); } - public static HudConfig hud() { + public static IndicatorConfigStorage getIndicatorConfigStorage() { + return INDICATORS_STORAGE_HANDLER.instance(); + } + + public static IndicatorConfigStorage.IndicatorConfig indicator() { MinecraftClient client = MinecraftClient.getInstance(); if (client.player == null) { - throw new IllegalStateException("Attempted to retrieve HUD settings when there is no player"); + throw new IllegalStateException("Attempted to retrieve indicator settings when there is no player"); } if (client.player.isFallFlying()) { - return HANDLER.instance().flying; + return INDICATORS_STORAGE_HANDLER.instance().flying; } for (ItemStack stack : client.player.getItemsEquipped()) { if (Items.ELYTRA.equals(stack.getItem())) { - return HANDLER.instance().notFlyingHasElytra; + return INDICATORS_STORAGE_HANDLER.instance().notFlyingHasElytra; } } - return HANDLER.instance().notFlyingNoElytra; + return INDICATORS_STORAGE_HANDLER.instance().notFlyingNoElytra; } - public enum BatchedRendering implements NameableEnum { - NO_BATCHING, - BATCH_PER_COMPONENT, - SINGLE_BATCH; - - @Override - public Text getDisplayName() { - return Text.translatable("config.flightassistant.options.batching." + name().toLowerCase(Locale.ROOT)); - } + public static ComputerConfig computer() { + return COMPUTER_HANDLER.instance(); } } diff --git a/src/main/java/ru/octol1ttle/flightassistant/config/HudConfig.java b/src/main/java/ru/octol1ttle/flightassistant/config/HudConfig.java index 8001482f..bed65f66 100644 --- a/src/main/java/ru/octol1ttle/flightassistant/config/HudConfig.java +++ b/src/main/java/ru/octol1ttle/flightassistant/config/HudConfig.java @@ -1,104 +1,28 @@ package ru.octol1ttle.flightassistant.config; +import dev.isxander.yacl3.api.NameableEnum; import dev.isxander.yacl3.config.v2.api.SerialEntry; -import java.awt.Color; +import java.util.Locale; +import net.minecraft.text.Text; -public class HudConfig { +public class HUDConfig { @SerialEntry - public Color frameColor = Color.GREEN; + public BatchedRendering batchedRendering = BatchedRendering.SINGLE_BATCH; @SerialEntry - public Color statusColor = Color.WHITE; + public float hudScale = 1.0f; @SerialEntry - public Color advisoryColor = Color.CYAN; + public float frameWidth = 0.6f; @SerialEntry - public Color cautionColor = Color.YELLOW; - @SerialEntry - public Color warningColor = Color.RED; - - @SerialEntry - public boolean showSpeedScale = true; - @SerialEntry - public boolean showSpeedReadout = true; - @SerialEntry - public boolean showGroundSpeedReadout = true; - @SerialEntry - public boolean showVerticalSpeedReadout = true; - - @SerialEntry - public boolean showAltitudeScale = true; - @SerialEntry - public boolean showAltitudeReadout = true; - @SerialEntry - public boolean showGroundAltitude = true; - - @SerialEntry - public boolean showHeadingScale = true; - @SerialEntry - public boolean showHeadingReadout = true; - - @SerialEntry - public boolean showFireworkMode = true; - @SerialEntry - public boolean showVerticalMode = true; - @SerialEntry - public boolean showLateralMode = true; - @SerialEntry - public boolean showAutomationStatus = true; - - @SerialEntry - public boolean showAlerts = true; - @SerialEntry - public boolean showFireworkCount = true; - @SerialEntry - public boolean showDistanceToWaypoint = true; - - @SerialEntry - public boolean showPitchLadder = true; - @SerialEntry - public boolean showFlightPath = true; - @SerialEntry - public boolean showCoordinates = true; - @SerialEntry - public boolean showElytraHealth = true; - - public HudConfig setMinimal() { - this.showFlightPath = false; - this.showPitchLadder = false; - this.showSpeedScale = false; - this.showSpeedReadout = false; - this.showVerticalSpeedReadout = false; - this.showAltitudeScale = false; - this.showGroundAltitude = false; - this.showHeadingScale = false; - this.showFireworkMode = false; - this.showFireworkCount = false; - this.showDistanceToWaypoint = false; - - return this; - } + public float frameHeight = 0.6f; - public HudConfig disableAll() { - this.showElytraHealth = false; - this.showCoordinates = false; - this.showFlightPath = false; - this.showPitchLadder = false; - this.showSpeedScale = false; - this.showSpeedReadout = false; - this.showGroundSpeedReadout = false; - this.showVerticalSpeedReadout = false; - this.showAltitudeScale = false; - this.showAltitudeReadout = false; - this.showGroundAltitude = false; - this.showHeadingScale = false; - this.showHeadingReadout = false; - this.showAlerts = false; - this.showFireworkMode = false; - this.showVerticalMode = false; - this.showLateralMode = false; - this.showAutomationStatus = false; - this.showFireworkCount = false; - this.showDistanceToWaypoint = false; + public enum BatchedRendering implements NameableEnum { + NO_BATCHING, + PER_COMPONENT, + SINGLE_BATCH; - return this; + @Override + public Text getDisplayName() { + return Text.translatable("config.flightassistant.hud.batching." + name().toLowerCase(Locale.ROOT)); + } } } diff --git a/src/main/java/ru/octol1ttle/flightassistant/config/IndicatorConfigStorage.java b/src/main/java/ru/octol1ttle/flightassistant/config/IndicatorConfigStorage.java new file mode 100644 index 00000000..22051232 --- /dev/null +++ b/src/main/java/ru/octol1ttle/flightassistant/config/IndicatorConfigStorage.java @@ -0,0 +1,126 @@ +package ru.octol1ttle.flightassistant.config; + +import dev.isxander.yacl3.config.v2.api.SerialEntry; +import java.awt.Color; + +public class IndicatorConfigStorage { + + @SerialEntry + public IndicatorConfig flying = createFull(); + @SerialEntry + public IndicatorConfig notFlyingHasElytra = createMinimal(); + @SerialEntry + public IndicatorConfig notFlyingNoElytra = createDisabled(); + + public static IndicatorConfig createFull() { + return new IndicatorConfig(); + } + + public static IndicatorConfig createMinimal() { + return new IndicatorConfig().setMinimal(); + } + + public static IndicatorConfig createDisabled() { + return new IndicatorConfig().disableAll(); + } + + public static class IndicatorConfig { + @SerialEntry + public Color frameColor = Color.GREEN; + @SerialEntry + public Color statusColor = Color.WHITE; + @SerialEntry + public Color advisoryColor = Color.CYAN; + @SerialEntry + public Color cautionColor = Color.YELLOW; + @SerialEntry + public Color warningColor = Color.RED; + + @SerialEntry + public boolean showSpeedScale = true; + @SerialEntry + public boolean showSpeedReadout = true; + @SerialEntry + public boolean showGroundSpeedReadout = true; + @SerialEntry + public boolean showVerticalSpeedReadout = true; + + @SerialEntry + public boolean showAltitudeScale = true; + @SerialEntry + public boolean showAltitudeReadout = true; + @SerialEntry + public boolean showGroundAltitude = true; + + @SerialEntry + public boolean showHeadingScale = true; + @SerialEntry + public boolean showHeadingReadout = true; + + @SerialEntry + public boolean showFireworkMode = true; + @SerialEntry + public boolean showVerticalMode = true; + @SerialEntry + public boolean showLateralMode = true; + @SerialEntry + public boolean showAutomationStatus = true; + + @SerialEntry + public boolean showAlerts = true; + @SerialEntry + public boolean showFireworkCount = true; + @SerialEntry + public boolean showDistanceToWaypoint = true; + + @SerialEntry + public boolean showPitchLadder = true; + @SerialEntry + public boolean showFlightPath = true; + @SerialEntry + public boolean showCoordinates = true; + @SerialEntry + public boolean showElytraHealth = true; + + IndicatorConfig setMinimal() { + this.showFlightPath = false; + this.showPitchLadder = false; + this.showSpeedScale = false; + this.showSpeedReadout = false; + this.showVerticalSpeedReadout = false; + this.showAltitudeScale = false; + this.showGroundAltitude = false; + this.showHeadingScale = false; + this.showFireworkMode = false; + this.showFireworkCount = false; + this.showDistanceToWaypoint = false; + + return this; + } + + IndicatorConfig disableAll() { + this.showElytraHealth = false; + this.showCoordinates = false; + this.showFlightPath = false; + this.showPitchLadder = false; + this.showSpeedScale = false; + this.showSpeedReadout = false; + this.showGroundSpeedReadout = false; + this.showVerticalSpeedReadout = false; + this.showAltitudeScale = false; + this.showAltitudeReadout = false; + this.showGroundAltitude = false; + this.showHeadingScale = false; + this.showHeadingReadout = false; + this.showAlerts = false; + this.showFireworkMode = false; + this.showVerticalMode = false; + this.showLateralMode = false; + this.showAutomationStatus = false; + this.showFireworkCount = false; + this.showDistanceToWaypoint = false; + + return this; + } + } +} diff --git a/src/main/java/ru/octol1ttle/flightassistant/indicators/AlertIndicator.java b/src/main/java/ru/octol1ttle/flightassistant/indicators/AlertIndicator.java index 2f866332..dcbea024 100644 --- a/src/main/java/ru/octol1ttle/flightassistant/indicators/AlertIndicator.java +++ b/src/main/java/ru/octol1ttle/flightassistant/indicators/AlertIndicator.java @@ -26,7 +26,7 @@ public AlertIndicator(Dimensions dim, ComputerHost host, AlertController alert, @Override public void render(DrawContext context, TextRenderer textRenderer) { - if (!FAConfig.hud().showAlerts) { + if (!FAConfig.indicator().showAlerts) { return; } if (host.faulted.contains(alert)) { @@ -56,7 +56,7 @@ public void renderFaulted(DrawContext context, TextRenderer textRenderer) { private void renderFaulted(DrawContext context, TextRenderer textRenderer, Text text) { HudComponent.drawHighlightedText(textRenderer, context, text, dim.lFrame + 5, dim.tFrame + 15, - FAConfig.hud().warningColor, time.highlight); + FAConfig.indicator().warningColor, time.highlight); } @Override diff --git a/src/main/java/ru/octol1ttle/flightassistant/indicators/AltitudeIndicator.java b/src/main/java/ru/octol1ttle/flightassistant/indicators/AltitudeIndicator.java index 5c30d3a7..7c95c5e3 100644 --- a/src/main/java/ru/octol1ttle/flightassistant/indicators/AltitudeIndicator.java +++ b/src/main/java/ru/octol1ttle/flightassistant/indicators/AltitudeIndicator.java @@ -46,20 +46,20 @@ public void render(DrawContext context, TextRenderer textRenderer) { int safeLevel = data.groundLevel == data.voidLevel ? data.voidLevel + 16 : data.groundLevel; - if (FAConfig.hud().showAltitudeReadout) { + if (FAConfig.indicator().showAltitudeReadout) { Color color = getAltitudeColor(safeLevel, data.altitude); drawText(textRenderer, context, asText("%.0f", data.altitude), xAltText, dim.yMid - 3, color); drawBorder(context, xAltText - 2, dim.yMid - 5, 28, color); } - if (FAConfig.hud().showGroundAltitude) { - Color color = data.altitude < safeLevel ? FAConfig.hud().warningColor : FAConfig.hud().frameColor; + if (FAConfig.indicator().showGroundAltitude) { + Color color = data.altitude < safeLevel ? FAConfig.indicator().warningColor : FAConfig.indicator().frameColor; drawText(textRenderer, context, Text.translatable(data.groundLevel == data.voidLevel ? "flightassistant.void_level" : "flightassistant.ground_level"), xAltText - 10, bottom, color); drawText(textRenderer, context, asText("%d", MathHelper.floor(data.heightAboveGround)), xAltText, bottom, color); drawBorder(context, xAltText - 2, bottom - 2, 28, color); } - if (FAConfig.hud().showAltitudeScale) { + if (FAConfig.indicator().showAltitudeScale) { for (int i = -130; i < 1300; i++) { int y = (dim.hScreen - i * blocksPerPixel) - yFloor; if (y > (bottom - 5) || i < data.groundLevel) { @@ -77,7 +77,7 @@ public void render(DrawContext context, TextRenderer textRenderer) { if (forceMark || i % 50 == 0 && enoughSpace) { drawHorizontalLine(context, left, right + 2, y, color); - if (!FAConfig.hud().showAltitudeReadout || y > dim.yMid + 7 || y < dim.yMid - 7) { + if (!FAConfig.indicator().showAltitudeReadout || y > dim.yMid + 7 || y < dim.yMid - 7) { drawText(textRenderer, context, asText("%d", i), xAltText, y - 3, color); } continue; @@ -92,25 +92,25 @@ public void render(DrawContext context, TextRenderer textRenderer) { private Color getAltitudeColor(int safeLevel, float altitude) { if (altitude <= safeLevel) { - return FAConfig.hud().warningColor; + return FAConfig.indicator().warningColor; } Integer minimums = plan.getMinimums(data.groundLevel); if (minimums != null && altitude <= minimums) { - return FAConfig.hud().cautionColor; + return FAConfig.indicator().cautionColor; } Integer targetAltitude = autoflight.getTargetAltitude(); if (targetAltitude != null && Math.abs(targetAltitude - altitude) <= 5.0f) { - return FAConfig.hud().advisoryColor; + return FAConfig.indicator().advisoryColor; } else { - return FAConfig.hud().frameColor; + return FAConfig.indicator().frameColor; } } @Override public void renderFaulted(DrawContext context, TextRenderer textRenderer) { - drawText(textRenderer, context, Text.translatable("flightassistant.altitude_short"), dim.rFrame + 7, dim.yMid - 3, FAConfig.hud().warningColor); + drawText(textRenderer, context, Text.translatable("flightassistant.altitude_short"), dim.rFrame + 7, dim.yMid - 3, FAConfig.indicator().warningColor); } @Override diff --git a/src/main/java/ru/octol1ttle/flightassistant/indicators/ElytraHealthIndicator.java b/src/main/java/ru/octol1ttle/flightassistant/indicators/ElytraHealthIndicator.java index 97302086..b592879c 100644 --- a/src/main/java/ru/octol1ttle/flightassistant/indicators/ElytraHealthIndicator.java +++ b/src/main/java/ru/octol1ttle/flightassistant/indicators/ElytraHealthIndicator.java @@ -25,12 +25,12 @@ public void render(DrawContext context, TextRenderer textRenderer) { int x = dim.xMid; int y = dim.bFrame; - if (FAConfig.hud().showElytraHealth && data.elytraHealth != null) { + if (FAConfig.indicator().showElytraHealth && data.elytraHealth != null) { Color color; if (data.elytraHealth <= 5.0f) { // TODO: configurable - color = FAConfig.hud().warningColor; + color = FAConfig.indicator().warningColor; } else { - color = data.elytraHealth <= 10.0f ? FAConfig.hud().cautionColor : FAConfig.hud().frameColor; + color = data.elytraHealth <= 10.0f ? FAConfig.indicator().cautionColor : FAConfig.indicator().frameColor; } drawBorder(context, x - 3, y - 2, 30, color); drawText(textRenderer, context, Text.translatable("flightassistant.elytra_short"), x - 10, y, color); @@ -43,7 +43,7 @@ public void render(DrawContext context, TextRenderer textRenderer) { public void renderFaulted(DrawContext context, TextRenderer textRenderer) { drawText(textRenderer, context, Text.translatable("flightassistant.elytra_health_short"), dim.xMid, dim.bFrame, - FAConfig.hud().warningColor); + FAConfig.indicator().warningColor); } @Override diff --git a/src/main/java/ru/octol1ttle/flightassistant/indicators/FlightDirectorsIndicator.java b/src/main/java/ru/octol1ttle/flightassistant/indicators/FlightDirectorsIndicator.java index e1503057..89b51020 100644 --- a/src/main/java/ru/octol1ttle/flightassistant/indicators/FlightDirectorsIndicator.java +++ b/src/main/java/ru/octol1ttle/flightassistant/indicators/FlightDirectorsIndicator.java @@ -30,7 +30,7 @@ public void render(DrawContext context, TextRenderer textRenderer) { if (autoflight.getTargetPitch() != null) { float deltaPitch = autoflight.getTargetPitch() - data.pitch; int fdY = MathHelper.clamp(MathHelper.floor(dim.yMid - deltaPitch * dim.degreesPerPixel), dim.tFrame - 10, dim.bFrame + 10); - drawHorizontalLine(context, dim.xMid - dim.wFrame / 10, dim.xMid + dim.wFrame / 10, fdY, FAConfig.hud().advisoryColor); + drawHorizontalLine(context, dim.xMid - dim.wFrame / 10, dim.xMid + dim.wFrame / 10, fdY, FAConfig.indicator().advisoryColor); } if (autoflight.getTargetHeading() != null) { @@ -43,13 +43,13 @@ public void render(DrawContext context, TextRenderer textRenderer) { } int fdX = MathHelper.clamp(MathHelper.floor(dim.xMid + deltaHeading * dim.degreesPerPixel), dim.lFrame + 10, dim.rFrame - 10); - drawVerticalLine(context, fdX, dim.yMid - dim.hFrame / 7, dim.yMid + dim.hFrame / 7, FAConfig.hud().advisoryColor); + drawVerticalLine(context, fdX, dim.yMid - dim.hFrame / 7, dim.yMid + dim.hFrame / 7, FAConfig.indicator().advisoryColor); } } @Override public void renderFaulted(DrawContext context, TextRenderer textRenderer) { - drawMiddleAlignedText(textRenderer, context, Text.translatable("mode.flightassistant.auto.flight_directors"), dim.xMid, dim.yMid - 20, FAConfig.hud().warningColor); + drawMiddleAlignedText(textRenderer, context, Text.translatable("mode.flightassistant.auto.flight_directors"), dim.xMid, dim.yMid - 20, FAConfig.indicator().warningColor); } @Override diff --git a/src/main/java/ru/octol1ttle/flightassistant/indicators/FlightMode.java b/src/main/java/ru/octol1ttle/flightassistant/indicators/FlightMode.java index 39b8e72b..1faae43e 100644 --- a/src/main/java/ru/octol1ttle/flightassistant/indicators/FlightMode.java +++ b/src/main/java/ru/octol1ttle/flightassistant/indicators/FlightMode.java @@ -40,10 +40,10 @@ public void render(DrawContext context, TextRenderer textRenderer, int x, int y) throw new IllegalStateException("Called render before updating"); } if (time.prevMillis != null && time.prevMillis - lastUpdateTime <= UPDATE_FLASH_TIME) { - HudComponent.drawHighlightedMiddleAlignedText(textRenderer, context, lastText, x, y, FAConfig.hud().cautionColor, time.highlight); + HudComponent.drawHighlightedMiddleAlignedText(textRenderer, context, lastText, x, y, FAConfig.indicator().cautionColor, time.highlight); return; } - HudComponent.drawMiddleAlignedText(textRenderer, context, lastText, x, y, FAConfig.hud().statusColor); + HudComponent.drawMiddleAlignedText(textRenderer, context, lastText, x, y, FAConfig.indicator().statusColor); } } diff --git a/src/main/java/ru/octol1ttle/flightassistant/indicators/FlightModeIndicator.java b/src/main/java/ru/octol1ttle/flightassistant/indicators/FlightModeIndicator.java index 0cb9588a..5aae4d2f 100644 --- a/src/main/java/ru/octol1ttle/flightassistant/indicators/FlightModeIndicator.java +++ b/src/main/java/ru/octol1ttle/flightassistant/indicators/FlightModeIndicator.java @@ -50,16 +50,16 @@ public void render(DrawContext context, TextRenderer textRenderer) { return; } - if (FAConfig.hud().showFireworkMode) { + if (FAConfig.indicator().showFireworkMode) { renderFireworkMode(context, textRenderer); } - if (FAConfig.hud().showVerticalMode) { + if (FAConfig.indicator().showVerticalMode) { renderVerticalMode(context, textRenderer); } - if (FAConfig.hud().showLateralMode) { + if (FAConfig.indicator().showLateralMode) { renderLateralMode(context, textRenderer); } - if (FAConfig.hud().showAutomationStatus) { + if (FAConfig.indicator().showAutomationStatus) { renderAutomationStatus(context, textRenderer); } } @@ -180,7 +180,7 @@ private void appendWithSeparation(MutableText text, Text append) { @Override public void renderFaulted(DrawContext context, TextRenderer textRenderer) { - drawText(textRenderer, context, Text.translatable("flightassistant.flight_mode_short"), dim.lFrame + dim.wFrame / 5, dim.bFrame - 10, FAConfig.hud().warningColor); + drawText(textRenderer, context, Text.translatable("flightassistant.flight_mode_short"), dim.lFrame + dim.wFrame / 5, dim.bFrame - 10, FAConfig.indicator().warningColor); } @Override diff --git a/src/main/java/ru/octol1ttle/flightassistant/indicators/FlightPathIndicator.java b/src/main/java/ru/octol1ttle/flightassistant/indicators/FlightPathIndicator.java index 0f0558e5..812d7a1f 100644 --- a/src/main/java/ru/octol1ttle/flightassistant/indicators/FlightPathIndicator.java +++ b/src/main/java/ru/octol1ttle/flightassistant/indicators/FlightPathIndicator.java @@ -24,7 +24,7 @@ public FlightPathIndicator(Dimensions dim, AirDataComputer data, GPWSComputer gp @Override public void render(DrawContext context, TextRenderer textRenderer) { - if (!FAConfig.hud().showFlightPath) { + if (!FAConfig.indicator().showFlightPath) { return; } @@ -64,7 +64,7 @@ public void render(DrawContext context, TextRenderer textRenderer) { @Override public void renderFaulted(DrawContext context, TextRenderer textRenderer) { - drawMiddleAlignedText(textRenderer, context, Text.translatable("flightassistant.flight_path_short"), dim.xMid, dim.yMid + 10, FAConfig.hud().warningColor); + drawMiddleAlignedText(textRenderer, context, Text.translatable("flightassistant.flight_path_short"), dim.xMid, dim.yMid + 10, FAConfig.indicator().warningColor); } @Override diff --git a/src/main/java/ru/octol1ttle/flightassistant/indicators/HeadingIndicator.java b/src/main/java/ru/octol1ttle/flightassistant/indicators/HeadingIndicator.java index 8b31c4b5..757a720a 100644 --- a/src/main/java/ru/octol1ttle/flightassistant/indicators/HeadingIndicator.java +++ b/src/main/java/ru/octol1ttle/flightassistant/indicators/HeadingIndicator.java @@ -33,14 +33,14 @@ public void render(DrawContext context, TextRenderer textRenderer) { int northOffset = MathHelper.floor(data.heading * dim.degreesPerPixel); int xNorth = dim.xMid - northOffset; - if (FAConfig.hud().showHeadingReadout) { + if (FAConfig.indicator().showHeadingReadout) { Color color = getHeadingColor(data.heading); drawText(textRenderer, context, asText("%03d", Math.round(data.heading)), dim.xMid - 8, yText, color); drawBorder(context, dim.xMid - 15, yText - 2, 30, color); } - if (FAConfig.hud().showHeadingScale) { - drawMiddleAlignedText(textRenderer, context, asText("^"), dim.xMid, top + 10, FAConfig.hud().frameColor); + if (FAConfig.indicator().showHeadingScale) { + drawMiddleAlignedText(textRenderer, context, asText("^"), dim.xMid, top + 10, FAConfig.indicator().frameColor); for (int i = -540; i < 540; i++) { int x = (i * dim.degreesPerPixel) + xNorth; @@ -66,7 +66,7 @@ public void render(DrawContext context, TextRenderer textRenderer) { drawVerticalLine(context, x, top + 3, top + 10, color); } - if (!FAConfig.hud().showHeadingReadout || x <= dim.xMid - 26 || x >= dim.xMid + 26) { + if (!FAConfig.indicator().showHeadingReadout || x <= dim.xMid - 26 || x >= dim.xMid + 26) { drawText(textRenderer, context, asText("%03d", degrees), x - 8, yText, color); } continue; @@ -82,15 +82,15 @@ public void render(DrawContext context, TextRenderer textRenderer) { private Color getHeadingColor(float heading) { Float targetHeading = autoflight.getTargetHeading(); if (targetHeading != null && Math.abs(targetHeading - heading) <= 5.0f) { - return FAConfig.hud().advisoryColor; + return FAConfig.indicator().advisoryColor; } else { - return FAConfig.hud().frameColor; + return FAConfig.indicator().frameColor; } } @Override public void renderFaulted(DrawContext context, TextRenderer textRenderer) { - drawText(textRenderer, context, Text.translatable("flightassistant.heading_short"), dim.xMid - 8, dim.tFrame - 17, FAConfig.hud().warningColor); + drawText(textRenderer, context, Text.translatable("flightassistant.heading_short"), dim.xMid - 8, dim.tFrame - 17, FAConfig.indicator().warningColor); } @Override diff --git a/src/main/java/ru/octol1ttle/flightassistant/indicators/LocationIndicator.java b/src/main/java/ru/octol1ttle/flightassistant/indicators/LocationIndicator.java index 1546bfa5..0b7665f3 100644 --- a/src/main/java/ru/octol1ttle/flightassistant/indicators/LocationIndicator.java +++ b/src/main/java/ru/octol1ttle/flightassistant/indicators/LocationIndicator.java @@ -21,7 +21,7 @@ public LocationIndicator(Dimensions dim, AirDataComputer data) { @Override public void render(DrawContext context, TextRenderer textRenderer) { - if (!FAConfig.hud().showCoordinates) { + if (!FAConfig.indicator().showCoordinates) { return; } @@ -31,13 +31,13 @@ public void render(DrawContext context, TextRenderer textRenderer) { int xLoc = MathHelper.floor(data.position.x); int zLoc = MathHelper.floor(data.position.z); - drawText(textRenderer, context, asText("%d / %d", xLoc, zLoc), x, y, FAConfig.hud().frameColor); + drawText(textRenderer, context, asText("%d / %d", xLoc, zLoc), x, y, FAConfig.indicator().frameColor); } @Override public void renderFaulted(DrawContext context, TextRenderer textRenderer) { drawText(textRenderer, context, Text.translatable("flightassistant.location_short"), - dim.lFrame + 15, dim.bFrame, FAConfig.hud().warningColor); + dim.lFrame + 15, dim.bFrame, FAConfig.indicator().warningColor); } @Override diff --git a/src/main/java/ru/octol1ttle/flightassistant/indicators/PitchIndicator.java b/src/main/java/ru/octol1ttle/flightassistant/indicators/PitchIndicator.java index 3fcae842..eacdfcb9 100644 --- a/src/main/java/ru/octol1ttle/flightassistant/indicators/PitchIndicator.java +++ b/src/main/java/ru/octol1ttle/flightassistant/indicators/PitchIndicator.java @@ -31,7 +31,7 @@ public PitchIndicator(Dimensions dim, AirDataComputer data, StallComputer stall, @Override public void render(DrawContext context, TextRenderer textRenderer) { - if (!FAConfig.hud().showPitchLadder) { + if (!FAConfig.indicator().showPitchLadder) { return; } @@ -49,10 +49,10 @@ public void render(DrawContext context, TextRenderer textRenderer) { drawLadder(textRenderer, context, yHorizon); - drawPushArrows(textRenderer, context, stall.maximumSafePitch, yHorizon, FAConfig.hud().warningColor); + drawPushArrows(textRenderer, context, stall.maximumSafePitch, yHorizon, FAConfig.indicator().warningColor); drawReferenceMark(context, PitchController.CLIMB_PITCH, yHorizon, getPitchColor(PitchController.CLIMB_PITCH)); drawReferenceMark(context, PitchController.GLIDE_PITCH, yHorizon, getPitchColor(PitchController.GLIDE_PITCH)); - drawPullArrows(textRenderer, context, Math.max(PitchController.DESCEND_PITCH, voidLevel.minimumSafePitch), yHorizon, FAConfig.hud().warningColor); + drawPullArrows(textRenderer, context, Math.max(PitchController.DESCEND_PITCH, voidLevel.minimumSafePitch), yHorizon, FAConfig.indicator().warningColor); pitchData.l1 -= pitchData.margin; pitchData.r2 += pitchData.margin; @@ -63,7 +63,7 @@ public void render(DrawContext context, TextRenderer textRenderer) { private Color getPitchColor(float degree) { return degree < Math.max(PitchController.DESCEND_PITCH, voidLevel.minimumSafePitch) || degree > stall.maximumSafePitch - ? FAConfig.hud().warningColor : FAConfig.hud().frameColor; + ? FAConfig.indicator().warningColor : FAConfig.indicator().frameColor; } private void drawLadder(TextRenderer textRenderer, DrawContext context, int yHorizon) { @@ -150,7 +150,7 @@ private void drawPullArrows(TextRenderer textRenderer, DrawContext context, floa @Override public void renderFaulted(DrawContext context, TextRenderer textRenderer) { - drawMiddleAlignedText(textRenderer, context, Text.translatable("flightassistant.pitch_short"), dim.xMid, dim.yMid - 10, FAConfig.hud().warningColor); + drawMiddleAlignedText(textRenderer, context, Text.translatable("flightassistant.pitch_short"), dim.xMid, dim.yMid - 10, FAConfig.indicator().warningColor); } @Override diff --git a/src/main/java/ru/octol1ttle/flightassistant/indicators/SpeedIndicator.java b/src/main/java/ru/octol1ttle/flightassistant/indicators/SpeedIndicator.java index bcea6a2e..9e76dd11 100644 --- a/src/main/java/ru/octol1ttle/flightassistant/indicators/SpeedIndicator.java +++ b/src/main/java/ru/octol1ttle/flightassistant/indicators/SpeedIndicator.java @@ -32,41 +32,41 @@ public void render(DrawContext context, TextRenderer textRenderer) { int xSpeedText = left - 5; - if (FAConfig.hud().showSpeedReadout) { - drawRightAlignedText(textRenderer, context, asText("%.2f", data.speed), xSpeedText, dim.yMid - 3, FAConfig.hud().frameColor); - drawBorder(context, xSpeedText - 28, dim.yMid - 5, 30, FAConfig.hud().frameColor); + if (FAConfig.indicator().showSpeedReadout) { + drawRightAlignedText(textRenderer, context, asText("%.2f", data.speed), xSpeedText, dim.yMid - 3, FAConfig.indicator().frameColor); + drawBorder(context, xSpeedText - 28, dim.yMid - 5, 30, FAConfig.indicator().frameColor); int frameWidth = dim.rFrame - dim.lFrame; - if (FAConfig.hud().showGroundSpeedReadout) { + if (FAConfig.indicator().showGroundSpeedReadout) { int x = MathHelper.floor(dim.lFrame + frameWidth * 0.25f); - drawText(textRenderer, context, Text.translatable("flightassistant.ground_speed_short", String.format("%.2f", data.velocityPerSecond.horizontalLength())), x, dim.bFrame, FAConfig.hud().frameColor); + drawText(textRenderer, context, Text.translatable("flightassistant.ground_speed_short", String.format("%.2f", data.velocityPerSecond.horizontalLength())), x, dim.bFrame, FAConfig.indicator().frameColor); } - if (FAConfig.hud().showVerticalSpeedReadout) { + if (FAConfig.indicator().showVerticalSpeedReadout) { int x = MathHelper.floor(dim.lFrame + frameWidth * 0.75f - 7); - drawText(textRenderer, context, Text.translatable("flightassistant.vertical_speed_short", String.format("%.2f", data.velocityPerSecond.y)), x, dim.bFrame, data.velocityPerSecond.y <= -10.0f ? FAConfig.hud().warningColor : FAConfig.hud().frameColor); + drawText(textRenderer, context, Text.translatable("flightassistant.vertical_speed_short", String.format("%.2f", data.velocityPerSecond.y)), x, dim.bFrame, data.velocityPerSecond.y <= -10.0f ? FAConfig.indicator().warningColor : FAConfig.indicator().frameColor); } } - if (FAConfig.hud().showSpeedScale) { + if (FAConfig.indicator().showSpeedScale) { for (float i = 0; i <= 100; i += 0.25f) { int y = MathHelper.floor(dim.hScreen - i * unitPerPixel - yFloor); if (y < top || y > (bottom - 5)) continue; if (i % 1 == 0) { - drawHorizontalLine(context, left - 2, right, y, FAConfig.hud().frameColor); - if (!FAConfig.hud().showSpeedReadout || y > dim.yMid + 7 || y < dim.yMid - 7) { - drawRightAlignedText(textRenderer, context, asText("%.0f", i), xSpeedText, y - 3, FAConfig.hud().frameColor); + drawHorizontalLine(context, left - 2, right, y, FAConfig.indicator().frameColor); + if (!FAConfig.indicator().showSpeedReadout || y > dim.yMid + 7 || y < dim.yMid - 7) { + drawRightAlignedText(textRenderer, context, asText("%.0f", i), xSpeedText, y - 3, FAConfig.indicator().frameColor); } } - drawHorizontalLine(context, left, right, y, FAConfig.hud().frameColor); + drawHorizontalLine(context, left, right, y, FAConfig.indicator().frameColor); } } } @Override public void renderFaulted(DrawContext context, TextRenderer textRenderer) { - drawRightAlignedText(textRenderer, context, Text.translatable("flightassistant.speed_short"), dim.lFrame - 7, dim.yMid - 3, FAConfig.hud().warningColor); + drawRightAlignedText(textRenderer, context, Text.translatable("flightassistant.speed_short"), dim.lFrame - 7, dim.yMid - 3, FAConfig.indicator().warningColor); } @Override diff --git a/src/main/java/ru/octol1ttle/flightassistant/indicators/StatusIndicator.java b/src/main/java/ru/octol1ttle/flightassistant/indicators/StatusIndicator.java index 09950e35..78de4bf9 100644 --- a/src/main/java/ru/octol1ttle/flightassistant/indicators/StatusIndicator.java +++ b/src/main/java/ru/octol1ttle/flightassistant/indicators/StatusIndicator.java @@ -26,26 +26,26 @@ public void render(DrawContext context, TextRenderer textRenderer) { int x = dim.rFrame - 5; int y = dim.tFrame + 5; - if (FAConfig.hud().showFireworkCount) { - Color fireworkColor = FAConfig.hud().statusColor; + if (FAConfig.indicator().showFireworkCount) { + Color fireworkColor = FAConfig.indicator().statusColor; if (firework.safeFireworkCount > 0) { if (firework.safeFireworkCount <= 24) { - fireworkColor = FAConfig.hud().cautionColor; + fireworkColor = FAConfig.indicator().cautionColor; } } else { - fireworkColor = FAConfig.hud().warningColor; + fireworkColor = FAConfig.indicator().warningColor; } drawRightAlignedText(textRenderer, context, Text.translatable("status.flightassistant.firework_count", firework.safeFireworkCount), x, y += 10, fireworkColor); } - if (FAConfig.hud().showDistanceToWaypoint) { + if (FAConfig.indicator().showDistanceToWaypoint) { Double distance = plan.getDistanceToNextWaypoint(); if (distance != null) { drawRightAlignedText(textRenderer, context, Text.translatable("status.flightassistant.waypoint_distance", distance.intValue()), - x, y + 10, FAConfig.hud().statusColor); + x, y + 10, FAConfig.indicator().statusColor); } } } @@ -54,7 +54,7 @@ public void render(DrawContext context, TextRenderer textRenderer) { public void renderFaulted(DrawContext context, TextRenderer textRenderer) { drawRightAlignedText(textRenderer, context, Text.translatable("flightassistant.status_short"), - dim.rFrame - 5, dim.tFrame + 15, FAConfig.hud().warningColor); + dim.rFrame - 5, dim.tFrame + 15, FAConfig.indicator().warningColor); } @Override diff --git a/src/main/resources/assets/flightassistant/lang/en_us.json b/src/main/resources/assets/flightassistant/lang/en_us.json index da000d97..1d083da6 100644 --- a/src/main/resources/assets/flightassistant/lang/en_us.json +++ b/src/main/resources/assets/flightassistant/lang/en_us.json @@ -13,45 +13,50 @@ "config.flightassistant.category.not_flying_no_elytra": "Not Flying (No Elytra)", "config.flightassistant.category.not_flying_has_elytra": "Not Flying (With Elytra)", "config.flightassistant.category.flying": "Flying", - "config.flightassistant.settings.batching": "Batched HUD Rendering", - "config.flightassistant.options.batching.no_batching": "No Batching", - "config.flightassistant.options.batching.batch_per_component": "Batch Per Component", - "config.flightassistant.options.batching.single_batch": "Single Batch", - "config.flightassistant.settings.hud_scale": "HUD Scale", - "config.flightassistant.settings.frame_width": "HUD Frame Width", - "config.flightassistant.settings.frame_height": "HUD Frame Height", - "config.flightassistant.hud.color": "Colors", - "config.flightassistant.hud.color.frame": "HUD Frame Color", - "config.flightassistant.hud.color.status": "Status Color", - "config.flightassistant.hud.color.advisory": "Advisory Color", - "config.flightassistant.hud.color.caution": "Caution Color", - "config.flightassistant.hud.color.warning": "Warning Color", - "config.flightassistant.hud.speed": "Speed", - "config.flightassistant.hud.speed.scale": "Show Speed Scale", - "config.flightassistant.hud.speed.readout": "Show Speed Readout", - "config.flightassistant.hud.speed.ground_readout": "Show Ground Speed Readout", - "config.flightassistant.hud.speed.vertical_readout": "Show Vertical Speed Readout", - "config.flightassistant.hud.altitude": "Altitude", - "config.flightassistant.hud.altitude.scale": "Show Altitude Scale", - "config.flightassistant.hud.altitude.readout": "Show Altitude Readout", - "config.flightassistant.hud.altitude.ground": "Show Height Above Ground", - "config.flightassistant.hud.heading": "Heading", - "config.flightassistant.hud.heading.scale": "Show Heading Scale", - "config.flightassistant.hud.heading.readout": "Show Heading Readout", - "config.flightassistant.hud.automation": "Automation", - "config.flightassistant.hud.automation.firework": "Show Firework Mode", - "config.flightassistant.hud.automation.vertical": "Show Vertical Mode", - "config.flightassistant.hud.automation.lateral": "Show Lateral Mode", - "config.flightassistant.hud.automation.status": "Show Automation Status", - "config.flightassistant.hud.info": "Information", - "config.flightassistant.hud.info.alerts": "Show Alerts", - "config.flightassistant.hud.info.firework_count": "Show Firework Count", - "config.flightassistant.hud.info.waypoint_distance": "Show Distance To Waypoint", - "config.flightassistant.hud.misc": "Miscellaneous", - "config.flightassistant.hud.misc.pitch_ladder": "Show Pitch Ladder", - "config.flightassistant.hud.misc.flight_path": "Show Flight Path Vector Icon", - "config.flightassistant.hud.misc.coordinates": "Show Coordinates", - "config.flightassistant.hud.misc.elytra_health": "Show Elytra Health", + "config.flightassistant.category.computer_settings": "Flight Protections", + "config.flightassistant.hud.batching": "Batched HUD Rendering", + "config.flightassistant.hud.batching.no_batching": "No Batching", + "config.flightassistant.hud.batching.per_component": "Batch Per Component", + "config.flightassistant.hud.batching.single_batch": "Single Batch", + "config.flightassistant.hud.scale": "HUD Scale", + "config.flightassistant.hud.frame_width": "HUD Frame Width", + "config.flightassistant.hud.frame_height": "HUD Frame Height", + "config.flightassistant.indicators.color": "Colors", + "config.flightassistant.indicators.color.frame": "HUD Frame Color", + "config.flightassistant.indicators.color.status": "Status Color", + "config.flightassistant.indicators.color.advisory": "Advisory Color", + "config.flightassistant.indicators.color.caution": "Caution Color", + "config.flightassistant.indicators.color.warning": "Warning Color", + "config.flightassistant.indicators.speed": "Speed", + "config.flightassistant.indicators.speed.scale": "Show Speed Scale", + "config.flightassistant.indicators.speed.readout": "Show Speed Readout", + "config.flightassistant.indicators.speed.ground_readout": "Show Ground Speed Readout", + "config.flightassistant.indicators.speed.vertical_readout": "Show Vertical Speed Readout", + "config.flightassistant.indicators.altitude": "Altitude", + "config.flightassistant.indicators.altitude.scale": "Show Altitude Scale", + "config.flightassistant.indicators.altitude.readout": "Show Altitude Readout", + "config.flightassistant.indicators.altitude.ground": "Show Height Above Ground", + "config.flightassistant.indicators.heading": "Heading", + "config.flightassistant.indicators.heading.scale": "Show Heading Scale", + "config.flightassistant.indicators.heading.readout": "Show Heading Readout", + "config.flightassistant.indicators.automation": "Automation", + "config.flightassistant.indicators.automation.firework": "Show Firework Mode", + "config.flightassistant.indicators.automation.vertical": "Show Vertical Mode", + "config.flightassistant.indicators.automation.lateral": "Show Lateral Mode", + "config.flightassistant.indicators.automation.status": "Show Automation Status", + "config.flightassistant.indicators.info": "Information", + "config.flightassistant.indicators.info.alerts": "Show Alerts", + "config.flightassistant.indicators.info.firework_count": "Show Firework Count", + "config.flightassistant.indicators.info.waypoint_distance": "Show Distance To Waypoint", + "config.flightassistant.indicators.misc": "Miscellaneous", + "config.flightassistant.indicators.misc.pitch_ladder": "Show Pitch Ladder", + "config.flightassistant.indicators.misc.flight_path": "Show Flight Path Vector Icon", + "config.flightassistant.indicators.misc.coordinates": "Show Coordinates", + "config.flightassistant.indicators.misc.elytra_health": "Show Elytra Health", + "config.flightassistant.computers.protections": "Flight Protections Mode", + "config.flightassistant.computers.protections.full": "Always enabled (BANNABLE ON SERVERS)", + "config.flightassistant.computers.protections.no_overlays": "Only when no screen overlays", + "config.flightassistant.computers.protections.disabled": "Disabled", "commands.flightassistant.no_such_waypoint": "There is no waypoint at that index", "commands.flightassistant.nothing_to_clear": "There are no waypoints to clear", diff --git a/src/main/resources/assets/flightassistant/lang/ru_ru.json b/src/main/resources/assets/flightassistant/lang/ru_ru.json index 270d5541..86e2469d 100644 --- a/src/main/resources/assets/flightassistant/lang/ru_ru.json +++ b/src/main/resources/assets/flightassistant/lang/ru_ru.json @@ -13,45 +13,50 @@ "config.flightassistant.category.not_flying_no_elytra": "На земле (без элитр)", "config.flightassistant.category.not_flying_has_elytra": "На земле (с элитрами)", "config.flightassistant.category.flying": "В полёте", - "config.flightassistant.settings.batching": "Группированная отрисовка HUD", - "config.flightassistant.options.batching.no_batching": "Не группировать", - "config.flightassistant.options.batching.batch_per_component": "Группировать по компонентам", - "config.flightassistant.options.batching.single_batch": "Группировать всё целиком", - "config.flightassistant.settings.hud_scale": "Масштаб HUD", - "config.flightassistant.settings.frame_width": "Ширина рамки HUD", - "config.flightassistant.settings.frame_height": "Высота рамки HUD", - "config.flightassistant.hud.color": "Цвета", - "config.flightassistant.hud.color.frame": "Цвет рамки HUD", - "config.flightassistant.hud.color.status": "Цвет информирующих элементов", - "config.flightassistant.hud.color.advisory": "Цвет указывающих элементов", - "config.flightassistant.hud.color.caution": "Цвет предупреждений", - "config.flightassistant.hud.color.warning": "Цвет опасности", - "config.flightassistant.hud.speed": "Скорость", - "config.flightassistant.hud.speed.scale": "Показывать шкалу скорости", - "config.flightassistant.hud.speed.readout": "Показывать значение скорости", - "config.flightassistant.hud.speed.ground_readout": "Показывать значение горизонтальной скорости", - "config.flightassistant.hud.speed.vertical_readout": "Показывать значение вертикальной скорости", - "config.flightassistant.hud.altitude": "Высота", - "config.flightassistant.hud.altitude.scale": "Показывать шкалу высоты", - "config.flightassistant.hud.altitude.readout": "Показывать значение высоты", - "config.flightassistant.hud.altitude.ground": "Показывать высоту над землёй", - "config.flightassistant.hud.heading": "Курс", - "config.flightassistant.hud.heading.scale": "Показывать шкалу курса", - "config.flightassistant.hud.heading.readout": "Показывать значение курса", - "config.flightassistant.hud.automation": "Автоматизация", - "config.flightassistant.hud.automation.firework": "Показывать режим фейерверков", - "config.flightassistant.hud.automation.vertical": "Показывать вертикальный режим", - "config.flightassistant.hud.automation.lateral": "Показывать горизонтальный режим", - "config.flightassistant.hud.automation.status": "Показывать статус автоматизации", - "config.flightassistant.hud.info": "Информация", - "config.flightassistant.hud.info.alerts": "Показывать предупреждения", - "config.flightassistant.hud.info.firework_count": "Показывать счётчик фейерверков", - "config.flightassistant.hud.info.waypoint_distance": "Показывать расстояние до точки назначения", - "config.flightassistant.hud.misc": "Прочее", - "config.flightassistant.hud.misc.pitch_ladder": "Показывать индикатор тангажа", - "config.flightassistant.hud.misc.flight_path": "Показывать иконку пути полёта", - "config.flightassistant.hud.misc.coordinates": "Показывать координаты", - "config.flightassistant.hud.misc.elytra_health": "Показывать здоровье элитр", + "config.flightassistant.category.computer_settings": "Защиты полёта", + "config.flightassistant.hud.batching": "Группированная отрисовка HUD", + "config.flightassistant.hud.batching.no_batching": "Не группировать", + "config.flightassistant.hud.batching.per_component": "Группировать по компонентам", + "config.flightassistant.hud.batching.single_batch": "Группировать всё целиком", + "config.flightassistant.hud.scale": "Масштаб HUD", + "config.flightassistant.hud.frame_width": "Ширина рамки HUD", + "config.flightassistant.hud.frame_height": "Высота рамки HUD", + "config.flightassistant.indicators.color": "Цвета", + "config.flightassistant.indicators.color.frame": "Цвет рамки HUD", + "config.flightassistant.indicators.color.status": "Цвет информирующих элементов", + "config.flightassistant.indicators.color.advisory": "Цвет указывающих элементов", + "config.flightassistant.indicators.color.caution": "Цвет предупреждений", + "config.flightassistant.indicators.color.warning": "Цвет опасности", + "config.flightassistant.indicators.speed": "Скорость", + "config.flightassistant.indicators.speed.scale": "Показывать шкалу скорости", + "config.flightassistant.indicators.speed.readout": "Показывать значение скорости", + "config.flightassistant.indicators.speed.ground_readout": "Показывать значение горизонтальной скорости", + "config.flightassistant.indicators.speed.vertical_readout": "Показывать значение вертикальной скорости", + "config.flightassistant.indicators.altitude": "Высота", + "config.flightassistant.indicators.altitude.scale": "Показывать шкалу высоты", + "config.flightassistant.indicators.altitude.readout": "Показывать значение высоты", + "config.flightassistant.indicators.altitude.ground": "Показывать высоту над землёй", + "config.flightassistant.indicators.heading": "Курс", + "config.flightassistant.indicators.heading.scale": "Показывать шкалу курса", + "config.flightassistant.indicators.heading.readout": "Показывать значение курса", + "config.flightassistant.indicators.automation": "Автоматизация", + "config.flightassistant.indicators.automation.firework": "Показывать режим фейерверков", + "config.flightassistant.indicators.automation.vertical": "Показывать вертикальный режим", + "config.flightassistant.indicators.automation.lateral": "Показывать горизонтальный режим", + "config.flightassistant.indicators.automation.status": "Показывать статус автоматизации", + "config.flightassistant.indicators.info": "Информация", + "config.flightassistant.indicators.info.alerts": "Показывать предупреждения", + "config.flightassistant.indicators.info.firework_count": "Показывать счётчик фейерверков", + "config.flightassistant.indicators.info.waypoint_distance": "Показывать расстояние до точки назначения", + "config.flightassistant.indicators.misc": "Прочее", + "config.flightassistant.indicators.misc.pitch_ladder": "Показывать индикатор тангажа", + "config.flightassistant.indicators.misc.flight_path": "Показывать иконку пути полёта", + "config.flightassistant.indicators.misc.coordinates": "Показывать координаты", + "config.flightassistant.indicators.misc.elytra_health": "Показывать здоровье элитр", + "config.flightassistant.computers.protections": "Режим защит полёта", + "config.flightassistant.computers.protections.full": "Всегда включены (МОЖЕТ БЫТЬ ЗАПРЕЩЕНО НА СЕРВЕРАХ)", + "config.flightassistant.computers.protections.no_overlays": "Только при отсутствии оверлеев", + "config.flightassistant.computers.protections.disabled": "Выключены", "commands.flightassistant.no_such_waypoint": "На указанной позиции нет точки назначения", "commands.flightassistant.nothing_to_clear": "Нет точек назначения для очищения", @@ -75,6 +80,7 @@ "alerts.flightassistant.approaching_void_damage_level": "ПРИБЛИЖЕНИЕ К ВЫСОТЕ УРОНА ПУСТОТЫ", "alerts.flightassistant.reached_void_damage_level": "ДОСТИГНУТА ВЫСОТА УРОНА ПУСТОТЫ", + "alerts.flightassistant.reached_minimums": "ДОСТИГН. МИНИМ. ВЫС. СНИЖ.", "alerts.flightassistant.autoflight.autopilot_off": "АВТОПИЛОТ ВЫКЛЮЧЕН", "alerts.flightassistant.autoflight.auto_firework_off": "АВТО-ФЕЙЕРВЕРК ВЫКЛЮЧЕН", "alerts.flightassistant.firework.no_response": "ФРВК ОТКАЗ",