Ejemplo n.º 1
0
    /// <summary>
    /// 获取行为链
    /// </summary>
    /// <param name="paramsPacker">构造数据</param>
    /// <param name="formulaItem">行为链构造器</param>
    /// <returns></returns>
    protected IFormula GetIFormula(FormulaParamsPacker paramsPacker, IFormulaItem formulaItem)
    {
        IFormula result = null;
        // 循环构建行为链构造器
        var tmpItem = formulaItem;

        // 数据列表放入packer中
        paramsPacker.DataList = DataList;
        // 技能ID放入packer中
        paramsPacker.SkillNum = Num;
        while (tmpItem != null)
        {
            if (result != null)
            {
                result = result.After(tmpItem.GetFormula(paramsPacker));
            }
            else
            {
                result = tmpItem.GetFormula(paramsPacker);
            }
            tmpItem = tmpItem.NextFormulaItem;
        }

        // 构造器不为空
        if (result != null)
        {
            // 获取构造器链head
            result = result.GetFirst();
            // 设置行为链链头的数据域
            result.DataScope = DataScope;
        }

        return(result);
    }
Ejemplo n.º 2
0
    /// <summary>
    /// 携程循环
    /// </summary>
    private IEnumerator LoopDoFormula(IFormula formula, Action endCallback = null)
    {
        if (formula != null)
        {
            // 获取链表中的第一个
            var topNode = formula.GetFirst();

            // 顺序执行每一个操作
            do
            {
                //Debug.Log("执行");
                var isWaiting = true;
                // 创建回调
                Action callback = () =>
                {
                    //Debug.Log("Callback");
                    isWaiting = false;
                };
                topNode.Do(callback, formula.DataScope);
                if (topNode.FormulaType == Formula.FormulaWaitType)
                {
                    while (isWaiting)
                    {
                        yield return(new WaitForEndOfFrame());
                    }
                }
                topNode = topNode.NextFormula;
                if (endCallback != null)
                {
                    endCallback();
                }
            } while (topNode != null && topNode.CanMoveNext);
            // 如果完成回调不为空则回调
            //if (compeletCallback != null)
            //{
            //    compeletCallback();
            //}
        }
    }