Files
Fishing2/Assets/Scripts/UI/Settings/SettingWaitInputPanel.cs
2026-02-20 21:03:17 +08:00

108 lines
2.9 KiB
C#

// 本脚本只在不存在时会生成一次。已存在不会再次生成覆盖
using UnityEngine;
using NBC;
using NBF.Setting;
using UnityEngine.InputSystem;
namespace NBF
{
public partial class SettingWaitInputPanel : UIPanel
{
private SettingItem _settingItem;
private InputOption _inputOption;
private InputActionRebindingExtensions.RebindingOperation rebindingOperation;
private int _time;
protected override void OnInit()
{
IsModal = true;
BtnCancel.onClick.Set(Hide);
}
protected override void OnShow()
{
_time = 5;
Timer.Loop(1, this, OnTimer);
TextTime.text = _time.ToString();
_settingItem = GetData() as SettingItem;
if (_settingItem == null)
{
Hide();
return;
}
if (_settingItem.Option is InputOption inputOption)
{
_inputOption = inputOption;
OnRebinding();
}
}
private void OnTimer()
{
_time--;
TextTime.text = _time.ToString();
if (_time <= 0)
{
OnBack();
}
}
#region
private void OnRebinding()
{
_inputOption.InputAction.Disable();
// 开始重绑定操作
rebindingOperation = _inputOption.InputAction.PerformInteractiveRebinding(_inputOption.BindingIndex)
.OnMatchWaitForAnother(0.1f)
.WithCancelingThrough("<Keyboard>/escape")
.WithControlsExcluding("<Pointer>/press")
.WithControlsExcluding("<Mouse>/press")
.WithControlsExcluding("<Mouse>/leftButton")
.WithControlsExcluding("<Mouse>/rightButton")
.OnComplete(operation => RebindComplete())
.OnCancel(operation => OnRebindCanceled())
.Start();
}
private void RebindComplete()
{
var bindings = _inputOption.InputAction.bindings;
for (int i = 0; i < bindings.Count; i++)
{
var bin = bindings[i];
Log.Info($"RebindComplete==={bin.path}");
}
rebindingOperation.Dispose();
_inputOption.InputAction.Enable();
UpdateValueText();
}
private void OnRebindCanceled()
{
rebindingOperation.Dispose();
_inputOption.InputAction.Enable();
Hide();
}
private void UpdateValueText()
{
_settingItem.UpdateValueText();
Hide();
}
#endregion
[InputInvoke(InputDef.UI.Back)]
private void OnBack()
{
rebindingOperation.Cancel();
Hide();
Timer.ClearAll(this);
}
}
}