Card/Tile Game, loops dont update element0 of playerHand properly

In Unity 2D:
I have a Tile class, PlayerTileTray class, PlayerTileTrayManager class and a TileManager class.

TileManager creates a List and adds elements to the list, setting the Tile variables.
TileManager has a Deal Method with an OnTileSent(Tile sentTile) event that sends the top tile as a parameter.

PlayerTileTrayManager listens to the event using the OnTileSent Method.
PlayerTileTrayManager’s job is to take that tileSent and place it in one of several _trays in a PlaceTileInFirstEmptySlotOfTrays method.
I am currently using an array of trays called _tray.

If an next element of the _tray array is null, I Instantiate a gameObject Prefab representing the tray and add a PlayerTileTray instance to the prefab as _tray[trayIndex].

The PlayerTileTray has an array of bools,slotFull, to show whether a slot is full.
In the PlayerTileTrayManager: I loop through _tray and then slots of that tray to call the UpdateTrayWithTile method of PlayerTileTray UpdateTrayWiltTile adds the tile to a List in _tray, then trys to update the _tray bool variables emptyTray, fullTray and slotFull.

The main problem I am having
I am currently using a nested for loop. I have tried do while loops.
The first bool element slotFull[0] never gets set to true despite how I try to make it true. When the first tile is dealt, slotFull[0] stays false. When the second tile is dealt both slotFull[0] and slotFull[1] are true;

The results of everything else is achieved or will be if I can fix the first element
of slotFull updating properly…


using UnityEngine;
using System;
using System.Collections;
using System.Collections.Generic;

public class TileManager :MonoBehaviour
	//For testing
	private int _topTile = 0;
	private List<Tile> _fullStackTiles = new List<Tile>();
	private static int _stockTileCount = 16;
	private static int _numberOfTileSets = 4;

	public int tilesToDeal = 1;
	public static Dictionary <string,Tile> stockTiles = new Dictionary <string,Tile>();
	public static List<Tile> shuffledTiles = new List<Tile>() ;
	public static int maxTiles = _numberOfTileSets * _stockTileCount;

	/ **Singleton Stuff and Delegate,Event and Publisher Method removed for Brevity */
  	void Awake(){
		_instance = this;  //  <--Singleton
	void Start(){
		AssignTiles ();
		shuffledTiles = _fullStackTiles;

		//Shuffle is located in MyExtensions
	void AssignTiles(){/* Method Contents removed for Brevity */ }

	void createFullStackWithSetOf(int numSets){
		//Create a stack of tiles with _numOfTileSets of stockTiles
		foreach(KeyValuePair<string,Tile> t in stockTiles){
			for(int i = 0; i < numSets; i++)
	public void Deal(int numIilesToDeal){
		for(int i = 0; i < numIilesToDeal; i++){
			//TileSend method is near the beginning of this script in the Delegate #region
			//TileSend (shuffledTiles[_topTile]);

			//create node for instantiated tile
			//insert tile into Node


using UnityEngine;
using System.Collections;
using System.Collections.Generic;

public class PlayerTileTrayManager : MonoBehaviour {

	private static int _maxNumberOfTrays = TileManager.maxTiles / PlayerTileTray.trayMax;
	private List<Tile> _playerTiles = new List<Tile>();
	private GameObject _tilePrefab;
	private PlayerTileTray[] _tray = new PlayerTileTray[8];

	public Tile tileFromDraw;
	public GameObject TrayPrefab;
	List <GameObject> _trayObject  = new List<GameObject>();
	void OnEnable(){
		TileManager.Instance.TileSent += OnTileSent;
	void OnDisable(){
		TileManager.Instance.TileSent -= OnTileSent;

	void OnTileSent(object source, Tile tileSent){
		_playerTiles.Add (tileSent);
		PlaceTileInFirstEmptySlotOfTrays (tileSent);
		GameObject go = PrefabMap.Instance.GetValueByKey(tileSent.tileName);
		Instantiate (go,,Quaternion.identity);

		//move _tilePrefab to childLocation
	void PlaceTileInFirstEmptySlotOfTrays(Tile placeTile)
		for(int trayIndex = 0;trayIndex < _maxNumberOfTrays;trayIndex++){
			//for(int slotIndex = 0; slotIndex < PlayerTileTray.trayMax; slotIndex ++)
			int slotIndex = 0;
				if(_tray[trayIndex] == null)
					_trayObject.Add (Instantiate (TrayPrefab,, Quaternion.identity) as GameObject);
					_tray[trayIndex] = _trayObject[trayIndex].GetComponent<PlayerTileTray>();
				if (!_tray[trayIndex].fullTray)
						Debug.Log (placeTile.tileName + "was placed in the " + trayIndex + " trayIndex iteration and in the " + 
						           slotIndex + " slotIndex iteration.");
			}while(slotIndex < PlayerTileTray.trayMax);
	public void showHand(){/* Not relevant to the Question*/	}


using UnityEngine;
using System.Collections;
using System.Collections.Generic;
public class PlayerTileTray :MonoBehaviour{

	public static int trayMax = 8;

	public bool[] fullSlot;
	public bool fullTray;
	public bool emptyTray;

	public Tile tileFromTrayManager;
	public List<Tile> tilesInTray = new List<Tile>();

	public PlayerTileTray(){
		fullSlot = new bool[trayMax];
		fullTray = false;
		emptyTray = true;
	void Start(){
		for(int i = 0; i < trayMax; i++)
			fullSlot *= false;*
  • }*
  • public void UpdateTrayWithTile(Tile tileToTray){*
  •  tilesInTray.Add (tileToTray);*
  •  for (int i = 0; i < tilesInTray.Count; i++)*

_ fullSlot = true;_
* if(tilesInTray.Count >= 0)*
* emptyTray = false;*
* if(tilesInTray.Count >= 8)*
* fullTray = true;*
* }*


In the PlayerTileTray, I initaized my Boolean array in Start(). I changed this to Awake and code worked as expected.