using System.Collections; using System.Collections.Generic; using System.Linq; using IwbZero.IwbBase; using IwbZero.ToolCommon.StringModel; using Newtonsoft.Json; using WeEngine.Packages; namespace WeEngine.ModelInfo { public class ModelBase { public ModelBase() { Children = new List(); GuideInfos = new List(); } protected NodeBase PackageNode { get; set; } [JsonProperty] public string Id { get; set; } [JsonProperty] public string No { get; set; } [JsonProperty] public string Name { get; set; } [JsonProperty] public string Path { get; set; } [JsonProperty] public string ParentPath { get; set; } [JsonIgnore] public string _guideNos; [JsonProperty] public string GuideNos { get { return _guideNos.IsEmpty() ? string.Join(",", GuideInfos?.Select(a => a.Id) ?? new string[0]) : _guideNos; } set => _guideNos = value; } //public string GuideNames => string.Join(",", GuideInfos?.Select(a => a.Name) ?? new string[0]); private List _guideInfos; [JsonIgnore] public List GuideInfos { get { return _guideInfos ?? (_guideInfos = PackageNode?.GuideInfos?.Select(a => new GuideModel().ModelFrom(a)).ToList() ?? new List()); } set => _guideInfos = value; } [JsonProperty] public string SceneCategory { get; set; } [JsonProperty] public string SceneCategoryName { get; set; } [JsonProperty] public string PreComponent { get; set; } [JsonProperty] public string RunningComponent { get; set; } [JsonProperty] public string PostComponent { get; set; } [JsonProperty] public string VariableStr { get; set; } [JsonProperty] public decimal Weights { get; set; } public List Children { get; set; } protected Hashtable GetVariable() { var table = new Hashtable(); if (VariableStr.IsNotEmpty()) { var varArr = VariableStr.StrToArray(); foreach (var v in varArr) { var variable = IwbRtVariable.Str2Variable(v); table[variable.VarName] = variable; } } return table; } /// /// 转换Node /// /// 空Node /// internal virtual NodeBase NodeFrom(NodeBase node) { node.Id = Id; node.InternalNo = No; node.Name = Name; node.EventComponentNode = new ComponentNode() { PreComponent = PreComponent, RunningComponent = RunningComponent, PostComponent = PostComponent }; node.SceneCategory = SceneCategory; node.SceneCategoryName = SceneCategoryName; node.GuideInfos = new List(); if (GuideInfos?.Count > 0) { foreach (var guideInfo in GuideInfos) { var guide = guideInfo.NodeFrom(); node.GuideInfos.Add(guide); } } node.Variables = GetVariable(); //node.Children = new List(); return node; } /// /// 转换Model /// /// /// internal virtual void ModelFrom(NodeBase node) { Id = node.Id; No = node.InternalNo; Name = node.Name; Weights = node.Weights; Path = node.NodePath; ParentPath = node.Parent?.NodePath; SceneCategory = node.SceneCategory; SceneCategoryName = node.SceneCategoryName; VariableStr = Variable2Str(GetVariable()); PreComponent = node.EventComponentNode?.PreComponent; RunningComponent = node.EventComponentNode?.RunningComponent; PostComponent = node.EventComponentNode?.PostComponent; //GuideInfos = node.GuideInfos?.Select(a => new GuideModel().ModelFrom(a)).ToList() ?? new List(); } /// /// 变量转字符串 /// /// /// private string Variable2Str(Hashtable variables) { string str = ""; if (variables != null && variables.Count > 0) { string vStr = ""; foreach (DictionaryEntry entry in variables) { var v = (IwbRtVariable)entry.Value; vStr += (vStr == "" ? "" : ",") + IwbRtVariable.Variable2Str(v); } } return str; } } }