public StoneHandle Pop() { StoneHandle stone = Stones.Last(); Stones.RemoveAt(Stones.Count - 1); return(stone); }
public void Push(StoneHandle stone) { float stackHeight = 0; foreach (StoneHandle child in Stones) { Bounds extent = child.GetComponent <Collider>().bounds; stackHeight = Mathf.Max(stackHeight, extent.extents.y + child.transform.position.y); } Stones.Add(stone); stone.transform.parent = this.transform; float stoneBottom = stone.GetComponent <Collider>().bounds.extents.y; stone.transform.localPosition = new Vector3(0, stackHeight + stoneBottom, 0); }
public void SetupGameFromBoardState(BoardState state) { PlayerReserves = new PlayerReserve[] { DarkPlayerReserve, LightPlayerReserve }; GameState = state; BoardSize = state.BoardSize; // Setup player reserves. for (int player = 0; player < 2; ++player) { PlayerState playerState = GameState.GetPlayerState((Player)player); PlayerReserves[player].RandomSeed = 42; PlayerReserves[player].SetupGame(playerState); } Board.Clear(); Board.SetupBoard(); // Add stones to board. Random.InitState(42); for (int y = 0; y < BoardSize; ++y) { for (int x = 0; x < BoardSize; ++x) { StoneStack stones = GameState[x, y].GetReversed(); while (stones.Count > 0) { Stone stone = stones.Pop(); //StoneHandle newStone; PlayerReserve owner = PlayerReserves[(int)stone.Owner]; bool isCapstone = (stone.Type == StoneType.Capstone); StoneHandle newStone = Instantiate(isCapstone ? owner.Capstone : owner.Stone); newStone.SetOwner(stone.Owner); if (stone.Type == StoneType.StandingStone) { newStone.Flip(); } Board[x, y].Push(newStone); } } } }