void DoDestroyWithRecycle() { var recycleName = Popup.GetRecycleName(this.name); var recycleInstOrigin = new RecycleInstance { name = recycleName, pop = this, }; this.isRecycled = true; Popup.recycles.AddLast(recycleInstOrigin); recycleInstOrigin.waitHandle = Wait.Active(0.1f, false, (p) => { var recycleNode = Popup.FindRecycleNode(recycleName); if (null != recycleNode) { var recycleInst = recycleNode.Value; Popup.RemoveRecycleNode(recycleNode); var pop = recycleInst.pop; if (pop) { pop.DoDestroy(); } } }); }
protected void SetStateGotoNextPresentWithFO(Type nextPresentType, float delay = 0.125f, object openArg = null, Action <Action> onWait = null, Action onComplete = null, AsyncOperation preloaded = null) { this.SetState(99999); var h = Wait.Active(9999999, true, null); if (null == preloaded) { preloaded = SceneManager.LoadSceneAsync(nextPresentType.Name, LoadSceneMode.Additive); preloaded.allowSceneActivation = false; } var start = Time.time; var view = this.View; this.AddStateTask(() => { var alpha = 1 - Mathf.Clamp01((Time.time - start) / delay); view.GroupAlpha = alpha; if (0 < alpha) { return; } if (0.9f <= preloaded.progress) { Wait.Stop(h, false, true); if (null != onWait) { onWait(() => { Present.OpenNextPresent(nextPresentType, new Present.LoadRuleData(preloaded), openArg, onComplete); }); this.ClearStateTask(); } else { Present.OpenNextPresent(nextPresentType, new Present.LoadRuleData(preloaded), openArg, onComplete); } } }); }