public override void Tick() { // 向目标移动 // 1. 目标死亡的处理 // 2. 进入自己射程的处理 if (!_checkTargetAlive()) { UnitAIIdleState state = new UnitAIIdleState(); unit.State = state; return; } if (_checkCanAttack()) { UnitAIAttackState state = new UnitAIAttackState(); state.position = unit.Position; unit.State = state; } else { int frame = battle.Frame - _lastFrame; _dir = (unit.Target.Position - unit.Position).normalized; unit.Position = unit.Position + _dir * frame * unit.MoveSpeed; _lastFrame = battle.Frame; } }
// 计算实际效果 public void CastAttack(Unit target) { int damage = 0; if (target != null && target.IsAlive) { int old = target.HP; int tmp = (target.HP - Attack); target.HP = tmp > 0 ? tmp : 0; damage = old - target.HP; } bool isDead = !target.IsAlive; //Debug.Log("Logic Attack Effect at frame: " + battle.Frame + " time : " + System.Environment.TickCount ); Launch.battleplayer.AttackEffect(battle.Frame, this, target, damage, isDead); // 如果目标死亡的AI if (isDead) { // target dead state UnitAIDeadState stateDead = new UnitAIDeadState(); target.State = stateDead; UnitAIIdleState state = new UnitAIIdleState(); State = state; } }
public override void Tick() { for (int i = _skillAttackList.Count - 1; i >= 0; i--) { UnitSkillAttackBase attackEffect = _skillAttackList[i]; if (attackEffect.Tick()) { // delete _skillAttackList.RemoveAt(i); } } // 少一个距离的判断,如果打的过程中,目标走了 if (!_checkTargetAlive()) { UnitAIIdleState state = new UnitAIIdleState(); unit.State = state; return; } if (attackFrameCounter > 0) { --attackFrameCounter; } if (attackFrameCounter == 0) { _doAttack(); attackFrameCounter = unit.AttackSpeed; } }