This repository has been archived on 2025-09-23. You can view files and clone it. You cannot open issues or pull requests or push a commit.
Files
XericLibrary-OLD/Runtime/Security/ProgramFlowSecurity.cs
LiRuoChen a658cc424b 添加了更多的材质函数,部分与引擎新特性重合,这是为了能够脱离引擎在多个版本中更具可移植性。
添加了多种对程序流程控制与保全的脚本,而且现在可以更快速的构建一个具有线性关系的协程了。
  添加了一个支持多种模式的单维梯度控制器,类似unity的颜色梯度类型。
  添加了一个用于看向某个物体的旋转控制器。
  添加了一个加载宏。
  完善了批处理脚本流程。
2023-11-23 11:10:40 +08:00

138 lines
2.5 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 ProgramFlowSecurity : WeaklyObject
{
#region
/// <summary>
/// 外部保护标志位
/// </summary>
private int conservativeFlag;
/// <summary>
/// 外部单步标志位
/// </summary>
private int DoOnceFlag;
#endregion
#region
public ProgramFlowSecurity()
{
conservativeFlag = 0;
DoOnceFlag = 0;
}
#endregion
#region
/// <summary>
/// 标志一段程序的开始
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="site"></param>
public void Start<T>(T site)
where T : struct, Enum
{
conservativeFlag |= Convert.ToInt32(site);
}
/// <summary>
/// 标志一段程序的结束
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="site"></param>
public void Finish<T>(T site)
where T : struct, Enum
{
conservativeFlag &= ~Convert.ToInt32(site);
}
/// <summary>
/// 尝试开始一段程序
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="site"></param>
/// <returns></returns>
public bool TryStart<T>(T site)
where T : struct, Enum
{
if(GetFlag(site))
return false;
Start(site);
return true;
}
/// <summary>
/// 开始执行一次
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="site"></param>
/// <returns></returns>
public bool DoOnceStart<T>(T site)
where T : struct, Enum
{
if(GetFlag(site))
return false;
DoOnceFlag |= Convert.ToInt32(site);
return true;
}
/// <summary>
/// 复位执行一次的标志
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="site"></param>
public void ResetDoOnce<T>(T site)
where T : struct, Enum
{
DoOnceFlag &= ~Convert.ToInt32(site);
}
/// <summary>
/// 获取一段程序的标志位
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="site"></param>
/// <returns></returns>
private bool GetFlag<T>(T site)
where T : struct, Enum
{
return (conservativeFlag & Convert.ToInt32(site)) > 0;
}
/// <summary>
/// 获取一段程序的标志位
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="site"></param>
/// <returns></returns>
private bool GetDoOnce<T>(T site)
where T : struct, Enum
{
return (DoOnceFlag & Convert.ToInt32(site)) > 0;
}
#endregion
}
}