Exemplo n.º 1
0
 //public void Move(BoardManager board)
 public bool CanMove(BoardManager board)
 {
     if (Current.FloorType != FloorType.Spawn)
     {
         if (Player.Movement.Vatality > 0)
         {
             return(true);
         }
         else
         {
             board.AddText("没有行动点了");
             return(false);
         }
     }
     else
     {
         if (Player.Movement.Vatality == 6)
         {
             return(true);
         }
         else
         {
             board.AddText("行动点不足以发车哦");
             return(false);
         }
     }
     //return (Current.FloorType != FloorType.Spawn && Player.Movement.Vatality > 0) || (Current.FloorType == FloorType.Spawn && Player.Movement.Vatality == 6);
 }
Exemplo n.º 2
0
        public IEnumerator Move(BoardManager board)
        {
            //关闭Collider
            foreach (var player in board.Players)
            {
                foreach (Unit unit in player.Units)
                {
                    unit.BoxCollider2D.enabled = false;
                }
            }
            bool isForward = true;

            if (Current.FloorType == FloorType.Spawn && Player.Movement.Vatality == 6)
            {
                Floor   now          = Current;
                var     next         = Current.GetNext(null);
                Vector3 nextPosition = new Vector3(next.Locator.x, next.Locator.y, 0);
                board.AddText("发车");
                board.AddText("当前位置", now.Locator);
                board.AddText("目标位置", next.Locator);
                //移动对象,平滑移动
                float sqrRemainingDistance = (Obj.transform.position - nextPosition).sqrMagnitude;
                while (sqrRemainingDistance > float.Epsilon)
                {
                    Vector3 newPostion = Vector3.MoveTowards(Rigidbody2D.position, nextPosition, board.inverseMoveTime * Time.deltaTime);
                    Rigidbody2D.MovePosition(newPostion);
                    sqrRemainingDistance = (Obj.transform.position - nextPosition).sqrMagnitude;
                    yield return(null);
                }
                Player.Movement.Vatality -= 6;
                Current = next;
            }
            else
            {
                Floor now = Current;
                while (Player.Movement.Vatality > 0)
                {
                    board.AddText("剩余移动点数:" + Player.Movement.Vatality);
                    //确定移动位置
                    Floor next;
                    if (isForward)
                    {
                        next = now.GetNext(Player.Movement);
                        if (next.FloorType == FloorType.EndPoint)
                        {
                            isForward = false;
                        }
                    }
                    else
                    {
                        next = now.Pre;
                    }
                    //TEST Output
                    Vector3 nextPosition = new Vector3(next.Locator.x, next.Locator.y, 0);
                    board.AddText("开始移动");
                    board.AddText("当前位置", now.Locator);
                    board.AddText("目标位置", next.Locator);
                    //移动对象,平滑移动
                    float sqrRemainingDistance = (Obj.transform.position - nextPosition).sqrMagnitude;
                    while (sqrRemainingDistance > float.Epsilon)
                    {
                        Vector3 newPostion = Vector3.MoveTowards(Rigidbody2D.position, nextPosition, board.inverseMoveTime * Time.deltaTime);
                        Rigidbody2D.MovePosition(newPostion);
                        sqrRemainingDistance = (Obj.transform.position - nextPosition).sqrMagnitude;
                        yield return(null);
                    }
                    Player.Movement.Vatality -= 1;
                    now = next;
                }
                Current = now;
                if (Current.FloorType == FloorType.EndPoint)
                {
                    Player.Score++;
                    Obj.SetActive(false);
                    board.UpdateScore();
                }
            }
            //重启Collider
            foreach (var player in board.Players)
            {
                foreach (Unit unit in player.Units)
                {
                    unit.BoxCollider2D.enabled = true;
                }
            }
            //是否结束
            if (board.IsFinished())
            {
                board.NextPlayer();
            }
        }