OldBlueWater/BlueWater/Assets/Doozy/Editor/UIManager/Layouts/Settings/InputSettingsWindowLayout.cs

301 lines
13 KiB
C#

// Copyright (c) 2015 - 2023 Doozy Entertainment. All Rights Reserved.
// This code can only be used under the standard Unity Asset Store End User License Agreement
// A Copy of the EULA APPENDIX 1 is available at http://unity3d.com/company/legal/as_terms
using System.Collections.Generic;
using Doozy.Editor.Common.Utils;
using Doozy.Editor.EditorUI;
using Doozy.Editor.EditorUI.Components;
using Doozy.Editor.EditorUI.Components.Internal;
using Doozy.Editor.EditorUI.ScriptableObjects.Colors;
using Doozy.Editor.EditorUI.Utils;
using Doozy.Editor.Interfaces;
using Doozy.Runtime.UIElements.Extensions;
using Doozy.Runtime.UIManager.Input;
using Doozy.Runtime.UIManager.ScriptableObjects;
using UnityEditor;
using UnityEditor.UIElements;
using UnityEngine;
// ReSharper disable RedundantUsingDirective
using UnityEngine.UIElements; //leave this here to avoid errors in newer versions of Unity (THANKS UNITY)!!! - they moved IntegerField and FloatField to the UnityEngine.UIElements namespace
// ReSharper restore RedundantUsingDirective
using ObjectNames = Doozy.Runtime.Common.Utils.ObjectNames;
namespace Doozy.Editor.UIManager.Layouts.Settings
{
public sealed class InputSettingsWindowLayout : FluidWindowLayout, IDashboardSettingsWindowLayout
{
public int order => 0;
public override string layoutName => "Input Settings";
public override List<Texture2D> animatedIconTextures => EditorSpriteSheets.UIManager.Icons.KeyMapper;
public override Color accentColor => EditorColors.Default.SettingsComponent;
public override EditorSelectableColorInfo selectableAccentColor => EditorSelectableColors.Default.SettingsComponent;
private SerializedObject serializedObject { get; set; }
private SerializedProperty propertyDefaultPlayerIndex { get; set; }
private SerializedProperty propertyMultiplayerMode { get; set; }
private SerializedProperty propertyBackButtonCooldown { get; set; }
private SerializedProperty propertyBackButtonVirtualButtonName { get; set; }
private IntegerField defaultPlayerIndexIntegerField { get; set; }
private FluidToggleSwitch multiplayerModeSwitch { get; set; }
private FloatField backButtonCooldownFloatField { get; set; }
private TextField backButtonVirtualButtonNameTextField { get; set; }
private static IEnumerable<Texture2D> resetTextures => EditorSpriteSheets.EditorUI.Icons.Reset;
private FluidButton resetPlayerIndexButton { get; set; }
private FluidButton resetMultiplayerModeButton { get; set; }
private FluidButton resetBackButtonCooldownButton { get; set; }
private FluidButton saveButton { get; set; }
private FluidField playerIndexField { get; set; }
private FluidField playerMultiplayerMode { get; set; }
private FluidField playerBackButtonCooldown { get; set; }
private FluidField backButtonVirtualButtonName { get; set; }
private FluidToggleButtonTab inputSystemPackageTabButton { get; set; }
private FluidToggleButtonTab legacyInputManagerTabButton { get; set; }
private FluidToggleButtonTab customInputTabButton { get; set; }
public override void OnDestroy()
{
base.OnDestroy();
multiplayerModeSwitch?.Recycle();
playerIndexField?.Recycle();
playerMultiplayerMode?.Recycle();
playerBackButtonCooldown?.Recycle();
backButtonVirtualButtonName?.Recycle();
resetPlayerIndexButton?.Recycle();
resetBackButtonCooldownButton?.Recycle();
resetMultiplayerModeButton?.Recycle();
saveButton?.Recycle();
inputSystemPackageTabButton?.Recycle();
legacyInputManagerTabButton?.Recycle();
customInputTabButton?.Recycle();
}
public InputSettingsWindowLayout()
{
AddHeader("Input Settings", "Runtime Global Settings", animatedIconTextures);
sideMenu.Dispose(); //remove side menu
FindProperties();
Initialize();
Compose();
}
private void FindProperties()
{
serializedObject = new SerializedObject(UIManagerInputSettings.instance);
propertyDefaultPlayerIndex = serializedObject.FindProperty("DefaultPlayerIndex");
propertyMultiplayerMode = serializedObject.FindProperty("MultiplayerMode");
propertyBackButtonCooldown = serializedObject.FindProperty("BackButtonCooldown");
propertyBackButtonVirtualButtonName = serializedObject.FindProperty("BackButtonVirtualButtonName");
}
private void Initialize()
{
defaultPlayerIndexIntegerField =
DesignUtils.NewIntegerField(propertyDefaultPlayerIndex)
.SetTooltip("Default player index value (used for global user)")
.SetStyleWidth(60);
multiplayerModeSwitch =
FluidToggleSwitch.Get()
.SetTooltip("True if Multiplayer Mode is enabled")
.SetToggleAccentColor(selectableAccentColor)
.BindToProperty(propertyMultiplayerMode);
backButtonCooldownFloatField =
DesignUtils.NewFloatField(propertyBackButtonCooldown)
.SetTooltip("Cooldown after the 'Back' button was fired (to prevent spamming and accidental double execution)")
.SetStyleWidth(60);
resetPlayerIndexButton =
DesignUtils.SystemButton(resetTextures)
.SetTooltip("Reset")
.SetOnClick(() =>
{
propertyDefaultPlayerIndex.intValue = -UIManagerInputSettings.k_LifeTheUniverseAndEverything;
serializedObject.ApplyModifiedProperties();
});
resetMultiplayerModeButton =
DesignUtils.SystemButton(resetTextures)
.SetTooltip("Reset")
.SetOnClick(() =>
{
propertyMultiplayerMode.boolValue = false;
serializedObject.ApplyModifiedProperties();
});
resetBackButtonCooldownButton =
DesignUtils.SystemButton(resetTextures)
.SetTooltip("Reset")
.SetOnClick(() =>
{
propertyBackButtonCooldown.floatValue = UIManagerInputSettings.k_BackButtonCooldown;
serializedObject.ApplyModifiedProperties();
});
playerIndexField =
FluidField.Get()
.SetStyleFlexGrow(0)
.SetElementSize(ElementSize.Normal)
.SetLabelText("Default Player Index")
.AddFieldContent
(
DesignUtils.row
.AddFlexibleSpace()
.AddChild(defaultPlayerIndexIntegerField.DisableElement())
.AddSpaceBlock()
.AddChild(resetPlayerIndexButton)
);
playerMultiplayerMode =
FluidField.Get()
.SetStyleFlexGrow(0)
.SetElementSize(ElementSize.Normal)
.SetLabelText("Multiplayer Mode")
.AddFieldContent
(
DesignUtils.row
.AddFlexibleSpace()
.AddChild(multiplayerModeSwitch)
.AddSpaceBlock()
.AddChild(resetMultiplayerModeButton)
);
playerBackButtonCooldown =
FluidField.Get()
.SetStyleFlexGrow(0)
.SetElementSize(ElementSize.Normal)
.SetLabelText("'Back' button cooldown")
.AddFieldContent
(
DesignUtils.row
.AddFlexibleSpace()
.AddChild(backButtonCooldownFloatField)
.AddSpaceBlock()
.AddChild(resetBackButtonCooldownButton)
);
saveButton =
FluidButton.Get()
.SetButtonStyle(ButtonStyle.Contained)
.SetElementSize(ElementSize.Small)
.SetLabelText("Save")
.SetIcon(EditorSpriteSheets.EditorUI.Icons.Save)
.SetOnClick(() =>
{
EditorUtility.SetDirty(UIManagerInputSettings.instance);
AssetDatabase.SaveAssets();
});
backButtonVirtualButtonNameTextField =
DesignUtils.NewTextField(propertyBackButtonVirtualButtonName)
.SetTooltip("Name of the virtual button that will be used as 'Back' button")
.SetStyleWidth(120);
backButtonVirtualButtonName =
FluidField.Get()
.SetStyleFlexGrow(0)
.SetElementSize(ElementSize.Normal)
.SetLabelText("'Back' button virtual button name")
.AddFieldContent
(
DesignUtils.row
.AddFlexibleSpace()
.AddChild(backButtonVirtualButtonNameTextField)
);
FluidToggleButtonTab GetTab() =>
FluidToggleButtonTab.Get()
.SetToggleAccentColor(selectableAccentColor)
.SetContainerColorOff(DesignUtils.tabButtonColorOff);
inputSystemPackageTabButton =
GetTab()
.SetLabelText($"{ObjectNames.NicifyVariableName(InputHandling.InputSystemPackage.ToString())}")
.SetTabPosition(TabPosition.TabOnLeft)
.SetOnClick(() =>
{
DefineSymbolsUtils.RemoveGlobalDefine("LEGACY_INPUT_MANAGER");
DefineSymbolsUtils.AddGlobalDefine("INPUT_SYSTEM_PACKAGE");
legacyInputManagerTabButton.isOn = false;
customInputTabButton.isOn = false;
});
legacyInputManagerTabButton =
GetTab()
.SetLabelText($"{ObjectNames.NicifyVariableName(InputHandling.LegacyInputManager.ToString())}")
.SetTabPosition(TabPosition.TabInCenter)
.SetOnClick(() =>
{
DefineSymbolsUtils.RemoveGlobalDefine("INPUT_SYSTEM_PACKAGE");
DefineSymbolsUtils.AddGlobalDefine("LEGACY_INPUT_MANAGER");
inputSystemPackageTabButton.isOn = false;
customInputTabButton.isOn = false;
});
customInputTabButton =
GetTab()
.SetLabelText($"{ObjectNames.NicifyVariableName(InputHandling.CustomInput.ToString())}")
.SetTabPosition(TabPosition.TabOnRight)
.SetOnClick(() =>
{
DefineSymbolsUtils.RemoveGlobalDefine("INPUT_SYSTEM_PACKAGE");
DefineSymbolsUtils.RemoveGlobalDefine("LEGACY_INPUT_MANAGER");
inputSystemPackageTabButton.isOn = false;
legacyInputManagerTabButton.isOn = false;
});
inputSystemPackageTabButton.isOn = UIManagerInputSettings.k_InputHandling == InputHandling.InputSystemPackage;
legacyInputManagerTabButton.isOn = UIManagerInputSettings.k_InputHandling == InputHandling.LegacyInputManager;
customInputTabButton.isOn = UIManagerInputSettings.k_InputHandling == InputHandling.CustomInput;
content.Bind(serializedObject);
}
private void Compose()
{
content
.AddChild
(
DesignUtils.row
.SetStyleFlexGrow(0)
.AddFlexibleSpace()
.AddChild(inputSystemPackageTabButton)
.AddSpace(1, 1)
.AddChild(legacyInputManagerTabButton)
.AddSpace(1, 1)
.AddChild(customInputTabButton)
.AddFlexibleSpace()
)
.AddSpaceBlock(4)
.AddChild(playerIndexField)
.AddSpaceBlock()
.AddChild(playerMultiplayerMode)
.AddSpaceBlock(2)
.AddChild(playerBackButtonCooldown)
.AddSpaceBlock(2);
#if LEGACY_INPUT_MANAGER
content.AddChild(backButtonVirtualButtonName)
.AddSpaceBlock(2);
#endif
content.AddChild
(
DesignUtils.row
.SetStyleFlexGrow(0)
.AddFlexibleSpace()
.AddChild(saveButton)
);
}
}
}