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
}
}