public void UpdateTileState(TileType newType, float newGrowth, int[] direction ){
		if (!m_initialized) {
			InitializeTileController ();
		}

		if (newType != m_tileType) {
			m_tileType = newType;
			CreateVisualizationForType ();
		}

		if (m_vizController == null) {
			m_vizController = transform.GetChild (0).GetComponent<TileVizController> ();
			if (m_tileType == TileType.TILE_VINE) {
				(m_vizController as VineTileController).InitializeViz ();
			}
		}

		if (newGrowth != m_tileGrowth) {
			// Update the Visualization To Reflect New Growth
			m_tileGrowth = newGrowth;
			m_vizController.UpdateViz (newGrowth);

			float mod = Random.Range (0.0f, 2.0f);
			if (m_tileGrowth + mod >= 8.0f) {
				if (m_tileType == TileType.TILE_FLOWERS) {
					Instantiate (Resources.Load ("Flower"), 
						transform.position,
						Quaternion.identity);
				} else if (m_tileType == TileType.TILE_TREE) {
					Instantiate (Resources.Load("Apple"),
						transform.position,
						Quaternion.identity);
				}
			}
		}

		if (m_tileType == TileType.TILE_VINE && direction[0] != 0) {
			VineTileController vineTC = m_vizController as VineTileController;
			vineTC.SetGrowthDirections (direction);
		}
	}
	void CreateVisualizationForType(){

		EraseDefaultViz ();

		if (m_tileSingle == null) {
			m_tileSingle = FindObjectOfType (typeof(TileSingleton)) as TileSingleton;
		}

		if (m_tileType == TileType.TILE_RANDOM) {
			m_tileType = (TileType)Random.Range (0, 6);
			CreateVisualizationForType ();
			return;
		}

		m_tileVizPrefab = Instantiate (m_tileSingle.GetPrefabOfType (m_tileType), transform.position, Quaternion.identity) as GameObject;
		m_tileVizPrefab.transform.parent = gameObject.transform;
		m_vizController = m_tileVizPrefab.GetComponent<TileVizController> ();
		m_vizController.InitializeViz ();
	}