Пример #1
0
    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;
            }
        }
    }
Пример #2
0
    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]);
            }
        }
    }