using System; using System.Collections.Generic; using System.Linq; using System.Xml; using IwbZero.IwbBase; using IwbZero.ToolCommon.StringModel; using WeEngine.Enum; using WeEngine.Packages; namespace WeEngine { /// /// 方案包运行态 /// public class RuntimePackage:IIwbId { public RuntimePackage(PackageInfo packageInfoInfo) { PackageInfoInfo = packageInfoInfo; Id = Guid.NewGuid().ToString(); PackageInfoInfo.RunningId = Id; RuntimePackageCache.Instance.SetCache(this); } public RuntimePackage(PackageInfo packageInfoInfo, string id) { PackageInfoInfo = packageInfoInfo; Id = id; PackageInfoInfo.RunningId = Id; RuntimePackageCache.Instance.SetCache(this); } public RuntimePackage(XmlNode xmlNode, string id=null) { PackageInfoInfo = (PackageInfo)new PackageInfo().CreateNodeByXmlNode(xmlNode); Id = id.IsNotEmpty() ? id : PackageInfoInfo.RunningId.IsEmpty() ? Guid.NewGuid().ToString("N") : PackageInfoInfo.RunningId; PackageInfoInfo.RunningId = Id; RuntimePackageCache.Instance.SetCache(this); } public RuntimePackage() { } public PackageInfo PackageInfoInfo { get; set; } public string Id { get; set; } #region CurrentInfo public int CurRoundIndex => CurRoundInfo?.RoundIndex ?? 0; public SceneRound CurRoundInfo => GetCurrentRoundInfo(); public List CurSceneFlowBlocks => GetCurrentFlowBlocks(); public List CurSceneFlows => GetCurrentFlows(); public List CurFlowNodes => GetCurrentSceneNodes(); public List CurSceneInfos => GetCurrentSceneInfos(); public List CurBehaviorInfos => GetCurrentBehaviors(); public List CurKeyWords => GetCurrentKeyWords(); private SceneRound GetCurrentRoundInfo() { return (SceneRound)PackageInfoInfo.Children.FirstOrDefault(a => a.NodeState == NodeState.Running); } private List GetCurrentFlowBlocks() { var list = new List(); var children = CurRoundInfo?.HasChild == true ? 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 == true ? cur.Children.Where(a => a.NodeState == NodeState.Running).Select(a => (SceneFlow)a).ToList() : new List(); list.AddRange(children); } return list; } private List GetCurrentSceneNodes() { var list = new List(); foreach (var cur in CurSceneFlows) { var flowNode = cur.RunningNode; list.Add(flowNode); } return list; } private List GetCurrentSceneInfos() { var list = new List(); foreach (var cur in CurFlowNodes) { var children = cur?.HasChild == true ? cur.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 == true ? cur.Children.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.Select(a => (KeyWord)a).Where(a => !a.HasMatched ).ToList() : new List(); list.AddRange(children); } return list; } #endregion public NodeBase GetNodeById(string id) { return PackageInfoInfo.GetNodeById(id); } } }