Ejemplo n.º 1
0
 private void OnSkillFinish()
 {
     _castSkillStage = CastSkillStage.None;
 }
Ejemplo n.º 2
0
    internal void TryCastSkill(int index)
    {
        //技能为啥要index-1呢,不是很理解,整个流程需要走一遍发现问题
        //正在释放技能时,不能再放技能
        if (_skillCaster.IsCasting)
        {
            return;
        }
        //找到技能
        var skillObj = GetSkillObject(index);

        if (skillObj == null)
        {
            Debug.LogError("TryCastSkill未找到技能对象,索引号" + (index - 1).ToString());
            return;
        }
        //CD
        if (skillObj.logic.IsInCD)
        {
            return;
        }


        // 如果这个技能需要指定目标,才需要检测目标有效性(需要目标&有目标&目标可被攻击)
        if (skillObj.tableData.castRange > 0)
        {
            //尝试自动选择技能目标
            if (_owner.curTarget == null)
            {
                var selectTarget = _castSkillAssist.SelectEnemy();
                if (selectTarget != null)
                {
                    Util.SafeCall(AutoSelectCallback, selectTarget);
                    /*if (AutoSelectCallback != null) { AutoSelectCallback(selectTarget); }*/
                }
                //_owner.curTarget = _castSkillAssist.SelectEnemy();
            }
            //真的木有目标
            if (_owner.curTarget == null)
            {
                return;
            }

            if (!_owner.curTarget.CanBeAttacked(_owner))
            {
                return;
            }

            //施法范围判断
            var dis = Util.Distance2_5D(_owner.transform.position, _owner.curTarget.transform.position);
            if (dis > skillObj.tableData.castRange)
            {
                Debug.Log("距离过远" + dis + "," + skillObj.tableData.castRange);

                //技能进入辅助阶段
                _castSkillStage = CastSkillStage.Assist;
                _owner.TraceTo(_owner.curTarget, skillObj.tableData.castRange, () => OnAssistFinish(skillObj.logic));
                return;
            }
        }
        //技能类型(目标、位置)能不能放
        //开始放技能
        CastSkill(skillObj.logic);
    }
Ejemplo n.º 3
0
 //技能辅助执行完毕
 private void OnAssistFinish(SkillLogicBase logic)
 {
     _castSkillStage = CastSkillStage.Casting;
     CastSkill(logic);
 }