//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); }
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(); } }