/// <summary> /// 获取棋格的另一方 /// </summary> public static GridSide GetOtherGridSide(GridSide side) { if (side == GridSide.Black) { return(GridSide.White); } return(GridSide.Black); }
public GridTile GetTile(GridSide side, int x, int y) { x = Mathf.Clamp(x, 0, width - 1); y = Mathf.Clamp(y, 0, height - 1); if (side == GridSide.Left) { return(leftGrid[x][y]); } else { return(rightGrid[x][y]); } }
public static List <Vector2Int> GetGridSide(GridSide side) { List <Vector2Int> sideList; sideList = new List <Vector2Int>(); switch (side) { case GridSide.xMin: for (int i = 0; i < gridX; i++) { sideList.Add(new Vector2Int(i, 0)); } break; case GridSide.xMax: for (int i = 0; i < gridX; i++) { sideList.Add(new Vector2Int(i, gridZ - 1)); } break; case GridSide.zMin: for (int i = 0; i < gridZ; i++) { sideList.Add(new Vector2Int(0, i)); } break; case GridSide.zMax: for (int i = 0; i < gridZ; i++) { sideList.Add(new Vector2Int(gridX - 1, i)); } break; case GridSide.outter: foreach (Vector2Int hex in edgeHexes) { if (GetHex(hex.x, hex.y).edge == EdgeType.outter) { sideList.Add(hex); } } break; } return(sideList); }
public GridTile Move(GridSide side, GridTile from, int x, int y) { GridTile to = GetTile(side, x, y); if (!to.moveable) { return(from); } if (to != from) { to.Enter(); from.Exit(); } return(to); }
public GridTile Move(GridSide side, int x, int y) { GridTile to = GetTile(side, x, y); return(to); }
protected Tuple <GridSide, Dictionary <int, GridSide> > getGridSideInternal(Object currentStateObj, float playerRotation, float playerXPosition, float playerZPosition, int playerStartingPosition, int numCars) { GridSide playerGridSide = GridSide.UNKNOWN; Boolean countForwards = playerStartingPosition != 1; float[] worldPositionOfOpponent = null; int opponentStartingPositionToCheck = countForwards ? playerStartingPosition - 1 : playerStartingPosition + 1; int opponentCheckCount = 0; // only check 5 opponents, then give up while (opponentCheckCount < 5) { worldPositionOfOpponent = getWorldPositionOfDriverAtPosition(currentStateObj, opponentStartingPositionToCheck); if (worldPositionOfOpponent != null) { float[] alignedCoordiates = this.internalSpotter.getAlignedXZCoordinates(playerRotation, playerXPosition, playerZPosition, worldPositionOfOpponent[0], worldPositionOfOpponent[1]); if (alignedCoordiates[0] < -2) { playerGridSide = GridSide.LEFT; break; } else if (alignedCoordiates[0] > 2) { playerGridSide = GridSide.RIGHT; break; } } if (countForwards) { if (opponentStartingPositionToCheck == 1) { // we're counting forwards and have reached pole, so go back from the player opponentStartingPositionToCheck = playerStartingPosition + 1; countForwards = false; } else { opponentStartingPositionToCheck--; } } else { if (opponentStartingPositionToCheck == numCars - 1) { // we're counting backwards and have reached last, so go forward from the player opponentStartingPositionToCheck = playerStartingPosition - 1; countForwards = true; } else { opponentStartingPositionToCheck++; } } } // now get GridSide for the opponents starting ahead int opponentAheadPosition = playerStartingPosition - 1; Dictionary <int, GridSide> opponentGridSides = new Dictionary <int, GridSide>(); while (opponentAheadPosition > 0) { worldPositionOfOpponent = getWorldPositionOfDriverAtPosition(currentStateObj, opponentAheadPosition); if (worldPositionOfOpponent != null) { float[] alignedCoordiates = this.internalSpotter.getAlignedXZCoordinates(playerRotation, playerXPosition, playerZPosition, worldPositionOfOpponent[0], worldPositionOfOpponent[1]); if (Math.Abs(alignedCoordiates[0]) > 2) { if (playerGridSide == GridSide.LEFT) { opponentGridSides.Add(opponentAheadPosition, GridSide.RIGHT); } else if (playerGridSide == GridSide.RIGHT) { opponentGridSides.Add(opponentAheadPosition, GridSide.LEFT); } } else if (playerGridSide == GridSide.LEFT) { opponentGridSides.Add(opponentAheadPosition, GridSide.LEFT); } else if (playerGridSide == GridSide.RIGHT) { opponentGridSides.Add(opponentAheadPosition, GridSide.RIGHT); } } opponentAheadPosition--; } return(new Tuple <GridSide, Dictionary <int, GridSide> >(playerGridSide, opponentGridSides)); }
public GridSizeEdit(Session session, GridSide side) { InitializeComponent(); viewModel = new GridSideEditViewModel(session, side); DataContext = viewModel; }