/// <summary> /// 使用绝技技能,HeroUnitUI调用 /// </summary> /// <returns></returns> public void UI_UseUniqueSkill(params object[] objs) { UnAbleReason reason = UnAbleReason.None; if (self.state != FightUnit.UnitState.Fighting) { reason = UnAbleReason.NotFighting; } else if (self.isConfused) { reason = UnAbleReason.InSpecailState; } if (reason != UnAbleReason.None) { TipReason(reason); return; } else { if (target == null || target.state == FightUnit.UnitState.Dead) { target = FightRule.GetFightTarget(self, self.parentGroup.targetGroup); if (target == null) { return; } } UseUniqueSkill(); } }
void OnNormalAttackHit(params object[] objs) { float hurtNum = (int)objs[0]; int xixueNum = Mathf.Max(1, Mathf.RoundToInt(hurtNum * buffValue)); FightRule.XixueCure(xixueNum, target); }
public bool TryAttack() { if (targetUnit == null || targetUnit.state == UnitState.Dead) { targetUnit = FightRule.GetFightTarget(this, isEntice || isConfused? parentGroup : parentGroup.targetGroup); } if (targetUnit == null) { return(false); } return(Util.Distance(targetUnit.transform.localPosition, mTrans.localPosition) <= fightAttribute.range); }
public override void OnIng() { base.OnIng(); if (!targetUnit) { targetUnit = FightRule.GetFightTarget(mineUnit, mineUnit.parentGroup.targetGroup); if (!targetUnit) { return; } } FightRule.NormalAttackWork(mineUnit, targetUnit, this); }
void OnFantan(params object[] objs) { int hurtNum = (int)objs[0]; Skill skill = (Skill)objs[1]; HurtType damangeType = (HurtType)objs[2]; if (damangeType != hurtType || skill == null) { return; } int fantanNum = Mathf.Max(1, Mathf.RoundToInt(hurtNum * buffValue)); FightRule.FantanDamage(fantanNum, target, skill.mineUnit); }
public override void OnIng() { base.OnIng(); if (!targetUnit) { if (mineUnit.TryAttack()) { targetUnit = mineUnit.targetUnit; } else { return; } } FightRule.ActiveSkillWork(mineUnit, targetUnit, this); }
/// <summary> /// 每次普通攻击结束后思考一次是否使用技能 /// </summary> public void ThinkUseSkill(object[] objs) { if (target == null || target.state == FightUnit.UnitState.Dead) { target = FightRule.GetFightTarget(self, self.isConfused ? self.parentGroup : self.parentGroup.targetGroup); if (target == null) { return; } } List <int> indexList = new List <int>(); uint totalWeight = 0; float randomVal = Random.value; for (int i = 0; i < autoSkills.Count; i++) { ActiveSkillStruct skill = autoSkills[i]; if (skill.isLocked) { if (skill.autoSkillCondition.unlockTime <= time) { skill.isLocked = false; } } if (!skill.isLocked && skill.cd + skill.lastUseTime <= time && IsFitSkillCondition(skill)) { totalWeight += skill.autoSkillCondition.weight; indexList.Add(i); } } for (int i = 0; i < indexList.Count; i++) { float val = (float)autoSkills[i].autoSkillCondition.weight / totalWeight; if (randomVal <= val) { selectedSkill = autoSkills[i].autoSkill; autoSkills[i].lastUseTime = time; autoSkills[i].GetCd(); break; } else { randomVal -= val; } } }
public override void OnIng() { base.OnIng(); FightRule.UniqueSkillWork(mineUnit, targetUnit, this); }
public override void Update() { base.Update(); //根据玩家方向或者出生点进行自我转向调整 ChangeOrientation(); //这部分要放在上面,否则引起一直原地 if (this.mTrans.localPosition == this.birthPoint.localPosition && targetUnit == null) { mTrans.localRotation = birthPoint.localRotation; isRotate = false; //恢复初始设置 state = UnitState.Wait; } if (state == UnitState.Wait && (FightRule.GetAlarmedFightTarget(this, this.parentGroup.targetGroup) != null)) { targetUnit = FightRule.GetAlarmedFightTarget(this, this.parentGroup.targetGroup); state = UnitState.MoveToTarget; } if (targetUnit != null && FightRule.Distance(this, targetUnit) > this.fightAttribute.alarmRange) { state = UnitState.LoseTarget; } //如果回到出生地,则恢复wait状态(待做) if (state == UnitState.LoseTarget) { targetUnit = null; GetBack(); } else if (state == UnitState.MoveToTarget && beAbleMove) { ChangeOrientation(); if (TryAttack()) { anim.Play(Const.IdleAction, true); //调整动作 state = UnitState.Fighting; //有目标既进入战斗状态 } else { if (targetUnit == null) { return; } else { MoveTowardsTarget(); } } } else if (state == UnitState.Fighting && beAbleFight) { if (modifiedY != 0 || modifiedZ != 0) { mTrans.localPosition = Vector3.MoveTowards(mTrans.localPosition, new Vector3(mTrans.localPosition.x, modifiedY, modifiedZ), Const.MoveSpeed * Time.deltaTime); } if (TryAttack()) { attack.DoAttack(targetUnit); } else { if (attack.currentSkill != null) { return; } if (targetUnit == null) { state = UnitState.Wait; } else { state = UnitState.MoveToTarget; } } } }
public override void BuffProcess() { FightRule.BuffAttackDamage(this, HurtType.True); }
public override void BuffProcess() { FightRule.BuffCure((int)buffValue, target); }