diff --git a/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/EfficientAndroidLWJGLKeycode.java b/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/EfficientAndroidLWJGLKeycode.java index c2ff62248..5fce0dcbc 100644 --- a/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/EfficientAndroidLWJGLKeycode.java +++ b/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/EfficientAndroidLWJGLKeycode.java @@ -198,7 +198,7 @@ public class EfficientAndroidLWJGLKeycode { sendKeyPress(getValueByIndex(index)); } - public static int getValueByIndex(int index) { + public static short getValueByIndex(int index) { return sLwjglKeycodes[index]; } diff --git a/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/customcontrols/gamepad/GamepadMap.java b/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/customcontrols/gamepad/GamepadMap.java index 530e23908..a24c90e14 100644 --- a/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/customcontrols/gamepad/GamepadMap.java +++ b/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/customcontrols/gamepad/GamepadMap.java @@ -49,29 +49,6 @@ public class GamepadMap { public GamepadButton DPAD_DOWN; public GamepadButton DPAD_LEFT; - public GamepadMap() { - BUTTON_A = new GamepadButton(); - BUTTON_B = new GamepadButton(); - BUTTON_X = new GamepadButton(); - BUTTON_Y = new GamepadButton(); - BUTTON_START = new GamepadButton(); - BUTTON_SELECT = new GamepadButton(); - TRIGGER_RIGHT = new GamepadButton(); - TRIGGER_LEFT = new GamepadButton(); - SHOULDER_RIGHT = new GamepadButton(); - SHOULDER_LEFT = new GamepadButton(); - DIRECTION_FORWARD = new GamepadEmulatedButton(); - DIRECTION_BACKWARD = new GamepadEmulatedButton(); - DIRECTION_RIGHT = new GamepadEmulatedButton(); - DIRECTION_LEFT = new GamepadEmulatedButton(); - THUMBSTICK_RIGHT = new GamepadButton(); - THUMBSTICK_LEFT = new GamepadButton(); - DPAD_UP = new GamepadButton(); - DPAD_RIGHT = new GamepadButton(); - DPAD_DOWN = new GamepadButton(); - DPAD_LEFT = new GamepadButton(); - } - /* * Sets all buttons to a not pressed state, sending an input if needed */ @@ -100,6 +77,37 @@ public class GamepadMap { } + private static GamepadMap createAndInitializeButtons() { + GamepadMap gamepadMap = new GamepadMap(); + gamepadMap.BUTTON_A = new GamepadButton(); + gamepadMap.BUTTON_B = new GamepadButton(); + gamepadMap.BUTTON_X = new GamepadButton(); + gamepadMap.BUTTON_Y = new GamepadButton(); + + gamepadMap.BUTTON_START = new GamepadButton(); + gamepadMap.BUTTON_SELECT = new GamepadButton(); + + gamepadMap.TRIGGER_RIGHT = new GamepadButton(); + gamepadMap.TRIGGER_LEFT = new GamepadButton(); + + gamepadMap.SHOULDER_RIGHT = new GamepadButton(); + gamepadMap.SHOULDER_LEFT = new GamepadButton(); + + gamepadMap.DIRECTION_FORWARD = new GamepadEmulatedButton(); + gamepadMap.DIRECTION_BACKWARD = new GamepadEmulatedButton(); + gamepadMap.DIRECTION_RIGHT = new GamepadEmulatedButton(); + gamepadMap.DIRECTION_LEFT = new GamepadEmulatedButton(); + + gamepadMap.THUMBSTICK_RIGHT = new GamepadButton(); + gamepadMap.THUMBSTICK_LEFT = new GamepadButton(); + + gamepadMap.DPAD_UP = new GamepadButton(); + gamepadMap.DPAD_RIGHT = new GamepadButton(); + gamepadMap.DPAD_DOWN = new GamepadButton(); + gamepadMap.DPAD_LEFT = new GamepadButton(); + return gamepadMap; + } + /* * Returns a pre-done mapping used when the mouse is grabbed by the game. */ @@ -191,7 +199,7 @@ public class GamepadMap { * Returns an pre-initialized GamepadMap with only empty keycodes */ @SuppressWarnings("unused") public static GamepadMap createEmptyMap(){ - GamepadMap emptyMap = new GamepadMap(); + GamepadMap emptyMap = createAndInitializeButtons(); for(GamepadEmulatedButton button : emptyMap.getButtons()) button.keycodes = new short[] {UNSPECIFIED, UNSPECIFIED, UNSPECIFIED, UNSPECIFIED}; return emptyMap; diff --git a/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/customcontrols/gamepad/GamepadMapperAdapter.java b/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/customcontrols/gamepad/GamepadMapperAdapter.java index 50ee1b537..d778ea208 100644 --- a/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/customcontrols/gamepad/GamepadMapperAdapter.java +++ b/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/customcontrols/gamepad/GamepadMapperAdapter.java @@ -64,10 +64,10 @@ public class GamepadMapperAdapter extends RecyclerView.Adapter adapterView, View view, int i, long l) { - /*if(mAttachedPosition == -1) return; - int[] keycodes = mRealButtons[mAttachedPosition].keycodes; - if(keycodes.length < 1) return; - int selectedKeycode; - if(i < mSpecialKeycodeCount) { - selectedKeycode = i - mSpecialKeycodeCount; - } else { - selectedKeycode = EfficientAndroidLWJGLKeycode.getValueByIndex(i - mSpecialKeycodeCount); + public void onItemSelected(AdapterView adapterView, View view, int selectionIndex, long selectionId) { + if(mAttachedPosition == -1) return; + short[] keycodes = mRealButtons[mAttachedPosition].keycodes; + int editedKeycodeIndex = -1; + for(int i = 0; i < mKeySpinners.length && i < keycodes.length; i++) { + if(!adapterView.equals(mKeySpinners[i])) continue; + editedKeycodeIndex = i; + break; } - keycodes[0] = selectedKeycode;*/ + if(editedKeycodeIndex == -1) return; + int keycode_offset = selectionIndex - mSpecialKeycodeCount; + if(selectionIndex <= mSpecialKeycodeCount) keycodes[editedKeycodeIndex] = (short) (keycode_offset); + else keycodes[editedKeycodeIndex] = EfficientAndroidLWJGLKeycode.getValueByIndex(keycode_offset); + updateKeycodeLabel(); } @Override @@ -308,6 +316,7 @@ public class GamepadMapperAdapter extends RecyclerView.Adapter mGrabStateAdapter = new ArrayAdapter<>(view.getContext(), R.layout.item_centered_textview); - mGrabStateAdapter.addAll("INMENU", "INGAME"); + mGrabStateAdapter.addAll(getString(R.string.customctrl_visibility_in_menus), getString(R.string.customctrl_visibility_ingame)); mGrabStateSpinner.setAdapter(mGrabStateAdapter); mGrabStateSpinner.setSelection(0); mGrabStateSpinner.setOnItemSelectedListener(this); diff --git a/app_pojavlauncher/src/main/res/layout/dialog_control_button_setting.xml b/app_pojavlauncher/src/main/res/layout/dialog_control_button_setting.xml index a3185552d..08508c24a 100644 --- a/app_pojavlauncher/src/main/res/layout/dialog_control_button_setting.xml +++ b/app_pojavlauncher/src/main/res/layout/dialog_control_button_setting.xml @@ -483,7 +483,7 @@ android:id="@+id/visibility_textview" android:layout_width="match_parent" android:layout_height="wrap_content" - android:text="Visibility" + android:text="@string/customctrl_visibility_title" app:layout_constraintTop_toBottomOf="@+id/editButtonOpacity_seekbar" tools:layout_editor_absoluteX="6dp" /> @@ -491,14 +491,14 @@ android:id="@+id/visibility_game_checkbox" android:layout_width="match_parent" android:layout_height="wrap_content" - android:text="In game" + android:text="@string/customctrl_visibility_ingame" app:layout_constraintTop_toBottomOf="@+id/visibility_textview" /> diff --git a/app_pojavlauncher/src/main/res/layout/fragment_controller_remapper.xml b/app_pojavlauncher/src/main/res/layout/fragment_controller_remapper.xml index 66ad2d5f5..766954936 100644 --- a/app_pojavlauncher/src/main/res/layout/fragment_controller_remapper.xml +++ b/app_pojavlauncher/src/main/res/layout/fragment_controller_remapper.xml @@ -6,16 +6,46 @@ android:layout_height="match_parent" android:background="@color/background_app"> + + + + + + + + + - + + \ No newline at end of file diff --git a/app_pojavlauncher/src/main/res/values/strings.xml b/app_pojavlauncher/src/main/res/values/strings.xml index 2e3be3c4b..2c92e50ce 100644 --- a/app_pojavlauncher/src/main/res/values/strings.xml +++ b/app_pojavlauncher/src/main/res/values/strings.xml @@ -1,5 +1,5 @@ - + PojavLauncher (Minecraft: Java Edition for Android) PojavLauncher @@ -394,15 +394,20 @@ Right Trigger Left Shoulder Right Shoulder - Walk Forward - Walk Backward - Walk Left - Walk Right + Stick Up + Stick Down + Stick Left + Stick Right Left Thumbstick (click) Right Thumbstick (click) D-Pad Up D-Pad Down D-Pad Left D-Pad Right - Hold "Select" to exit + Hold + to exit + Current mode + Visibility + In-game + In menus