This commit is contained in:
parent
d8b8ddb8b6
commit
2d8978e694
|
@ -836,6 +836,24 @@
|
||||||
"processors": "",
|
"processors": "",
|
||||||
"interactions": "",
|
"interactions": "",
|
||||||
"initialStateCheck": true
|
"initialStateCheck": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Chat",
|
||||||
|
"type": "Button",
|
||||||
|
"id": "346fc321-a6f0-4d95-81d1-bc531ed3ed28",
|
||||||
|
"expectedControlType": "",
|
||||||
|
"processors": "",
|
||||||
|
"interactions": "",
|
||||||
|
"initialStateCheck": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Confirm",
|
||||||
|
"type": "Button",
|
||||||
|
"id": "0c71f40f-c39e-4893-b4d7-2c1968a9730d",
|
||||||
|
"expectedControlType": "",
|
||||||
|
"processors": "",
|
||||||
|
"interactions": "",
|
||||||
|
"initialStateCheck": false
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"bindings": [
|
"bindings": [
|
||||||
|
@ -1146,6 +1164,39 @@
|
||||||
"action": "Delta",
|
"action": "Delta",
|
||||||
"isComposite": false,
|
"isComposite": false,
|
||||||
"isPartOfComposite": false
|
"isPartOfComposite": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "",
|
||||||
|
"id": "4f11c618-09f3-4ace-8f9f-efd7821ebe37",
|
||||||
|
"path": "<Keyboard>/enter",
|
||||||
|
"interactions": "",
|
||||||
|
"processors": "",
|
||||||
|
"groups": "",
|
||||||
|
"action": "Chat",
|
||||||
|
"isComposite": false,
|
||||||
|
"isPartOfComposite": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "",
|
||||||
|
"id": "265f9627-ae29-4f03-80b9-80a64c28a9bf",
|
||||||
|
"path": "<Keyboard>/enter",
|
||||||
|
"interactions": "",
|
||||||
|
"processors": "",
|
||||||
|
"groups": "",
|
||||||
|
"action": "Confirm",
|
||||||
|
"isComposite": false,
|
||||||
|
"isPartOfComposite": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "",
|
||||||
|
"id": "97306299-e0e4-4e18-805b-51a1674b037d",
|
||||||
|
"path": "<Keyboard>/space",
|
||||||
|
"interactions": "",
|
||||||
|
"processors": "",
|
||||||
|
"groups": "",
|
||||||
|
"action": "Confirm",
|
||||||
|
"isComposite": false,
|
||||||
|
"isPartOfComposite": false
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
|
|
|
@ -8,20 +8,31 @@ using System.Linq;
|
||||||
|
|
||||||
namespace BITKit
|
namespace BITKit
|
||||||
{
|
{
|
||||||
[System.Serializable]
|
[Serializable]
|
||||||
public class InputActionGroup : IDisposable
|
public class InputActionGroup : IDisposable
|
||||||
{
|
{
|
||||||
public override string ToString()
|
private class InputActionProxy
|
||||||
{
|
{
|
||||||
return $"Source:{Source}\nEnabled:{isEnabled}\nInitialized:{state}\nKeys:{string.Join("\n",actions.Keys)}";
|
public event Action<InputAction.CallbackContext> Callback;
|
||||||
|
public void Invoke(InputAction.CallbackContext context)
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
Callback?.Invoke(context);
|
||||||
}
|
}
|
||||||
public string Source;
|
catch (OperationCanceledException)
|
||||||
private int lockFile = Guid.NewGuid().GetHashCode();
|
{
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private int _lockFile = Guid.NewGuid().GetHashCode();
|
||||||
public bool allowGlobalActivation = true;
|
public bool allowGlobalActivation = true;
|
||||||
[SerializeField, ReadOnly] private bool isEnabled;
|
[SerializeField, ReadOnly] private bool isEnabled;
|
||||||
private InitializationState state = InitializationState.None;
|
private InitializationState _state = InitializationState.None;
|
||||||
public readonly ValidHandle allowInput = new();
|
public readonly ValidHandle allowInput = new();
|
||||||
private readonly ConcurrentDictionary<string,InputAction> actions = new();
|
private readonly ConcurrentDictionary<string,InputAction> _actions = new();
|
||||||
|
private readonly ConcurrentDictionary<int, InputActionProxy> _callbacks = new();
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 注册所有(started,performed,canceled)回调
|
/// 注册所有(started,performed,canceled)回调
|
||||||
|
@ -33,20 +44,14 @@ namespace BITKit
|
||||||
Action<InputAction.CallbackContext> callback)
|
Action<InputAction.CallbackContext> callback)
|
||||||
{
|
{
|
||||||
var action = EnsureCreated(reference);
|
var action = EnsureCreated(reference);
|
||||||
action.RegisterCallback(callback);
|
_callbacks[action.GetHashCode()].Callback += callback;
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
public InputActionGroup RegisterCallback(InputAction inputAction,Action<InputAction.CallbackContext> callback)
|
public InputActionGroup RegisterCallback(InputAction inputAction,Action<InputAction.CallbackContext> callback)
|
||||||
{
|
{
|
||||||
EnsureConfiguration();
|
var action = EnsureCreated(inputAction);
|
||||||
|
_callbacks[action.GetHashCode()].Callback += callback;
|
||||||
var action = actions.GetOrAdd(inputAction.name, _=>inputAction.Clone());
|
|
||||||
|
|
||||||
allowInput.Invoke();
|
|
||||||
|
|
||||||
action.RegisterCallback(callback);
|
|
||||||
|
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -59,10 +64,16 @@ namespace BITKit
|
||||||
}
|
}
|
||||||
|
|
||||||
EnsureConfiguration();
|
EnsureConfiguration();
|
||||||
var action = actions.GetOrAdd(reference.name, _ =>
|
var action = _actions.GetOrAdd(reference.name, _ =>
|
||||||
{
|
{
|
||||||
var newAction = reference.action.Clone();
|
var newAction = reference.action.Clone();
|
||||||
newAction.Rename(reference.name);
|
newAction.Rename(reference.name);
|
||||||
|
|
||||||
|
var callback = _callbacks[newAction.GetHashCode()] = new();
|
||||||
|
newAction.performed += callback.Invoke;
|
||||||
|
newAction.canceled+=callback.Invoke;
|
||||||
|
newAction.started+=callback.Invoke;
|
||||||
|
|
||||||
return newAction;
|
return newAction;
|
||||||
});
|
});
|
||||||
|
|
||||||
|
@ -73,10 +84,16 @@ namespace BITKit
|
||||||
public InputAction EnsureCreated(InputAction inputAction)
|
public InputAction EnsureCreated(InputAction inputAction)
|
||||||
{
|
{
|
||||||
EnsureConfiguration();
|
EnsureConfiguration();
|
||||||
var action = actions.GetOrAdd(inputAction.name, _ =>
|
var action = _actions.GetOrAdd(inputAction.name, _ =>
|
||||||
{
|
{
|
||||||
var newAction = inputAction.Clone();
|
var newAction = inputAction.Clone();
|
||||||
newAction.Rename(inputAction.name);
|
newAction.Rename(inputAction.name);
|
||||||
|
|
||||||
|
var callback = _callbacks[newAction.GetHashCode()] = new();
|
||||||
|
newAction.performed += callback.Invoke;
|
||||||
|
newAction.canceled+=callback.Invoke;
|
||||||
|
newAction.started+=callback.Invoke;
|
||||||
|
|
||||||
return newAction;
|
return newAction;
|
||||||
});
|
});
|
||||||
|
|
||||||
|
@ -91,34 +108,38 @@ namespace BITKit
|
||||||
}
|
}
|
||||||
public InputAction GetAction(string name)
|
public InputAction GetAction(string name)
|
||||||
{
|
{
|
||||||
if(actions.TryGetValue(name,out var action))
|
if(_actions.TryGetValue(name,out var action))
|
||||||
return action;
|
return action;
|
||||||
throw new ArgumentException($"未知的引用{name}");
|
throw new ArgumentException($"未知的引用{name}");
|
||||||
}
|
}
|
||||||
public InputAction GetAction(InputActionReference reference)
|
public InputAction GetAction(InputActionReference reference)
|
||||||
{
|
{
|
||||||
if(actions.TryGetValue(reference.name,out var action))
|
if(_actions.TryGetValue(reference.name,out var action))
|
||||||
return action;
|
return action;
|
||||||
throw new ArgumentException($"未知的引用{reference.name}");
|
throw new ArgumentException($"未知的引用{reference.name}");
|
||||||
}
|
}
|
||||||
public void UnRegisterCallback(InputActionReference reference, Action<InputAction.CallbackContext> callback)
|
public void UnRegisterCallback(InputActionReference reference, Action<InputAction.CallbackContext> callback)
|
||||||
{
|
{
|
||||||
if(actions.TryGetValue(reference.name,out var action))
|
if (_actions.TryGetValue(reference.name, out var action))
|
||||||
action.UnRegisterCallback(callback);
|
{
|
||||||
|
_callbacks[action.GetHashCode()].Callback -= callback;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void UnRegisterCallback(InputAction inputAction, Action<InputAction.CallbackContext> callback)
|
public void UnRegisterCallback(InputAction inputAction, Action<InputAction.CallbackContext> callback)
|
||||||
{
|
{
|
||||||
if(actions.TryGetValue(inputAction.name,out var action))
|
if (_actions.TryGetValue(inputAction.name, out var action))
|
||||||
action.UnRegisterCallback(callback);
|
{
|
||||||
|
_callbacks[action.GetHashCode()].Callback -= callback;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void EnsureConfiguration()
|
private void EnsureConfiguration()
|
||||||
{
|
{
|
||||||
if (state is not InitializationState.Initialized)
|
if (_state is not InitializationState.Initialized)
|
||||||
{
|
{
|
||||||
Init();
|
Init();
|
||||||
state = InitializationState.Initialized;
|
_state = InitializationState.Initialized;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -131,12 +152,12 @@ namespace BITKit
|
||||||
|
|
||||||
private void ListenGlobalInput(bool allowInput)
|
private void ListenGlobalInput(bool allowInput)
|
||||||
{
|
{
|
||||||
this.allowInput.SetDisableElements(lockFile, !allowInput);
|
this.allowInput.SetDisableElements(_lockFile, !allowInput);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void AllowInput(bool allow)
|
private void AllowInput(bool allow)
|
||||||
{
|
{
|
||||||
foreach (var action in actions.Values)
|
foreach (var action in _actions.Values)
|
||||||
{
|
{
|
||||||
if (allow)
|
if (allow)
|
||||||
{
|
{
|
||||||
|
@ -151,12 +172,12 @@ namespace BITKit
|
||||||
}
|
}
|
||||||
public void Dispose()
|
public void Dispose()
|
||||||
{
|
{
|
||||||
foreach (var action in actions.Values)
|
foreach (var action in _actions.Values)
|
||||||
{
|
{
|
||||||
action.Disable();
|
action.Disable();
|
||||||
action.Dispose();
|
action.Dispose();
|
||||||
}
|
}
|
||||||
actions.Clear();
|
_actions.Clear();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
|
@ -124,11 +124,9 @@ namespace BITKit.UX
|
||||||
{
|
{
|
||||||
//WaitUtilTransitionCompleted = new();
|
//WaitUtilTransitionCompleted = new();
|
||||||
}
|
}
|
||||||
|
public readonly InputActionGroup InputActionGroup = new()
|
||||||
protected readonly InputActionGroup InputActionGroup = new()
|
|
||||||
{
|
{
|
||||||
allowGlobalActivation = false,
|
allowGlobalActivation = false,
|
||||||
Source = nameof(UIToolKitPanel)
|
|
||||||
};
|
};
|
||||||
public virtual bool CloseWhenClickOutside { get;}
|
public virtual bool CloseWhenClickOutside { get;}
|
||||||
public virtual bool IsWindow { get; }
|
public virtual bool IsWindow { get; }
|
||||||
|
|
|
@ -679,7 +679,7 @@ namespace BITKit
|
||||||
self.schedule.Execute(() =>
|
self.schedule.Execute(() =>
|
||||||
{
|
{
|
||||||
self.scrollOffset = new Vector2(0, float.MaxValue);
|
self.scrollOffset = new Vector2(0, float.MaxValue);
|
||||||
});
|
}).ExecuteLater(1);;
|
||||||
}
|
}
|
||||||
public static void ScrollToBottomAutomatic(this ScrollView self, float delay = 0.02f)
|
public static void ScrollToBottomAutomatic(this ScrollView self, float delay = 0.02f)
|
||||||
{
|
{
|
||||||
|
@ -707,7 +707,8 @@ namespace BITKit
|
||||||
|
|
||||||
public static Vector2 GetScreenPosition(this VisualElement self, Vector3 worldPosition)
|
public static Vector2 GetScreenPosition(this VisualElement self, Vector3 worldPosition)
|
||||||
{
|
{
|
||||||
var panel = (self.panel ?? self.parent.panel) ?? self.parent.parent.panel;
|
var panel = self.panel;
|
||||||
|
if (panel is null) return default;
|
||||||
|
|
||||||
var pos = RuntimePanelUtils
|
var pos = RuntimePanelUtils
|
||||||
.CameraTransformWorldToPanel(panel, worldPosition, Camera);
|
.CameraTransformWorldToPanel(panel, worldPosition, Camera);
|
||||||
|
|
|
@ -7,7 +7,7 @@ ScrollView {
|
||||||
--unity-metrics-single_line-height: 500px;
|
--unity-metrics-single_line-height: 500px;
|
||||||
}
|
}
|
||||||
|
|
||||||
ScrollView Scroller.unity-scroller{
|
ScrollView Scroller.unity-scroller {
|
||||||
width: 8;
|
width: 8;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -653,3 +653,8 @@ OnScreenButton.selected {
|
||||||
transform-origin: left top;
|
transform-origin: left top;
|
||||||
scale: 0.8 0.8;
|
scale: 0.8 0.8;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.text-overflow-warp-normal .unity-text-element {
|
||||||
|
overflow: hidden;
|
||||||
|
white-space: normal;
|
||||||
|
}
|
||||||
|
|
|
@ -53,6 +53,10 @@ Slider.material {
|
||||||
min-width: 128px;
|
min-width: 128px;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.material .selected Button {
|
||||||
|
background-color: rgba(26, 115, 232, 0.25);
|
||||||
|
}
|
||||||
|
|
||||||
.material Button:hover {
|
.material Button:hover {
|
||||||
background-color: rgba(26, 115, 232, 0.25);
|
background-color: rgba(26, 115, 232, 0.25);
|
||||||
transition-duration: 0.32s;
|
transition-duration: 0.32s;
|
||||||
|
|
Loading…
Reference in New Issue