using System.Collections.Generic; using System.Linq; using IwbZero.IwbId; using WeEngine.Enum; namespace WeEngine { /// /// 方案包运行态 /// public class RuntimePackage:IIwbId { public Package PackageInfo { get; set; } public string Id { get; set; } #region CurrentInfo public int CurRoundIndex => CurRoundInfo.RoundIndex; public SceneRound CurRoundInfo => GetCurrentRoundInfo(); public List CurSceneFlowBlocks => GetCurrentFlowBlocks(); public List CurSceneFlows => GetCurrentFlows(); public List CurSceneFloors => GetCurrentFloors(); public List CurSceneInfos => GetCurrentSceneInfos(); public List CurBehaviorInfos => GetCurrentBehaviors(); public List CurKeyWords => GetCurrentKeyWords(); private SceneRound GetCurrentRoundInfo() { return (SceneRound)PackageInfo.Children.FirstOrDefault(a => a.NodeState == NodeState.Running); } private List GetCurrentFlowBlocks() { var list = new List(); var children = CurRoundInfo.HasChild ? CurRoundInfo.Children.Where(a => a.NodeState == NodeState.Running).Select(a => (SceneFlowBlock)a).ToList() : new List(); list.AddRange(children); return list; } private List GetCurrentFlows() { var list = new List(); foreach (var cur in CurSceneFlowBlocks) { var children = cur.HasChild ? cur.Children.Where(a => a.NodeState == NodeState.Running).Select(a => (SceneFlow)a).ToList() : new List(); list.AddRange(children); } return list; } private List GetCurrentFloors() { var list = new List(); foreach (var cur in CurSceneFlows) { var children = cur.HasChild ? cur.Children.Where(a => a.NodeState == NodeState.Running).Select(a => (SceneFloor)a).ToList() : new List(); list.AddRange(children); } return list; } private List GetCurrentSceneInfos() { var list = new List(); foreach (var cur in CurSceneFloors) { var sceneNode = cur.Children.FirstOrDefault(a => a.NodeState == NodeState.Running); var children = sceneNode?.HasChild == true ? sceneNode.Children.Where(a => a.NodeState == NodeState.Running).Select(a => (SceneInfo)a) .ToList() : new List(); list.AddRange(children); } return list; } private List GetCurrentBehaviors() { var list = new List(); foreach (var cur in CurSceneInfos) { var children = cur.HasChild ? cur.Children.Where(a => a.NodeState == NodeState.Running).Select(a => (BehaviorInfo)a).ToList() : new List(); list.AddRange(children); } return list; } private List GetCurrentKeyWords() { var list = new List(); foreach (var cur in CurBehaviorInfos) { var children = cur.HasChild ? cur.Children.Where(a => a.NodeState == NodeState.Running).Select(a => (KeyWord)a).ToList() : new List(); list.AddRange(children); } return list; } #endregion } }