From 5ccbff594fbcb8b5f7e51d47bdf0d1ce73c69e10 Mon Sep 17 00:00:00 2001 From: ShirosakiMio <852468399@qq.com> Date: Fri, 22 Mar 2024 13:33:46 +0800 Subject: [PATCH] fix & add item bar scale --- .../com/tungsten/fcl/control/GameMenu.java | 14 +++++++ .../fcl/control/view/GameItemBar.java | 8 +++- .../com/tungsten/fcl/setting/GameOption.java | 31 ++++++++-------- .../com/tungsten/fcl/setting/MenuSetting.java | 17 +++++++++ FCL/src/main/res/layout/menu_right.xml | 37 +++++++++++++++++++ FCL/src/main/res/values-zh/strings.xml | 1 + FCL/src/main/res/values/strings.xml | 1 + 7 files changed, 92 insertions(+), 17 deletions(-) diff --git a/FCL/src/main/java/com/tungsten/fcl/control/GameMenu.java b/FCL/src/main/java/com/tungsten/fcl/control/GameMenu.java index 1ddd0c6c..aab399f2 100644 --- a/FCL/src/main/java/com/tungsten/fcl/control/GameMenu.java +++ b/FCL/src/main/java/com/tungsten/fcl/control/GameMenu.java @@ -325,12 +325,14 @@ public class GameMenu implements MenuCallback, View.OnClickListener { FCLSpinner gestureModeSpinner = findViewById(R.id.gesture_mode_spinner); FCLSpinner mouseMoveModeSpinner = findViewById(R.id.mouse_mode_spinner); + FCLSeekBar itemBarScaleSeekbar = findViewById(R.id.item_bar_scale); FCLSeekBar mouseSensitivitySeekbar = findViewById(R.id.mouse_sensitivity); FCLSeekBar mouseSizeSeekbar = findViewById(R.id.mouse_size); FCLSeekBar gamepadDeadzoneSeekbar = findViewById(R.id.gamepad_deadzone_size); FCLSeekBar gamepadAimZoneSeekbar = findViewById(R.id.gamepad_aimzone_size); FCLSeekBar gyroSensitivitySeekbar = findViewById(R.id.gyro_sensitivity); + FCLTextView itemBarScaleText = findViewById(R.id.item_bar_scale_text); FCLTextView mouseSensitivityText = findViewById(R.id.mouse_sensitivity_text); FCLTextView mouseSizeText = findViewById(R.id.mouse_size_text); FCLTextView gamepadDeadzoneText = findViewById(R.id.gamepad_deadzone_text); @@ -377,6 +379,17 @@ public class GameMenu implements MenuCallback, View.OnClickListener { FXUtils.bindSelection(gestureModeSpinner, menuSetting.gestureModeProperty()); FXUtils.bindSelection(mouseMoveModeSpinner, menuSetting.mouseMoveModeProperty()); + itemBarScaleSeekbar.addProgressListener(); + IntegerProperty itemBarScaleProperty = new SimpleIntegerProperty(menuSetting.getItemBarScale()) { + @Override + protected void invalidated() { + super.invalidated(); + menuSetting.setItemBarScale(get()); + gameItemBar.getOptionListener().onOptionChanged(); + } + }; + itemBarScaleSeekbar.progressProperty().bindBidirectional(itemBarScaleProperty); + mouseSensitivitySeekbar.addProgressListener(); IntegerProperty mouseSensitivityProperty = new SimpleIntegerProperty((int) (menuSetting.getMouseSensitivity() * 100)) { @Override @@ -415,6 +428,7 @@ public class GameMenu implements MenuCallback, View.OnClickListener { gyroSensitivitySeekbar.addProgressListener(); gyroSensitivitySeekbar.progressProperty().bindBidirectional(menuSetting.gyroscopeSensitivityProperty()); + itemBarScaleText.stringProperty().bind(Bindings.createStringBinding(() -> String.valueOf(itemBarScaleProperty.get()), itemBarScaleProperty)); mouseSensitivityText.stringProperty().bind(Bindings.createStringBinding(() -> mouseSensitivityProperty.get() + " %", mouseSensitivityProperty)); mouseSizeText.stringProperty().bind(Bindings.createStringBinding(() -> menuSetting.mouseSizeProperty().get() + " dp", menuSetting.mouseSizeProperty())); gamepadDeadzoneText.stringProperty().bind(Bindings.createStringBinding(() -> gamepadDeadzoneProperty.get() + " %", gamepadDeadzoneProperty)); diff --git a/FCL/src/main/java/com/tungsten/fcl/control/view/GameItemBar.java b/FCL/src/main/java/com/tungsten/fcl/control/view/GameItemBar.java index 86213547..0ceea48c 100644 --- a/FCL/src/main/java/com/tungsten/fcl/control/view/GameItemBar.java +++ b/FCL/src/main/java/com/tungsten/fcl/control/view/GameItemBar.java @@ -55,8 +55,8 @@ public class GameItemBar extends RelativeLayout { gameOption = new GameOption(gameMenu.getBridge().getGameDir()); int width = (int) (gameMenu.getTouchPad().getWidth() * gameMenu.getBridge().getScaleFactor()); int height = (int) (gameMenu.getTouchPad().getHeight() * gameMenu.getBridge().getScaleFactor()); - notifySize(gameOption.getGuiScale(width, height) * 20); - optionListener = () -> notifySize(gameOption.getGuiScale(width, height) * 20); + notifySize(gameOption.getGuiScale(width, height, gameMenu.getMenuSetting().getItemBarScale()) * 20); + optionListener = () -> notifySize(gameOption.getGuiScale(width, height, gameMenu.getMenuSetting().getItemBarScale()) * 20); gameOption.addGameOptionListener(optionListener); } @@ -136,4 +136,8 @@ public class GameItemBar extends RelativeLayout { } return true; } + + public GameOption.GameOptionListener getOptionListener() { + return optionListener; + } } diff --git a/FCL/src/main/java/com/tungsten/fcl/setting/GameOption.java b/FCL/src/main/java/com/tungsten/fcl/setting/GameOption.java index d52c2a5e..1627591f 100644 --- a/FCL/src/main/java/com/tungsten/fcl/setting/GameOption.java +++ b/FCL/src/main/java/com/tungsten/fcl/setting/GameOption.java @@ -30,6 +30,7 @@ import java.io.BufferedReader; import java.io.File; import java.io.FileReader; import java.io.IOException; +import java.lang.ref.WeakReference; import java.util.ArrayList; import java.util.Arrays; import java.util.HashMap; @@ -43,9 +44,9 @@ import java.util.logging.Level; public class GameOption { private final String optionPath; - private final HashMap parameterMap = new HashMap<>(); - private final ArrayList optionListeners = new ArrayList<>(); - private FileObserver fileObserver; + private static final HashMap parameterMap = new HashMap<>(); + private static final ArrayList> optionListeners = new ArrayList<>(); + private static FileObserver fileObserver; public GameOption(String gameDir) { this.optionPath = gameDir + "/options.txt"; @@ -138,7 +139,7 @@ public class GameOption { } /** @return The stored Minecraft GUI scale, also auto-computed if on auto-mode or improper setting */ - public int getGuiScale(int width, int height) { + public int getGuiScale(int width, int height, int iscale) { String str = get("guiScale"); int guiScale = (str == null ? 0 : Integer.parseInt(str)); @@ -147,13 +148,13 @@ public class GameOption { guiScale = scale; } - String lang = get("lang"); - boolean isUnicode = lang != null && (lang.equals("zh_CN") || lang.equals("zh_cn")); - if (isUnicode && guiScale % 2 != 0 && guiScale != 1) { - --guiScale; - } +// String lang = get("lang"); +// boolean isUnicode = lang != null && (lang.equals("zh_CN") || lang.equals("zh_cn")); +// if (isUnicode && guiScale % 2 != 0 && guiScale != 1) { +// --guiScale; +// } - return guiScale; + return guiScale + iscale; } /** Add a file observer to reload options on file change @@ -182,21 +183,21 @@ public class GameOption { /** Notify the option listeners */ public void notifyListeners() { - for (GameOptionListener optionListener : optionListeners) { - if(optionListener == null) continue; + for (WeakReference optionListener : optionListeners) { + if(optionListener.get() == null) continue; - optionListener.onOptionChanged(); + optionListener.get().onOptionChanged(); } } /** Add an option listener, notice how we don't have a reference to it */ public void addGameOptionListener(GameOptionListener listener) { - optionListeners.add(listener); + optionListeners.add(new WeakReference<>(listener)); } /** Remove a listener from existence, or at least, its reference here */ public void removeGameOptionListener(GameOptionListener listener) { - for(GameOptionListener optionListener : optionListeners) { + for(WeakReference optionListener : optionListeners) { if(optionListener == null) continue; if(optionListener == listener) { optionListeners.remove(optionListener); diff --git a/FCL/src/main/java/com/tungsten/fcl/setting/MenuSetting.java b/FCL/src/main/java/com/tungsten/fcl/setting/MenuSetting.java index b9ac54a5..44a57e80 100644 --- a/FCL/src/main/java/com/tungsten/fcl/setting/MenuSetting.java +++ b/FCL/src/main/java/com/tungsten/fcl/setting/MenuSetting.java @@ -209,6 +209,20 @@ public class MenuSetting { mouseMoveModeProperty.set(mouseMoveMode); } + private final IntegerProperty itemBarScaleProperty = new SimpleIntegerProperty(this, "itemBarScale", 0); + + public IntegerProperty itemBarScaleProperty() { + return itemBarScaleProperty; + } + + public int getItemBarScale() { + return itemBarScaleProperty.get(); + } + + public void setItemBarScale(int itemBarScale) { + this.itemBarScaleProperty.set(itemBarScale); + } + private final DoubleProperty mouseSensitivityProperty = new SimpleDoubleProperty(this, "mouseSensitivity", 1d); public DoubleProperty mouseSensitivityProperty() { @@ -281,6 +295,7 @@ public class MenuSetting { mouseMoveModeProperty.addListener(listener); mouseSensitivityProperty.addListener(listener); mouseSizeProperty.addListener(listener); + itemBarScaleProperty.addListener(listener); gamepadDeadzoneProperty.addListener(listener); gamepadAimAssistZoneProperty.addListener(listener); } @@ -306,6 +321,7 @@ public class MenuSetting { obj.addProperty("mouseMoveMode", src.getMouseMoveMode().getId()); obj.addProperty("mouseSensitivity", src.getMouseSensitivity()); obj.addProperty("mouseSize", src.getMouseSize()); + obj.addProperty("itemBarScale", src.getItemBarScale()); obj.addProperty("gamepadDeadzone", src.getGamepadDeadzone()); obj.addProperty("gamepadAimAssistZone", src.getGamepadAimAssistZone()); return obj; @@ -334,6 +350,7 @@ public class MenuSetting { ms.setMouseMoveMode(MouseMoveMode.getById(Optional.ofNullable(obj.get("mouseMoveMode")).map(JsonElement::getAsInt).orElse(0))); ms.setMouseSensitivity(Optional.ofNullable(obj.get("mouseSensitivity")).map(JsonElement::getAsDouble).orElse(1d)); ms.setMouseSize(Optional.ofNullable(obj.get("mouseSize")).map(JsonElement::getAsInt).orElse(15)); + ms.setItemBarScale(Optional.ofNullable(obj.get("itemBarScale")).map(JsonElement::getAsInt).orElse(0)); ms.setGamepadDeadzone(Optional.ofNullable(obj.get("gamepadDeadzone")).map(JsonElement::getAsDouble).orElse(0.2d)); ms.setGamepadAimAssistZone(Optional.ofNullable(obj.get("gamepadAimAssistZone")).map(JsonElement::getAsDouble).orElse(0.98d)); return ms; diff --git a/FCL/src/main/res/layout/menu_right.xml b/FCL/src/main/res/layout/menu_right.xml index 4474dc89..d39ac697 100644 --- a/FCL/src/main/res/layout/menu_right.xml +++ b/FCL/src/main/res/layout/menu_right.xml @@ -178,6 +178,43 @@ android:textSize="12sp" /> + + + + + + + + + + 发送键值 发送 禁用软键盘自适应 + 物品栏缩放 显示日志 操作已取消 diff --git a/FCL/src/main/res/values/strings.xml b/FCL/src/main/res/values/strings.xml index af8d1979..3fc2ec7c 100644 --- a/FCL/src/main/res/values/strings.xml +++ b/FCL/src/main/res/values/strings.xml @@ -535,6 +535,7 @@ Send Key Send DisableSoftKeyboardAutoAdjust + ItemBarScale Show Log Operation was cancelled