コード例 #1
0
ファイル: CommandMng.cs プロジェクト: atom-chen/tianyu
    public override bool Exec(Actor _actor)
    {
        if (GameCenter.curGameStage == null || !GameCenter.sceneMng.EnterSucceed)
        {
            return(false);
        }
        //如果目标在使用技能,返回false ,等他用完 by吴江
        SmartActor sa = _actor as SmartActor;

        if (sa.isRigidity) //如果在僵直
        {
            return(false);
        }
        if (sa != null && (sa.isCasting || sa.isCastingAttackEffect)) //如果在使用技能
        {
            sa.CancelAbility();
        }

        if (path == null)
        {
            path = GameStageUtility.StartPath(_actor.transform.position, destPos);

            if (path == null)
            {
                GameSys.Log("寻路失败!");
                _actor.StopMovingTo();
                MainPlayer player = _actor as MainPlayer;
                if (player != null)
                {
                    if (player.CannotMoveTo != null)
                    {
                        player.CannotMoveTo();
                    }
                }
                return(true);
            }
            else
            {
                destPos = path[path.Length - 1];
            }
        }

        //检查是否超出最远距离 by吴江
        if (maxDistance > 0.0f)
        {
            Vector3 delta = destPos - _actor.transform.position;
            if (ignoreY)
            {
                delta.y = 0.0f;
            }
            if (delta.sqrMagnitude <= (maxDistance * maxDistance))
            {
                _actor.StopMovingTo();
                return(true);
            }
        }


        if (firstTime)
        {
            if (_actor.isMoveLocked == false)
            {
                // firstTimeTick = Time.realtimeSinceStartup;
                firstTime = false;
                _actor.MoveTo(path, maxDistance, false);
            }

            return(false);
        }

        if (maxDistance <= 0.0f)
        {
            Vector3 delta = destPos - _actor.transform.position;
            if (ignoreY)
            {
                delta.y = 0.0f;
            }
            if (delta.sqrMagnitude < (0.1 * _actor.CurRealSpeed * 0.1 * _actor.CurRealSpeed))
            {
                var player = _actor as SmartActor;
                if (player != null)
                {
                    _actor.StopMovingTo();
                }
                return(true);
            }
        }

        if (_actor.IsMoving)
        {
            return(false);
        }
        else
        {
            path = GameStageUtility.StartPath(_actor.transform.position, destPos);
            _actor.MoveTo(path, maxDistance, false);

            if (path == null || path.Length == 0)
            {
                return(true);
            }
        }
        return(false);
    }