添加了多种对程序流程控制与保全的脚本,而且现在可以更快速的构建一个具有线性关系的协程了。 添加了一个支持多种模式的单维梯度控制器,类似unity的颜色梯度类型。 添加了一个用于看向某个物体的旋转控制器。 添加了一个加载宏。 完善了批处理脚本流程。
142 lines
2.4 KiB
C#
142 lines
2.4 KiB
C#
using System;
|
|
using System.Collections;
|
|
using System.Collections.Generic;
|
|
using System.Linq;
|
|
|
|
using UnityEngine;
|
|
|
|
using XericLibrary.Runtime.Type;
|
|
|
|
namespace XericLibrary.Runtime.Security
|
|
{
|
|
/// <summary>
|
|
/// 程序流程保全
|
|
/// </summary>
|
|
public class ProgramFlowSecurityExtend : WeaklyObject
|
|
{
|
|
#region 字段属性
|
|
|
|
/// <summary>
|
|
/// 可扩展事件
|
|
/// </summary>
|
|
public event Action ExtensibleDelegation
|
|
{
|
|
add
|
|
{
|
|
if(!DelegateContains(value))
|
|
DelegateAdd(value);
|
|
}
|
|
remove
|
|
{
|
|
DelegateRemove(value);
|
|
}
|
|
}
|
|
|
|
/// <summary>
|
|
/// 事件列表
|
|
/// </summary>
|
|
private List<DelegateExtensibleFlag> delegateList;
|
|
|
|
#endregion
|
|
|
|
#region 类内类
|
|
|
|
/// <summary>
|
|
/// 事件扩展标识
|
|
/// </summary>
|
|
public class DelegateExtensibleFlag
|
|
{
|
|
/// <summary>
|
|
/// 事件
|
|
/// </summary>
|
|
public Action Event;
|
|
/// <summary>
|
|
/// 单步执行
|
|
/// </summary>
|
|
public bool Doonce;
|
|
/// <summary>
|
|
/// 调用保护
|
|
/// </summary>
|
|
public bool Conservate;
|
|
|
|
public DelegateExtensibleFlag(Action action, bool doonce = false)
|
|
{
|
|
this.Event = action;
|
|
this.Doonce = doonce;
|
|
this.Conservate = false;
|
|
}
|
|
|
|
public override bool Equals(object obj)
|
|
{
|
|
if(obj is DelegateExtensibleFlag def)
|
|
return def.Event == this.Event;
|
|
|
|
return false;
|
|
}
|
|
|
|
public override int GetHashCode()
|
|
{
|
|
return Event.GetHashCode();
|
|
}
|
|
}
|
|
|
|
public DelegateExtensibleFlag DelegateFind(Action action)
|
|
{
|
|
return delegateList
|
|
.Where(a => a.Event == action)
|
|
.FirstOrDefault();
|
|
}
|
|
|
|
public bool DelegateContains(Action action)
|
|
{
|
|
return DelegateFind(action) == null;
|
|
}
|
|
|
|
public void DelegateAdd(Action action, bool doonce = false)
|
|
{
|
|
delegateList.Add(new DelegateExtensibleFlag(action, doonce));
|
|
}
|
|
|
|
public bool DelegateRemove(Action action)
|
|
{
|
|
return delegateList.Remove(new DelegateExtensibleFlag(action));
|
|
}
|
|
|
|
#endregion
|
|
|
|
#region 构造
|
|
|
|
public ProgramFlowSecurityExtend()
|
|
{
|
|
|
|
}
|
|
|
|
#endregion
|
|
|
|
#region 主要流程
|
|
|
|
/// <summary>
|
|
/// 调用所有的已注册扩展事件,注意:这会比使用繁琐的外部方法更慢。
|
|
/// </summary>
|
|
public void InvokedAllDelegate()
|
|
{
|
|
for(int i = 0; i < delegateList.Count; i++)
|
|
{
|
|
if(delegateList[i].Conservate)
|
|
continue;
|
|
|
|
try
|
|
{
|
|
delegateList[i].Event.Invoke();
|
|
}
|
|
catch(Exception e)
|
|
{
|
|
delegateList[i].Conservate = true;
|
|
Debug.LogError(e);
|
|
}
|
|
}
|
|
}
|
|
|
|
#endregion
|
|
}
|
|
} |