using System; using System.IO; using UnityEngine; using UnityEngine.EventSystems; namespace QFramework { public class StrEventCondition : ICondition { private static SimpleObjectPool mSimpleObjectPool = new SimpleObjectPool(() => new StrEventCondition(), null, 10); private StrEventCondition() { } string key; bool isFinished = false; public static StrEventCondition Allocate(string key) { var conditionAction = mSimpleObjectPool.Allocate(); conditionAction.ActionID = ActionKit.ID_GENERATOR++; conditionAction.Deinited = false; conditionAction.Reset(); conditionAction.key = key; conditionAction.isFinished = false; return conditionAction; } public bool Check() { return isFinished; } public bool Paused { get; set; } public bool Deinited { get; set; } public ulong ActionID { get; set; } public ActionStatus Status { get; set; } public void OnStart() { StringEventSystem.Global.Register(key, OnEventFnished); } private void OnEventFnished() { StringEventSystem.Global.UnRegister(key, OnEventFnished); isFinished = true; this.Finish(); } public void OnExecute(float dt) { } public void OnFinish() { } public void Deinit() { if (!Deinited) { Deinited = true; mSimpleObjectPool.Recycle(this); } } public void Reset() { Paused = false; Status = ActionStatus.NotStart; } } public static class StrEventConditionExtension { public static ISequence StrEventCondition(this ISequence self, string uipath) { return self.Append(QFramework.StrEventCondition.Allocate(uipath)); } } }