private Slider GetSliderOnTile(Tile tile, SideName side) { if (tile != null) { if (tile.GetType() == typeof(Slider)) { Slider slider = (Slider)tile; //slider moves left/right if left side is not attachable, so it moves on this rail if (!RobuzzleUtilities.IsTileAttachableOnSide(slider, side)) { return(slider); } } else if (tile.GetType() == typeof(SliderRail)) { SliderRail rail = (SliderRail)tile; if (RobuzzleUtilities.IsTileAttachableOnOppositeSide(rail, side)) { return(GetSliderOnTile( grid.GetTileAtPosition(tile.Position + RobuzzleUtilities.GetSideVector(side)), side)); } } } return(null); }
public static SideName GetOppositeSide(SideName side) { switch (side) { case SideName.right: return(SideName.left); case SideName.left: return(SideName.right); case SideName.front: return(SideName.back); case SideName.back: return(SideName.front); case SideName.up: return(SideName.down); case SideName.down: return(SideName.up); } //Code will never get here.. So, to fulfil the requirement of compoiler return(SideName.right); }
private void TryJoiningNeighbor(MovableTile tile, Tile neighbor, SideName side) { if (IsMovable(neighbor)) // the neighbor is attachable/movable { MovableTile neighborMovableTile = (MovableTile)neighbor; bool neighborAttachableOnOppositeSide = RobuzzleUtilities.IsTileAttachableOnOppositeSide(neighborMovableTile, side); if (neighborAttachableOnOppositeSide) //the tile and neighbor can join together { //if the tile neighbor tile are not already attached if (!AreAttached(tile, neighborMovableTile)) { RigidbodyTile RBTile = GetRigidbodyTile(tile); if (RBTile != null)//If neighbor already has a rigidbody, attach both rigidbodies { JoinNeighbor(RBTile, neighborMovableTile, side); } else//join simple movable tile with neighbors -> or can that be done somewhere else { RigidbodyTile RBNeighbor = GetRigidbodyTile(neighborMovableTile); if (RBNeighbor != null) { JoinNeighbor(RBNeighbor, tile, RobuzzleUtilities.GetOppositeSide(side)); //this tile is on the left of neighbor } } } } } }
public override byte[] Serialize() { List <byte> s = new List <byte>(); // serialize SideName s.Add((byte)((SideName == null) ? 0 : 1)); if (SideName != null) { List <byte> tmp63 = new List <byte>(); tmp63.AddRange(BitConverter.GetBytes((uint)SideName.Count())); while (tmp63.Count > 0 && tmp63.Last() == 0) { tmp63.RemoveAt(tmp63.Count - 1); } s.Add((byte)tmp63.Count); s.AddRange(tmp63); s.AddRange(System.Text.Encoding.GetEncoding("ISO-8859-1").GetBytes(SideName)); } // serialize AgentName s.Add((byte)((AgentName == null) ? 0 : 1)); if (AgentName != null) { List <byte> tmp64 = new List <byte>(); tmp64.AddRange(BitConverter.GetBytes((uint)AgentName.Count())); while (tmp64.Count > 0 && tmp64.Last() == 0) { tmp64.RemoveAt(tmp64.Count - 1); } s.Add((byte)tmp64.Count); s.AddRange(tmp64); s.AddRange(System.Text.Encoding.GetEncoding("ISO-8859-1").GetBytes(AgentName)); } // serialize TeamNickname s.Add((byte)((TeamNickname == null) ? 0 : 1)); if (TeamNickname != null) { List <byte> tmp65 = new List <byte>(); tmp65.AddRange(BitConverter.GetBytes((uint)TeamNickname.Count())); while (tmp65.Count > 0 && tmp65.Last() == 0) { tmp65.RemoveAt(tmp65.Count - 1); } s.Add((byte)tmp65.Count); s.AddRange(tmp65); s.AddRange(System.Text.Encoding.GetEncoding("ISO-8859-1").GetBytes(TeamNickname)); } return(s.ToArray()); }
public PositionParameter(SideName sideName) : base(sideName) { KingToMoveLoss = new Plane[nSquares]; PawnToMoveWins = new Plane[nSquares]; #if TestInitHelp || InitFree || !InitHelp Free = new Plane[nSquares]; #endif #if TestInitFree || InitHelp || !InitFree Help = new Plane[nSquares]; #endif }
//TODO: Recheck tile type private void JoinNeighbor(RigidbodyTile tile, MovableTile neighbor, SideName side) { //the neighbor is on left, down or back side of the tile if (side == SideName.left || side == SideName.down || side == SideName.back) { JoinNeighbor(tile, neighbor, true); } else// neighbor is on the right, up or front side of the tile { JoinNeighbor(tile, neighbor, false); } }
private static void displayEarlyMoveCounts(SideName sideName, Int64 lEarlyMoveTotal, Int64 lSearchedPositionCount) { //[Note]Move Ordering is applied in a "Searched Position", not during a quiescence search. if (lSearchedPositionCount == 0) { LogInfo(Level.data, $"{sideName} Early Moves = {lEarlyMoveTotal:n0}"); } else { var dEarlyMovesPerPosition = (Double)lEarlyMoveTotal / lSearchedPositionCount; LogInfo(Level.data, $"{sideName} Early Moves = {lEarlyMoveTotal:n0}; Searched Positions = {lSearchedPositionCount:n0}"); LogInfo(Level.data, $"{sideName} Early Moves/Searched Position = {dEarlyMovesPerPosition:n2}"); } }
private void SetSliderBound(Slider slider, Tile tile, SideName side) { if (tile != null && tile.GetType() == typeof(SliderRail)) { SliderRail rail = (SliderRail)tile; if (RobuzzleUtilities.IsTileAttachableOnOppositeSide(rail, side)) { if (RobuzzleUtilities.IsPositiveSide(side)) { slider.MaxBound = GetExtremeBoundNIgnoreCollision(slider, rail, side); } else { slider.MinBound = GetExtremeBoundNIgnoreCollision(slider, rail, side); } } } }
public BoardParameter(SideName sideName) { SideName = sideName; switch (SideName) { case SideName.Black: ShiftA1H8 = -nA1H8; ShiftA8H1 = -nA8H1; ShiftRank = -nFiles; StartRank = nRankLast; EnPassantRank = 2; RankLast = qpRank1; RankPass = qpRank6; FileLeft = qpFileH; FileRight = qpFileA; Above = qpRank1 | qpRank2 | qpRank3 | qpRank4; Zobrist = ZobristBlack; break; case SideName.White: ShiftA1H8 = nA1H8; ShiftA8H1 = nA8H1; ShiftRank = nFiles; StartRank = 0; EnPassantRank = invertRank(2); RankLast = qpRank8; RankPass = qpRank3; FileLeft = qpFileA; FileRight = qpFileH; Above = qpRank8 | qpRank7 | qpRank6 | qpRank5; Zobrist = ZobristWhite; break; } }
public override byte[] Serialize() { List <byte> s = new List <byte>(); // serialize SideName s.Add((byte)((SideName == null) ? 0 : 1)); if (SideName != null) { List <byte> tmp78 = new List <byte>(); tmp78.AddRange(BitConverter.GetBytes((uint)SideName.Count())); while (tmp78.Count > 0 && tmp78.Last() == 0) { tmp78.RemoveAt(tmp78.Count - 1); } s.Add((byte)tmp78.Count); s.AddRange(tmp78); s.AddRange(System.Text.Encoding.GetEncoding("ISO-8859-1").GetBytes(SideName)); } // serialize AgentName s.Add((byte)((AgentName == null) ? 0 : 1)); if (AgentName != null) { List <byte> tmp79 = new List <byte>(); tmp79.AddRange(BitConverter.GetBytes((uint)AgentName.Count())); while (tmp79.Count > 0 && tmp79.Last() == 0) { tmp79.RemoveAt(tmp79.Count - 1); } s.Add((byte)tmp79.Count); s.AddRange(tmp79); s.AddRange(System.Text.Encoding.GetEncoding("ISO-8859-1").GetBytes(AgentName)); } return(s.ToArray()); }
public static Vector3Int GetSideVector(SideName side) { switch (side) { case SideName.right: return(Vector3Int.right); case SideName.left: return(Vector3Int.left); case SideName.front: return(new Vector3Int(0, 0, 1)); case SideName.back: return(new Vector3Int(0, 0, -1)); case SideName.up: return(Vector3Int.up); case SideName.down: return(Vector3Int.down); } return(Vector3Int.zero); }
public static bool IsTileAttachableOnSide(MovableTile tile, SideName side) { switch (side) { case SideName.right: return(tile.AttachableSides.right); case SideName.left: return(tile.AttachableSides.left); case SideName.front: return(tile.AttachableSides.front); case SideName.back: return(tile.AttachableSides.back); case SideName.up: return(tile.AttachableSides.up); case SideName.down: return(tile.AttachableSides.down); } return(false); }
// Any perpendicular axis to the Vector public static Vector3Int GetPerpendicularSideVector(SideName side) { switch (side) { case SideName.right: return(Vector3Int.up); case SideName.left: return(Vector3Int.down); case SideName.front: return(Vector3Int.right); case SideName.back: return(Vector3Int.left); case SideName.up: return(Vector3Int.right); case SideName.down: return(Vector3Int.left); } return(Vector3Int.zero); }
private Vector3Int GetExtremeBoundNIgnoreCollision(Slider slider, SliderRail rail, SideName side) { Physics.IgnoreCollision(slider.transform.GetChild(0).GetComponent <Collider>(), rail.transform.GetChild(0).GetComponent <Collider>(), true); grid.RemoveTile(rail); if (RobuzzleUtilities.IsTileAttachableOnSide(rail, side)) { Tile tile = grid.GetTileAtPosition(rail.Position + RobuzzleUtilities.GetSideVector(side)); if (tile != null && tile.GetType() == typeof(SliderRail)) { SliderRail rail2 = (SliderRail)tile; if (RobuzzleUtilities.IsTileAttachableOnOppositeSide(rail2, side)) { return(GetExtremeBoundNIgnoreCollision(slider, rail2, side)); } } return(rail.Position); } return(Vector3Int.zero); }
//if a side is right, up, or forward public static bool IsPositiveSide(SideName side) { return(side == SideName.right || side == SideName.up || side == SideName.front); }