1
This commit is contained in:
@@ -4,21 +4,52 @@ using System.Collections.Generic;
|
||||
using UnityEngine;
|
||||
namespace BITKit.Entities
|
||||
{
|
||||
|
||||
public interface IEntityOverride
|
||||
{
|
||||
/// <summary>
|
||||
/// 是否正在被覆盖
|
||||
/// </summary>
|
||||
bool IsOvering { get; }
|
||||
void AddOverride(object key);
|
||||
void RemoveOverride(object key);
|
||||
/// <summary>
|
||||
/// 当前对象,用于判断是否是自己的覆盖
|
||||
/// </summary>
|
||||
object CurrentObject { get; }
|
||||
/// <summary>
|
||||
/// 当开始覆盖或者结束覆盖时触发
|
||||
/// </summary>
|
||||
event Action<bool> OnOverride;
|
||||
/// <summary>
|
||||
/// 添加覆盖
|
||||
/// </summary>
|
||||
void AddOverride(object key,int priority=0);
|
||||
/// <summary>
|
||||
/// 移除覆盖
|
||||
/// </summary>
|
||||
void RemoveOverride(object key,int priority=0);
|
||||
|
||||
}
|
||||
[CustomType(typeof(IEntityOverride))]
|
||||
public class EntityOverride : EntityBehavior,IEntityOverride
|
||||
{
|
||||
[SerializeField,ReadOnly] private bool isOvering;
|
||||
[SerializeField, ReadOnly(HideLabel = true)] private string overrideKeys;
|
||||
public bool IsOvering => _allowOverrideHandle;
|
||||
public object CurrentObject => _prioritySelector.Current;
|
||||
private readonly ValidHandle _allowOverrideHandle = new();
|
||||
public void AddOverride(object key) => _allowOverrideHandle.AddElement(key);
|
||||
public void RemoveOverride(object key)=>_allowOverrideHandle.RemoveElement(key);
|
||||
|
||||
private readonly PrioritySelector<object> _prioritySelector = new();
|
||||
public void AddOverride(object key,int priority=0)
|
||||
{
|
||||
_prioritySelector.Set(priority,key);
|
||||
_allowOverrideHandle.AddElement(key);
|
||||
}
|
||||
public void RemoveOverride(object key,int priority=0)
|
||||
{
|
||||
_prioritySelector.Remove(priority);
|
||||
_allowOverrideHandle.RemoveElement(key);
|
||||
}
|
||||
|
||||
public event Action<bool> OnOverride;
|
||||
|
||||
public override void Initialize(IEntity entity)
|
||||
@@ -35,6 +66,7 @@ namespace BITKit.Entities
|
||||
{
|
||||
OnOverride?.Invoke(@override);
|
||||
isOvering=@override;
|
||||
overrideKeys = _allowOverrideHandle.ToString();
|
||||
}
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user