using System.Collections; using System.Collections.Generic; using UnityEngine; using QFramework; using System; using UnityEngine.Playables; public class TimeLineAction : IAction { public ulong ActionID { get; set; } public bool Deinited { get; set; } public bool Paused { get; set; } public ActionStatus Status { get; set; } private static readonly SimpleObjectPool mPool = new SimpleObjectPool(() => new TimeLineAction(), null, 10); string path; string isShow = string.Empty; string deviceName = string.Empty; string finishedEvent = string.Empty; string isWait = "true"; GameObject obj = null; public static TimeLineAction Allocate(string path, Dictionary datas, System.Action onDelayFinish = null) { var retNode = mPool.Allocate(); retNode.ActionID = ActionKit.ID_GENERATOR++; retNode.Deinited = false; retNode.Reset(); retNode.path = path; retNode.isShow = datas.ContainsKey("isShow") ? datas["isShow"] : string.Empty; retNode.deviceName = datas.ContainsKey("deviceName") ? datas["deviceName"] : string.Empty; retNode.finishedEvent = datas.ContainsKey("finishedEvent") ? datas["finishedEvent"] : string.Empty; retNode.isWait = datas.ContainsKey("isWait") ? datas["isWait"] : "true"; return retNode; } public void Deinit() { if (!Deinited) { Deinited = true; mPool.Recycle(this); } } public void OnExecute(float dt) { if (obj.GetComponent().state != PlayState.Playing) { Finished(); } } public void OnFinish() { } public void OnStart() { if (string.IsNullOrEmpty(deviceName) == false) { obj = DeviceController.Instance.GetDeviceObj(deviceName); } else { obj = Utility.FindObj(path); } if (obj == null) { Debug.LogError("没有找到物体 :" + path); } else { bool isActive = true; bool.TryParse(isShow, out isActive); if (isActive) { obj.GetComponent().Play(); bool iswait = true; bool.TryParse(isWait, out iswait); if (iswait == false) { Finished(); } } else { obj.GetComponent().Stop(); } } } public void Finished() { this.Finish(); if (string.IsNullOrEmpty(finishedEvent) == false) { StringEventSystem.Global.Send(finishedEvent); } } public void Reset() { Status = ActionStatus.NotStart; Paused = false; } }