public EnemyProcesser(Enemy enemy, EnemyActionBehaviourData actionData) { _ManagerList = new List <IProcesserManager> (); for (int i = 0; i < actionData.EnemyActionData.Count(); i++) { var data = actionData.EnemyActionData.ElementAt(i); var manager = new EnemyProcesserManager(enemy, actionData.EnemyActionData.Skip(i).Take(1).Select(_data => _data.ActionData)); _ManagerList.Add(manager); if (data.LoopIndex.LoopCount != 0) { if (data.LoopIndex.InfinitLoop) { var infManager = new InfiniteLoopManager(enemy, data.LoopIndex, actionData); _ManagerList.Add(infManager); break; } var repManager = new RepeatManager(enemy, data.LoopIndex, actionData); _ManagerList.Add(repManager); continue; } } _Manager = _ManagerList.GetEnumerator(); _Manager.MoveNext(); _OnComlete(enemy); }
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(); }
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; } } }
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; } } } }
private void OnDestroy() { _Data = null; }