add gamepad aim assist

This commit is contained in:
ShirosakiMio 2024-03-19 20:05:07 +08:00
parent 66191d89a8
commit 632f80ec3a
6 changed files with 81 additions and 2 deletions

View File

@ -154,8 +154,17 @@ public class FCLInput implements View.OnCapturedPointerListener, View.OnGenericM
deltaX = (int) (event.getX() * ((GameMenu) menu).getMenuSetting().getMouseSensitivity());
deltaY = (int) (event.getY() * ((GameMenu) menu).getMenuSetting().getMouseSensitivity());
} else {
deltaX = (int) (lastXAxis * deltaTimeScale * 10 * ((GameMenu) menu).getMenuSetting().getMouseSensitivity());
deltaY = (int) (lastYAxis * deltaTimeScale * 10 * ((GameMenu) menu).getMenuSetting().getMouseSensitivity());
GameMenu gameMenu = (GameMenu) menu;
gameMenu.getBridge().refreshHitResultType();
deltaX = (int) (lastXAxis * deltaTimeScale * 10 * gameMenu.getMenuSetting().getMouseSensitivity());
deltaY = (int) (lastYAxis * deltaTimeScale * 10 * gameMenu.getMenuSetting().getMouseSensitivity());
double hypot = Math.hypot(Math.abs(lastXAxis), Math.abs(lastYAxis));
if (gameMenu.getHitResultType() == FCLBridge.HIT_RESULT_TYPE_ENTITY) {
if (hypot <= ((GameMenu) menu).getMenuSetting().getGamepadAimAssistZone()) {
deltaX /= 10;
deltaY /= 10;
}
}
}
if (menu.getCursorMode() == FCLBridge.CursorEnabled) {
int targetX = Math.max(0, Math.min(screenWidth, ((GameMenu) menu).getCursorX() + deltaX));

View File

@ -328,11 +328,13 @@ public class GameMenu implements MenuCallback, View.OnClickListener {
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 mouseSensitivityText = findViewById(R.id.mouse_sensitivity_text);
FCLTextView mouseSizeText = findViewById(R.id.mouse_size_text);
FCLTextView gamepadDeadzoneText = findViewById(R.id.gamepad_deadzone_text);
FCLTextView gamepadAimZoneText = findViewById(R.id.gamepad_aimzone_text);
FCLTextView gyroSensitivityText = findViewById(R.id.gyro_sensitivity_text);
openMultiplayerMenu = findViewById(R.id.open_multiplayer_menu);
@ -399,12 +401,24 @@ public class GameMenu implements MenuCallback, View.OnClickListener {
};
gamepadDeadzoneSeekbar.progressProperty().bindBidirectional(gamepadDeadzoneProperty);
gamepadAimZoneSeekbar.addProgressListener();
IntegerProperty gamepadAimZoneProperty = new SimpleIntegerProperty((int) (menuSetting.getGamepadAimAssistZone() * 100)) {
@Override
protected void invalidated() {
super.invalidated();
double doubleValue = get() / 100d;
menuSetting.setGamepadAimAssistZone(doubleValue);
}
};
gamepadAimZoneSeekbar.progressProperty().bindBidirectional(gamepadAimZoneProperty);
gyroSensitivitySeekbar.addProgressListener();
gyroSensitivitySeekbar.progressProperty().bindBidirectional(menuSetting.gyroscopeSensitivityProperty());
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));
gamepadAimZoneText.stringProperty().bind(Bindings.createStringBinding(() -> gamepadAimZoneProperty.get() + " %", gamepadAimZoneProperty));
gyroSensitivityText.stringProperty().bind(Bindings.createStringBinding(() -> menuSetting.gyroscopeSensitivityProperty().get() + "", menuSetting.gyroscopeSensitivityProperty()));
openMultiplayerMenu.setOnClickListener(this);

View File

@ -251,6 +251,20 @@ public class MenuSetting {
this.gamepadDeadzoneProperty.set(gamepadDeadzone);
}
private final DoubleProperty gamepadAimAssistZoneProperty = new SimpleDoubleProperty(this, "gamepadAimAssistZone", 1d);
public DoubleProperty gamepadAimAssistZoneProperty() {
return gamepadAimAssistZoneProperty;
}
public double getGamepadAimAssistZone() {
return gamepadAimAssistZoneProperty.get();
}
public void setGamepadAimAssistZone(double gamepadAimAssistZone) {
this.gamepadAimAssistZoneProperty.set(gamepadAimAssistZone);
}
public void addPropertyChangedListener(InvalidationListener listener) {
autoFitProperty.addListener(listener);
autoFitDistProperty.addListener(listener);
@ -268,6 +282,7 @@ public class MenuSetting {
mouseSensitivityProperty.addListener(listener);
mouseSizeProperty.addListener(listener);
gamepadDeadzoneProperty.addListener(listener);
gamepadAimAssistZoneProperty.addListener(listener);
}
public static class Serializer implements JsonSerializer<MenuSetting>, JsonDeserializer<MenuSetting> {
@ -292,6 +307,7 @@ public class MenuSetting {
obj.addProperty("mouseSensitivity", src.getMouseSensitivity());
obj.addProperty("mouseSize", src.getMouseSize());
obj.addProperty("gamepadDeadzone", src.getGamepadDeadzone());
obj.addProperty("gamepadAimAssistZone", src.getGamepadAimAssistZone());
return obj;
}
@ -319,6 +335,7 @@ public class MenuSetting {
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.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

@ -434,6 +434,43 @@
android:layout_height="wrap_content"
android:id="@+id/gamepad_deadzone_size"/>
<com.tungsten.fcllibrary.component.view.FCLLinearLayout
android:layout_marginTop="5dp"
android:padding="5dp"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<com.tungsten.fcllibrary.component.view.FCLTextView
app:auto_text_tint="true"
android:singleLine="true"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:layout_gravity="center"
android:text="@string/menu_settings_gamepad_aimzone"
android:textSize="12sp"/>
<com.tungsten.fcllibrary.component.view.FCLTextView
app:auto_text_tint="true"
android:singleLine="true"
android:id="@+id/gamepad_aimzone_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="100"
android:min="0"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/gamepad_aimzone_size"/>
<com.tungsten.fcllibrary.component.view.FCLTextView
app:auto_text_tint="true"
android:singleLine="true"

View File

@ -893,4 +893,5 @@
<string name="world_reveal">打开文件夹</string>
<string name="world_show_all">显示全部</string>
<string name="world_time">yyyy 年 MM 月 dd 日 HH:mm:ss</string>
<string name="menu_settings_gamepad_aimzone">辅助瞄准区</string>
</resources>

View File

@ -527,6 +527,7 @@
<string name="menu_settings_mouse_size">Mouse Size</string>
<string name="menu_settings_gamepad">GamePad</string>
<string name="menu_settings_gamepad_deadzone">DeadZone</string>
<string name="menu_settings_gamepad_aimzone">AimAssistZone</string>
<string name="menu_settings_multiplayer">Multiplayer Menu</string>
<string name="menu_settings_multiplayer_button">Open</string>
<string name="menu_settings_quick_input">Quick Input</string>