public InfiniteLoopManager(Enemy enemy, LoopIndex index, EnemyActionBehaviourData data) { _Enemy = enemy; _CompleteObserver = new Subject <Unit> (); _Index = index; _Data = data; _Manager = new RepeatManager(enemy, index, data); _OnComplete(); }
/// <summary> /// 解析分页列表标签. 调用此方法解析后,模板里将会对“PageListTag”变量赋值,结构如下: /// PageListTag = new { PageNumber = 当前页号, PageSize = 页码, PageCount = 总页码数量, RecordCount = 总记录数量, StartIndex = 当前页号内数据的起始位置, EndIndex = 当前页号内数据的结束位置 } /// 。并且还会在模板里注册一个“CreatePageListUrl”方法,用于获取分页列表地址。此方法可在变量标签里直接call调用,如:{$n call="CreatePageListUrl"},将输出n表示的页号地址, /// 其中n必须为数字值或者“first”、“首页”、“previous”、“上页”、“next”、“下页”、“last”、“尾页”这几个特殊值。 /// </summary> /// <param name="template">分页列表标签所在的模板</param> /// <param name="pageNumber">当前页号</param> /// <param name="pageSize">页码</param> /// <param name="recordCount">数量总数</param> /// <param name="pageListUrlCreator">生成分页列表地址的委托函数</param> public static void ParsePageListTag(Template template, int pageNumber, int pageSize, int recordCount, Func <int, string> pageListUrlCreator) { int pageCount = pageSize > 0 ? (int)Math.Ceiling((double)recordCount / pageSize) : recordCount; int startIndex = (pageNumber - 1) * pageSize + 1; int endIndex = pageNumber * pageSize; endIndex = endIndex > recordCount ? recordCount : endIndex; if (startIndex > endIndex) { startIndex = endIndex; } template.Variables.SetValue("PageListTag", new { PageNumber = pageNumber, PageSize = pageSize, PageCount = pageCount, RecordCount = recordCount, StartIndex = startIndex, EndIndex = endIndex }); if (pageListUrlCreator != null) { //注册两个用于获取分页地址的变量方法 template.RegisterGlobalFunction("CreatePageListUrl", (o => { if (o[0] is LoopIndex) { LoopIndex li = (LoopIndex)o[0]; if (li != null) { return(pageListUrlCreator(li.ToInt32(null))); } else { return(pageListUrlCreator(o[0].As <int>())); } } else { switch (o[0].ToString("")) { case "first": case "首页": return(pageListUrlCreator(1)); case "previous": case "上页": return(pageListUrlCreator(pageNumber > 1 ? pageNumber - 1 : 1)); case "next": case "下页": return(pageListUrlCreator(pageNumber < pageCount ? pageNumber + 1 : pageCount)); case "last": case "尾页": return(pageListUrlCreator(pageCount)); default: return(pageListUrlCreator(o[0].As <int>(1))); } } })); } }
public RepeatManager(Enemy enemy, LoopIndex loopData, EnemyActionBehaviourData originData) { _CompleteObserver = new Subject <Unit> (); var container = new List <IProcesser> (); _SetUp(enemy, loopData, originData, container, 0); _Processers = container.GetEnumerator(); _Processers.MoveNext(); _OnComplete(); }
private void _PutOutError(Enemy enemy, LoopIndex index, EnemyActionBehaviourData data) { EnemyActionDataWithLoop putData = null; for (int i = 0; i < data.EnemyActionData.Count(); i++) { putData = data.EnemyActionData.ElementAt(i); if (putData.LoopIndex == index) { Debug.LogError(string.Format("無限ループに陥っていますデータを見直してください : ObjectName → {0} : DataName → {1} : Index → {2}", enemy.name, putData.ActionData.name, i)); return; } } }
public string AsCsvString() => LoopIndex.ToString() .ConcatCsv(MonitoringScheme.AsString()) .ConcatCsv(VectorLength.ToString()) .ConcatCsv(NumOfNodes.ToString()) .ConcatCsv(Approximation.AsString()) .ConcatCsv(Communication.Bandwidth.ToString()) .ConcatCsv(Communication.UdpBandwidth.ToString()) .ConcatCsv(Communication.Messages.ToString()) .ConcatCsv(Communication.UdpMessages.ToString()) .ConcatCsv(Communication.Latency.ToString()) .ConcatCsv(NumberOfFullSyncs.ToString()) .ConcatCsv(LowerBound.AsCsvString()) .ConcatCsv(FunctionValue.ToString(CultureInfo.InvariantCulture)) .ConcatCsv(UpperBound.AsCsvString()) .ConcatCsv(NodesFunctionValues.Aggregate("", (csv, value) => csv.ConcatCsv(value.ToString(CultureInfo.InvariantCulture))));
private void _SetUp(Enemy enemy, LoopIndex dataIndex, EnemyActionBehaviourData originData, List <IProcesser> container, int loopCount) { if (loopCount > 1000) { _PutOutError(enemy, dataIndex, originData); return; } for (int i = 0; i < dataIndex.LoopCount; i++) { loopCount++; if (loopCount > 1000) { _PutOutError(enemy, dataIndex, originData); break; } var data = originData.EnemyActionData.Skip((int)dataIndex.LoopStartIndex) .Take(1 + (int)(dataIndex.LoopEndIndex - dataIndex.LoopStartIndex)); container.Add(new EnemyActionProcesser(enemy, data.First().ActionData)); for (int y = 1; y < data.Count(); y++) { loopCount++; if (loopCount > 1000) { _PutOutError(enemy, dataIndex, originData); break; } var loopData = data.ElementAt(y); container.Add(new EnemyActionProcesser(enemy, loopData.ActionData)); if (loopData.LoopIndex.LoopCount != 0) { _SetUp(enemy, loopData.LoopIndex, originData, container, loopCount); continue; } } } }