示例#1
0
        public void Setup(string[] playerIds, string[] playerNames)
        {
            _stock   = Cards.Count();
            _players = new Dictionary <string, CardPlayer>(playerIds.Length);
            foreach (var cardPlayer in PlayersParent.GetComponentsInChildren <CardPlayer>())
            {
                Destroy(cardPlayer.gameObject);
            }

            for (var i = 0; i < playerIds.Length; i++)
            {
                var playerId   = playerIds[i];
                var prefab     = ServiceManager.User.Id.Equals(playerId) ? MainPlayerPrefab : _extraPlayerPrefab;
                var parent     = ServiceManager.User.Id.Equals(playerId) ? PlayersParent : ExtraPlayersParent;
                var cardPlayer = Instantiate(prefab, parent).GetComponent <CardPlayer>();
                cardPlayer.Name = playerNames[i];
                cardPlayer.Id   = playerId;
                _players.Add(playerId, cardPlayer);
            }
        }
示例#2
0
        private IEnumerator LateNewGame()
        {
            yield return(null);

            _players = new List <CardPlayer>(PlayersParent.GetComponentsInChildren <CardPlayer>());
            foreach (var cardPlayer in _players)
            {
                cardPlayer.SetScore(0);
            }
            if (_players.Count == 0)
            {
                yield break;
            }

            CurrentPlayer.SetFocused(true);
            CardStock.Clear();
            CardStock.AddRange(Cards.Take(_initialStock));
            CardStock.Shuffle();

            Utils.SetChildrenVisible(transform, false);
            Deal(_defaultCards);
        }
示例#3
0
        void Initialize()
        {
            Players = new List <Player>();
            for (int i = 0; i < PlayersParent.childCount; i++)
            {
                var player = PlayersParent.GetChild(i).GetComponent <Player>();
                if (player != null)
                {
                    if (Players.Any(x => x.PlayerNumber == player.PlayerNumber))
                    {
                        Debug.LogError($"Same PlayerNumber '{player.PlayerNumber}' in Players.");
                    }
                    Players.Add(player);
                }
                else
                {
                    Debug.LogError("Invalid object in Players Parent game object");
                }
            }
            NumberOfPlayers     = Players.Count;
            CurrentPlayerNumber = Players.Min(p => p.PlayerNumber);

            Cells = new List <Cell>();
            for (int i = 0; i < transform.childCount; i++)
            {
                var cell = transform.GetChild(i).gameObject.GetComponent <Cell>();
                if (cell != null)
                {
                    Cells.Add(cell);
                }
                else
                {
                    Debug.LogError("Invalid object in cells parent game object");
                }
            }

            foreach (var cell in Cells)
            {
                cell.CellClicked       += OnCellClicked;
                cell.CellHighlighted   += OnCellHighlighted;
                cell.CellDehighlighted += OnCellDehighlighted;
                cell.GetNeighbours(Cells);
            }

            Units = new List <Unit>();
            var unitGenerator = GetComponent <IUnitGenerator>();

            if (unitGenerator != null)
            {
                var units = unitGenerator.SpawnUnits(Cells);
                foreach (var unit in units)
                {
                    Units.Add(unit);
                    unit.UnitClicked   += OnUnitClicked;
                    unit.UnitDestroyed += OnUnitDestroyed;

                    UnitAdded?.Invoke(this, new UnitCreatedEventArgs(unit.transform));
                }
            }
            else
            {
                Debug.LogError("No IUnitGenerator script attached to cell grid");
            }
        }