public void OnUpdate(float deltaTime) { if (!bFinish) { if (_delayNodes.Count > 0) { for (int i = _delayNodes.Count - 1; i >= 0; --i) { _delayNodes[i].delayTime -= deltaTime; if (_delayNodes[i].delayTime <= 0) { _delayNodes[i].performNode.Construct(); _playNodes.Add(_delayNodes[i].performNode); _delayNodes.RemoveAt(i); } } } if (_playNodes.Count > 0) { List <IPerformNode> readyNodes = new List <IPerformNode>(); for (int i = _playNodes.Count - 1; i >= 0; --i) { _playNodes[i].Play(deltaTime); if (_playNodes[i].IsFinished()) { var nextNodes = _playNodes[i].GetFollowers(); foreach (var nextNode in nextNodes) { nextNode.Construct(); readyNodes.Add(nextNode); var companyNodes = nextNode.GetCompanions(); foreach (var coNode in companyNodes) { if (coNode.Delay > 0) { var delayData = new DelayPerformNode(); delayData.delayTime = coNode.Delay; delayData.performNode = coNode; _delayNodes.Add(delayData); } else { coNode.Construct(); readyNodes.Add(coNode); } } } _playNodes.RemoveAt(i); } } _playNodes.AddRange(readyNodes); } if (_delayNodes.Count == 0 && _playNodes.Count == 0) { bFinish = true; } } }
private void ParseRawTable(LuaTable rawTable) { var rootNode = ParseNode(rawTable); rootNode.Construct(); _playNodes.Add(rootNode); var rootCompanions = rootNode.GetCompanions(); for (int i = 0; i < rootCompanions.Count; ++i) { if (rootCompanions[i].Delay > 0) { var delayData = new DelayPerformNode(); delayData.delayTime = rootCompanions[i].Delay; delayData.performNode = rootCompanions[i]; _delayNodes.Add(delayData); } else { rootCompanions[i].Construct(); _playNodes.Add(rootCompanions[i]); } } }