2023-06-29 14:57:11 +08:00
|
|
|
using System;
|
|
|
|
using System.Collections;
|
|
|
|
using System.Collections.Generic;
|
|
|
|
using UnityEngine;
|
|
|
|
namespace BITKit.Entities
|
|
|
|
{
|
2024-03-31 23:31:00 +08:00
|
|
|
|
2023-06-29 14:57:11 +08:00
|
|
|
public interface IEntityOverride
|
|
|
|
{
|
2024-03-31 23:31:00 +08:00
|
|
|
/// <summary>
|
|
|
|
/// 是否正在被覆盖
|
|
|
|
/// </summary>
|
2023-06-29 14:57:11 +08:00
|
|
|
bool IsOvering { get; }
|
2024-03-31 23:31:00 +08:00
|
|
|
/// <summary>
|
|
|
|
/// 当前对象,用于判断是否是自己的覆盖
|
|
|
|
/// </summary>
|
|
|
|
object CurrentObject { get; }
|
|
|
|
/// <summary>
|
|
|
|
/// 当开始覆盖或者结束覆盖时触发
|
|
|
|
/// </summary>
|
2023-10-24 23:38:22 +08:00
|
|
|
event Action<bool> OnOverride;
|
2024-03-31 23:31:00 +08:00
|
|
|
/// <summary>
|
|
|
|
/// 添加覆盖
|
|
|
|
/// </summary>
|
|
|
|
void AddOverride(object key,int priority=0);
|
|
|
|
/// <summary>
|
|
|
|
/// 移除覆盖
|
|
|
|
/// </summary>
|
|
|
|
void RemoveOverride(object key,int priority=0);
|
|
|
|
|
2023-06-29 14:57:11 +08:00
|
|
|
}
|
2023-10-24 23:38:22 +08:00
|
|
|
[CustomType(typeof(IEntityOverride))]
|
2023-11-06 01:17:23 +08:00
|
|
|
public class EntityOverride : EntityBehavior,IEntityOverride
|
2023-06-29 14:57:11 +08:00
|
|
|
{
|
2023-10-24 23:38:22 +08:00
|
|
|
[SerializeField,ReadOnly] private bool isOvering;
|
2024-03-31 23:31:00 +08:00
|
|
|
[SerializeField, ReadOnly(HideLabel = true)] private string overrideKeys;
|
2023-06-29 14:57:11 +08:00
|
|
|
public bool IsOvering => _allowOverrideHandle;
|
2024-03-31 23:31:00 +08:00
|
|
|
public object CurrentObject => _prioritySelector.Current;
|
2023-06-29 14:57:11 +08:00
|
|
|
private readonly ValidHandle _allowOverrideHandle = new();
|
2024-03-31 23:31:00 +08:00
|
|
|
|
|
|
|
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);
|
|
|
|
}
|
|
|
|
|
2023-10-24 23:38:22 +08:00
|
|
|
public event Action<bool> OnOverride;
|
|
|
|
|
2023-11-06 01:17:23 +08:00
|
|
|
public override void Initialize(IEntity entity)
|
2023-06-29 14:57:11 +08:00
|
|
|
{
|
2023-11-06 01:17:23 +08:00
|
|
|
base.Initialize(entity);
|
|
|
|
UnityEntity.Set<IEntityOverride>(this);
|
2023-06-29 14:57:11 +08:00
|
|
|
}
|
|
|
|
public override void OnAwake()
|
|
|
|
{
|
|
|
|
_allowOverrideHandle.AddListener(Override);
|
|
|
|
_allowOverrideHandle.Invoke();
|
|
|
|
}
|
|
|
|
private void Override(bool @override)
|
|
|
|
{
|
2023-10-24 23:38:22 +08:00
|
|
|
OnOverride?.Invoke(@override);
|
|
|
|
isOvering=@override;
|
2024-03-31 23:31:00 +08:00
|
|
|
overrideKeys = _allowOverrideHandle.ToString();
|
2023-06-29 14:57:11 +08:00
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|