fix & add item bar scale

This commit is contained in:
ShirosakiMio 2024-03-22 13:33:46 +08:00
parent 2774ae6151
commit 5ccbff594f
7 changed files with 92 additions and 17 deletions

View File

@ -325,12 +325,14 @@ public class GameMenu implements MenuCallback, View.OnClickListener {
FCLSpinner<GestureMode> gestureModeSpinner = findViewById(R.id.gesture_mode_spinner);
FCLSpinner<MouseMoveMode> 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));

View File

@ -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;
}
}

View File

@ -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<String, String> parameterMap = new HashMap<>();
private final ArrayList<GameOptionListener> optionListeners = new ArrayList<>();
private FileObserver fileObserver;
private static final HashMap<String, String> parameterMap = new HashMap<>();
private static final ArrayList<WeakReference<GameOptionListener>> 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<GameOptionListener> 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<GameOptionListener> optionListener : optionListeners) {
if(optionListener == null) continue;
if(optionListener == listener) {
optionListeners.remove(optionListener);

View File

@ -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;

View File

@ -178,6 +178,43 @@
android:textSize="12sp" />
</com.tungsten.fcllibrary.component.view.FCLLinearLayout>
<com.tungsten.fcllibrary.component.view.FCLLinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="5dp"
android:orientation="horizontal"
android:padding="5dp">
<com.tungsten.fcllibrary.component.view.FCLTextView
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:layout_weight="1"
android:singleLine="true"
android:text="@string/menu_settings_item_bar_scale"
android:textSize="12sp"
app:auto_text_tint="true" />
<com.tungsten.fcllibrary.component.view.FCLTextView
app:auto_text_tint="true"
android:singleLine="true"
android:id="@+id/item_bar_scale_text"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:textSize="12sp"/>
</com.tungsten.fcllibrary.component.view.FCLLinearLayout>
<com.tungsten.fcllibrary.component.view.FCLSeekBar
android:layout_marginTop="10dp"
android:layout_marginBottom="5dp"
android:max="2"
android:min="-2"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/item_bar_scale"/>
<com.tungsten.fcllibrary.component.view.FCLTextView
app:auto_text_tint="true"

View File

@ -504,6 +504,7 @@
<string name="menu_settings_send_key">发送键值</string>
<string name="menu_settings_send_key_button">发送</string>
<string name="menu_settings_soft_keyboard_adjust">禁用软键盘自适应</string>
<string name="menu_settings_item_bar_scale">物品栏缩放</string>
<string name="menu_settings_show_log">显示日志</string>
<string name="message_cancelled">操作已取消</string>

View File

@ -535,6 +535,7 @@
<string name="menu_settings_send_key">Send Key</string>
<string name="menu_settings_send_key_button">Send</string>
<string name="menu_settings_soft_keyboard_adjust">DisableSoftKeyboardAutoAdjust</string>
<string name="menu_settings_item_bar_scale">ItemBarScale</string>
<string name="menu_settings_show_log">Show Log</string>
<string name="message_cancelled">Operation was cancelled</string>