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; } }
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 { } } }
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; }
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]; }