public static bool AttackEnemyInRange(ActorBehaviour abMe, long targetId)
        {
            ActorBehaviour abEnemy = GameRoomManager.Instance.RoomLogic.ActorManager.GetActor(targetId);

            if (abEnemy == null)
            { // 优先找指定的敌人,如果没有找到,则搜索射程以内的敌人(从近到远)
                abEnemy = abMe.FindEnemyInRange();
            }

            if (abEnemy != null)
            {
                if (abMe.IsEnemyInRange(abEnemy))
                {
                    if (abMe.CalcDistance(abEnemy) < 18f * abMe.ShootingRange)
                    {                                 // 敌人进入射程,进入攻击状态. 注意:这时候的敌人,可能不是之前要打的敌人
                        abMe.IsCounterAttack = false; // 这是主动攻击, 不是反击, 记录在自己身上, Stop的时候用
                        abMe.StateMachine.TriggerTransition(StateEnum.FIGHT, abEnemy.CellIndex, abEnemy.ActorId,
                                                            abMe.AttackDuration);
                        CmdAttack.TryCommand();
                        return(true);
                    }
                }
            }
            return(false);
        }
        public override void Tick()
        {
            if (timeSpan < TIME_DELAY)
            {
                timeSpan += Time.deltaTime;
                return;
            }

            timeSpan = 0;

            // 1-恢复[弹药基数AmmoBase]
            if (Owner.GetLastedTime() >= TIME_SUPPLY)
            {
                Owner.RestartTime();
                if (_actorBehaviour.AmmoBase < _actorBehaviour.AmmoBaseMax)
                {
                    _actorBehaviour.AmmoBase++;
                    AmmoSupply output = new AmmoSupply()
                    {
                        RoomId   = _actorBehaviour.RoomId,
                        OwnerId  = _actorBehaviour.OwnerId,
                        ActorId  = _actorBehaviour.ActorId,
                        AmmoBase = _actorBehaviour.AmmoBase,
                    };
                    GameRoomManager.Instance.SendMsg(ROOM.AmmoSupply, output.ToByteArray());
                }
            }

            // 2-寻找附近的敌人, 如果有, 且自己弹药满仓, 且自己行动点足够, 且敌人活着, 就干他
            // (因为本状态下可以恢复弹药,所以如果只要弹药有1就攻击的话,显得拖拖拉拉)
            var abEnemy = _actorBehaviour.FindEnemyInRange();

            if (abEnemy != null &&
                _actorBehaviour.AmmoBase == _actorBehaviour.AmmoBaseMax &&
                CmdAttack.IsActionPointGranted() &&
                !abEnemy.IsDead)
            {
                _actorBehaviour.IsCounterAttack = false; // 这是主动攻击, 不是反击, 记录在自己身上, Stop的时候用
                _actorBehaviour.StateMachine.TriggerTransition(StateEnum.FIGHT, 0, abEnemy.ActorId, _actorBehaviour.AttackDuration);
            }
        }