public void Paint(int col, int row)
        {
            //out of bounds don't paint
            if (!targetLevel.IsInsideGridBounds(col, row))
            {
                return;
            }
            //paint over a piece
            DestroyLevelPiece(col, row);
            //paint new one
            //TODO mark dirty when change done.
            EditorGUI.BeginChangeCheck();
            if (EditorGUI.EndChangeCheck())
            {
                Undo.RecordObject(target, "obj.name Added");
            }
            GameObject obj = PrefabUtility.InstantiatePrefab(paletteItemSelected.transform.gameObject) as GameObject;

            //set the new prefab as a child to the level
            obj.transform.parent   = targetLevel.transform;
            obj.name               = string.Format("[{0},{1}][{2}]", col, row, obj.name);
            obj.transform.position = targetLevel.GridToWorldCoordinates(col, row);
            obj.hideFlags          = HideFlags.HideInHierarchy;
            var gamepiece = obj.GetComponent <LevelPiece> ();

            //add new prefab to level pieces array
            //targetLevel.setLevelPiece(col,row,gamepiece);

            prefabList.Add(gamepiece);
            renderedLevelGrid[col][row] = prefabList.IndexOf(gamepiece);
        }