Exemplo n.º 1
0
    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;
        }
    }
Exemplo n.º 2
0
    // 计算实际效果
    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;
        }
    }
Exemplo n.º 3
0
    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;
        }
    }