Ejemplo n.º 1
0
    void checkBeforeAtk(int dTime)
    {
        if (atkType == eAtkType.NONE)
        {
            return;
        }
        //处理冷却时间
        if (atkCoolDown > 0)
        {
            atkCoolDown -= dTime;
        }
        if (atkCoolDown > 0)
        {
            return;
        }

        //正在动作时无法攻击
        if (atkStage != eAtkStage.READY || castStage != eAtkStage.READY)
        {
            return;
        }

        if (hateTarget != null)
        {
            atkCoolDown = atkInterval;
            anim.SetTrigger("atk");
            atkBhvTimer = 0;
            atkTarget   = hateTarget;
            atkStage    = eAtkStage.PRE_YAO;
        }
    }
Ejemplo n.º 2
0
    void checkCastBehaviour(int dTime)
    {
//		if (atkTarget != null && atkBhvTimer < atkPreTime) {
//			return;
//		}

        //攻击前摇时 不进行施法
        if (atkStage == eAtkStage.PRE_YAO)
        {
            return;
        }

        //效果结算
        if (castStage == eAtkStage.READY)
        {
            return;
        }

        castBhvTimer += dTime;

        bool isSkillEffect = false;

        if (castStage == eAtkStage.PRE_YAO && castBhvTimer > castPreTime)
        {
            castStage     = eAtkStage.POST_YAO;
            isSkillEffect = true;
        }
        else if (castStage == eAtkStage.POST_YAO && castBhvTimer > castPreTime + castPostTime)
        {
            castStage    = eAtkStage.READY;
            castBhvTimer = 0;
        }

        if (isSkillEffect)
        {
            SkillState skill = skillComponent.skills [castIdx];
            TowerSkill s     = GameStaticData.getInstance().getTowerSkillInfo(skill.skillId);
            if (s.tsType == eTowerSkillType.SELF_TARGET)
            {
                gainBuff();
            }
            else if (s.tsType == eTowerSkillType.ACTIVE)
            {
                if (s.targetType == eAtkType.RANGED_HOMING)
                {
                    genBullet(s.bulletStyle.bulletName, castTarget, skill, true, false);
                    castTarget = null;
                }
                else if (s.targetType == eAtkType.RANGED_INSTANT)
                {
                    applyNormalAtk(castTarget, s.bulletStyle.bulletName);
                    castTarget = null;
                }
            }
            else
            {
            }
        }
    }
Ejemplo n.º 3
0
    void checkAtkBehaviour(int dTime)
    {
        //如果当前未攻击 不进行判定
        if (atkStage == eAtkStage.READY)
        {
            return;
        }

        //累加攻击计时器 并改变攻击状态
        atkBhvTimer += dTime;

        bool isAttackEffect = false;

        if (atkStage == eAtkStage.PRE_YAO && atkBhvTimer > atkPreTime)
        {
            atkStage       = eAtkStage.POST_YAO;
            isAttackEffect = true;
        }
        else if (atkStage == eAtkStage.POST_YAO && atkBhvTimer > atkPreTime + atkPostTime)
        {
            atkStage    = eAtkStage.READY;
            atkBhvTimer = 0;
        }

        //当攻击丢失时 重置攻击状态
        if (atkTarget == null || !atkTarget.IsAlive)
        {
            isAttackEffect = false;
            atkStage       = eAtkStage.READY;
            atkBhvTimer    = 0;
        }
        //当还未进行攻击时 返回
        if (!isAttackEffect)
        {
            return;
        }

        switch (atkType)
        {
        case eAtkType.NONE:
            return;

        case eAtkType.MELLE_POINT:
            applyNormalAtk(atkTarget);
            break;

        case eAtkType.RANGED_HOMING:
            applyHomingRangeAtk(atkTarget);
            break;

        case eAtkType.MELLE_AOE:
            applayMeleeAOE(atkTarget);
            break;

        case eAtkType.RANGED_INSTANT:
            applyNormalAtk(atkTarget);
            break;

        case eAtkType.RANGED_MULTI:
            break;

        case eAtkType.RANGED_UNHOMING:
            applyUnhomingRangeAtk(atkTarget);
            break;

        default:                  /* 可选的 */
            break;
        }

        atkTarget = null;
    }
Ejemplo n.º 4
0
    void checkAutoSkill(int dTime)
    {
        if (checkSkillTimer > 0)
        {
            checkSkillTimer -= dTime;
        }
        if (checkSkillTimer > 0)
        {
            return;
        }

        if (castStage != eAtkStage.READY)
        {
            return;
        }
        checkSkillTimer = CHECK_SKILL_INTERVAL;

        List <int> readySkills = skillComponent.getReadySkill();

        GameLife closestOne = MapManager.getInstance().getClosestEnemy(this);

        List <int> readyUsableSkill = new List <int> ();

        if (readySkills.Count == 0)
        {
            return;
        }
        if (closestOne == null || !closestOne.IsAlive)
        {
            return;
        }

        for (int i = 0; i < readySkills.Count; i++)
        {
            SkillState skill = skillComponent.skills [readySkills [i]];

            int diss = (posXInt - closestOne.posXInt) * (posXInt - closestOne.posXInt) + (posYInt - closestOne.posYInt) * (posYInt - closestOne.posYInt);
            int dis  = (int)Mathf.Sqrt(diss);


            //Vector2 diff = closestOne.transform.position - transform.position;

            TowerSkill s = GameStaticData.getInstance().getTowerSkillInfo(skill.skillId);

            if (s.tsType == eTowerSkillType.SELF_TARGET)
            {
                readyUsableSkill.Add(readySkills[i]);
            }
            else
            {
                if (dis <= s.x[skill.skillLevel - 1])
                {
                    readyUsableSkill.Insert(0, readySkills[i]);
                }
            }
        }

        if (readyUsableSkill.Count == 0)
        {
            return;
        }

        SkillState toUse = skillComponent.skills[readyUsableSkill [0]];
        TowerSkill ss    = GameStaticData.getInstance().getTowerSkillInfo(toUse.skillId);

        if (ss.tsType == eTowerSkillType.SELF_TARGET)
        {
            anim.SetTrigger("buff");
        }
        else if (ss.tsType == eTowerSkillType.ACTIVE)
        {
            castTarget = closestOne;
            anim.SetTrigger("skill");
            anim.SetFloat("skill_style", Random.Range(0, 2) * 1.0f);
        }
        else
        {
        }

        skillComponent.setSkillCD(readyUsableSkill [0]);
        castBhvTimer = 0;
        castStage    = eAtkStage.PRE_YAO;
        castIdx      = readyUsableSkill [0];
    }