From 0ae3b2671c5a711fc2fc860a9c761f6723f019ca Mon Sep 17 00:00:00 2001 From: Tungstend Date: Sat, 4 Mar 2023 02:02:22 +0800 Subject: [PATCH] left menu --- .../com/tungsten/fcl/control/GameMenu.java | 131 +++++++ .../com/tungsten/fcl/game/LauncherHelper.java | 4 + .../com/tungsten/fcl/setting/Controllers.java | 5 + .../fcl/ui/controller/ControllerUI.java | 4 + FCL/src/main/res/layout/menu_left.xml | 322 +++++++++--------- 5 files changed, 309 insertions(+), 157 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 909de447..d5809c56 100644 --- a/FCL/src/main/java/com/tungsten/fcl/control/GameMenu.java +++ b/FCL/src/main/java/com/tungsten/fcl/control/GameMenu.java @@ -16,12 +16,14 @@ import androidx.annotation.Nullable; import com.google.gson.GsonBuilder; import com.tungsten.fcl.R; import com.tungsten.fcl.activity.JVMCrashActivity; +import com.tungsten.fcl.control.data.ControlViewGroup; import com.tungsten.fcl.control.keyboard.LwjglCharSender; import com.tungsten.fcl.control.keyboard.TouchCharInput; import com.tungsten.fcl.control.view.GameItemBar; import com.tungsten.fcl.control.view.LogWindow; import com.tungsten.fcl.control.view.TouchPad; import com.tungsten.fcl.control.view.ViewManager; +import com.tungsten.fcl.setting.Controller; import com.tungsten.fcl.setting.Controllers; import com.tungsten.fcl.setting.MenuSetting; import com.tungsten.fcl.util.FXUtils; @@ -30,8 +32,12 @@ import com.tungsten.fclauncher.FCLPath; import com.tungsten.fclauncher.bridge.FCLBridge; import com.tungsten.fclauncher.bridge.FCLBridgeCallback; import com.tungsten.fclcore.fakefx.beans.binding.Bindings; +import com.tungsten.fclcore.fakefx.beans.property.BooleanProperty; import com.tungsten.fclcore.fakefx.beans.property.IntegerProperty; +import com.tungsten.fclcore.fakefx.beans.property.ObjectProperty; +import com.tungsten.fclcore.fakefx.beans.property.SimpleBooleanProperty; import com.tungsten.fclcore.fakefx.beans.property.SimpleIntegerProperty; +import com.tungsten.fclcore.fakefx.beans.property.SimpleObjectProperty; import com.tungsten.fclcore.util.Logging; import com.tungsten.fclcore.util.io.FileUtils; import com.tungsten.fcllibrary.component.FCLActivity; @@ -39,6 +45,7 @@ import com.tungsten.fcllibrary.component.dialog.FCLAlertDialog; import com.tungsten.fcllibrary.component.theme.ThemeEngine; import com.tungsten.fcllibrary.component.view.FCLButton; import com.tungsten.fcllibrary.component.view.FCLImageView; +import com.tungsten.fcllibrary.component.view.FCLLinearLayout; import com.tungsten.fcllibrary.component.view.FCLProgressBar; import com.tungsten.fcllibrary.component.view.FCLSeekBar; import com.tungsten.fcllibrary.component.view.FCLSpinner; @@ -51,6 +58,7 @@ import java.io.IOException; import java.nio.file.Files; import java.util.ArrayList; import java.util.logging.Level; +import java.util.stream.Collectors; public class GameMenu implements MenuCallback, View.OnClickListener { @@ -77,6 +85,12 @@ public class GameMenu implements MenuCallback, View.OnClickListener { private FCLImageView cursorView; private ViewManager viewManager; private Gyroscope gyroscope; + + private FCLButton manageViewGroups; + private FCLButton addButton; + private FCLButton addDirection; + private FCLButton manageButtonStyle; + private FCLButton manageDirectionStyle; private FCLButton openMultiplayerMenu; private FCLButton manageQuickInput; @@ -150,9 +164,107 @@ public class GameMenu implements MenuCallback, View.OnClickListener { public TouchCharInput getTouchCharInput() { return touchCharInput; } + + private final BooleanProperty editModeProperty = new SimpleBooleanProperty(this, "editMode", false); + + public BooleanProperty editModeProperty() { + return editModeProperty; + } + + public void setEditMode(boolean editMode) { + editModeProperty.set(editMode); + } + + public boolean isEditMode() { + return editModeProperty.get(); + } + + private final BooleanProperty showViewBoundariesProperty = new SimpleBooleanProperty(this, "showViewBoundaries", false); + + public BooleanProperty showViewBoundariesProperty() { + return showViewBoundariesProperty; + } + + public void setShowViewBoundaries(boolean showViewBoundaries) { + showViewBoundariesProperty.set(showViewBoundaries); + } + + public boolean isShowViewBoundaries() { + return showViewBoundariesProperty.get(); + } + + private final ObjectProperty controllerProperty = new SimpleObjectProperty<>(this, "controller", null); + + public ObjectProperty controllerProperty() { + return controllerProperty; + } + + public void setController(Controller controller) { + controllerProperty.set(controller); + } + + public Controller getController() { + return controllerProperty.get(); + } + + private final ObjectProperty viewGroupProperty = new SimpleObjectProperty<>(this, "viewGroup", null); + + public ObjectProperty viewGroupProperty() { + return viewGroupProperty; + } + + public void setViewGroup(ControlViewGroup viewGroup) { + viewGroupProperty.set(viewGroup); + } + + public ControlViewGroup getViewGroup() { + return viewGroupProperty.get(); + } private void initLeftMenu() { + FCLSwitch editMode = findViewById(R.id.edit_mode); + FCLSwitch showViewBoundaries = findViewById(R.id.show_boundary); + + FCLSpinner currentControllerSpinner = findViewById(R.id.current_controller); + FCLSpinner currentViewGroupSpinner = findViewById(R.id.current_view_group); + FCLLinearLayout editLayout = findViewById(R.id.edit_layout); + + manageViewGroups = findViewById(R.id.manage_view_groups); + addButton = findViewById(R.id.add_button); + addDirection = findViewById(R.id.add_direction); + manageButtonStyle = findViewById(R.id.manage_button_style); + manageDirectionStyle = findViewById(R.id.manage_direction_style); + + FXUtils.bindBoolean(editMode, editModeProperty); + FXUtils.bindBoolean(showViewBoundaries, showViewBoundariesProperty); + + ArrayList controllerNameList = Controllers.getControllers().stream().map(Controller::getName).collect(Collectors.toCollection(ArrayList::new)); + currentControllerSpinner.setDataList(new ArrayList<>(Controllers.getControllers())); + ArrayAdapter controllerNameAdapter = new ArrayAdapter<>(activity, R.layout.item_spinner_small, controllerNameList); + controllerNameAdapter.setDropDownViewResource(R.layout.item_spinner_dropdown_small); + currentControllerSpinner.setAdapter(controllerNameAdapter); + FXUtils.bindSelection(currentControllerSpinner, controllerProperty); + + refreshViewGroupList(currentViewGroupSpinner); + controllerProperty.addListener(invalidate -> refreshViewGroupList(currentViewGroupSpinner)); + + editLayout.visibilityProperty().bind(editModeProperty); + + manageViewGroups.setOnClickListener(this); + addButton.setOnClickListener(this); + addDirection.setOnClickListener(this); + manageButtonStyle.setOnClickListener(this); + manageDirectionStyle.setOnClickListener(this); + } + + private void refreshViewGroupList(FCLSpinner spinner) { + ArrayList viewGroupNameList = controllerProperty.get().viewGroups().stream().map(ControlViewGroup::getName).collect(Collectors.toCollection(ArrayList::new)); + spinner.setDataList(new ArrayList<>(controllerProperty.get().viewGroups())); + ArrayAdapter viewGroupNameAdapter = new ArrayAdapter<>(activity, R.layout.item_spinner_small, viewGroupNameList); + viewGroupNameAdapter.setDropDownViewResource(R.layout.item_spinner_dropdown_small); + spinner.setAdapter(viewGroupNameAdapter); + FXUtils.bindSelection(spinner, viewGroupProperty); } private void initRightMenu() { @@ -262,6 +374,9 @@ public class GameMenu implements MenuCallback, View.OnClickListener { Logging.LOG.log(Level.SEVERE, "Failed to save menu setting", e); } }); + + editModeProperty.set(isSimulated()); + controllerProperty.set(Controllers.findControllerByName(activity.getIntent().getExtras().getString("controller"))); baseLayout = findViewById(R.id.base_layout); touchPad = findViewById(R.id.touch_pad); @@ -418,6 +533,22 @@ public class GameMenu implements MenuCallback, View.OnClickListener { @Override public void onClick(View v) { + if (v == manageViewGroups) { + + } + if (v == addButton) { + + } + if (v == addDirection) { + + } + if (v == manageButtonStyle) { + + } + if (v == manageDirectionStyle) { + + } + if (v == openMultiplayerMenu) { } diff --git a/FCL/src/main/java/com/tungsten/fcl/game/LauncherHelper.java b/FCL/src/main/java/com/tungsten/fcl/game/LauncherHelper.java index 4b4547f3..e7eb8a5f 100644 --- a/FCL/src/main/java/com/tungsten/fcl/game/LauncherHelper.java +++ b/FCL/src/main/java/com/tungsten/fcl/game/LauncherHelper.java @@ -6,6 +6,7 @@ import static com.tungsten.fclcore.util.Logging.LOG; import android.content.Context; import android.content.Intent; +import android.os.Bundle; import android.view.View; import androidx.annotation.NonNull; @@ -135,6 +136,9 @@ public final class LauncherHelper { fclBridge.setController(repository.getVersionSetting(selectedVersion).getController()); fclBridge.setGameDir(repository.getRunDirectory(selectedVersion).getAbsolutePath()); JVMActivity.setFClBridge(fclBridge, MenuType.GAME); + Bundle bundle = new Bundle(); + bundle.putString("controller", repository.getVersionSetting(selectedVersion).getController()); + intent.putExtras(bundle); LOG.log(Level.INFO, "Start JVMActivity!"); context.startActivity(intent); })).withStage("launch.state.waiting_launching")) diff --git a/FCL/src/main/java/com/tungsten/fcl/setting/Controllers.java b/FCL/src/main/java/com/tungsten/fcl/setting/Controllers.java index b7b33837..5a5c5e07 100644 --- a/FCL/src/main/java/com/tungsten/fcl/setting/Controllers.java +++ b/FCL/src/main/java/com/tungsten/fcl/setting/Controllers.java @@ -132,4 +132,9 @@ public class Controllers { controllers.remove(controller); } + public static Controller findControllerByName(String name) { + checkControllers(); + return controllers.stream().filter(it -> it.getName().equals(name)).findFirst().orElse(controllers.get(0)); + } + } diff --git a/FCL/src/main/java/com/tungsten/fcl/ui/controller/ControllerUI.java b/FCL/src/main/java/com/tungsten/fcl/ui/controller/ControllerUI.java index e2851c8b..47005f59 100644 --- a/FCL/src/main/java/com/tungsten/fcl/ui/controller/ControllerUI.java +++ b/FCL/src/main/java/com/tungsten/fcl/ui/controller/ControllerUI.java @@ -4,6 +4,7 @@ import static com.tungsten.fcl.util.FXUtils.onInvalidating; import android.content.Context; import android.content.Intent; +import android.os.Bundle; import android.view.View; import android.widget.ListView; @@ -161,6 +162,9 @@ public class ControllerUI extends FCLCommonUI implements View.OnClickListener { } if (view == editController) { Intent intent = new Intent(getContext(), ControllerActivity.class); + Bundle bundle = new Bundle(); + bundle.putString("controller", getSelectedController().getName()); + intent.putExtras(bundle); getActivity().startActivity(intent); } } diff --git a/FCL/src/main/res/layout/menu_left.xml b/FCL/src/main/res/layout/menu_left.xml index b9a186de..24aa09ba 100644 --- a/FCL/src/main/res/layout/menu_left.xml +++ b/FCL/src/main/res/layout/menu_left.xml @@ -111,189 +111,197 @@ - - - - + android:orientation="vertical"> - - - - - - - - + android:textSize="11sp"/> - + + + android:orientation="horizontal"> - + - + + + + + + + + + + + + + + + + + + + + + + + + + + + - - + android:text="@string/menu_controls_style" + android:textSize="11sp"/> - + - - - + android:orientation="horizontal"> - + + + + + + + android:orientation="horizontal"> - + - + - - - - - - - - - - - - - - - +