void Update()
        {
            //Phase One ADD GMC
            if(_menuController != null && _addingMenuController)
            {
                if (!EditorApplication.isCompiling)
                {
                    try
                    {
                        _GMC = (GenericMenuController)UnityEngineInternal.APIUpdaterRuntimeServices.AddComponent(_menuController, "Assets/Editor/MenuCreator.cs (94,51)", _menuController.name + GameDataInfo.GetMenuClassBaseSuffix);
                    }
                    catch (System.Exception ex)
                    {
                        Debug.Log(ex.ToString());
                    }

                    finally
                    {
                        if (_GMC != null)
                        {
                            _addingMenuController = false;
                            _addingInterface3D    = true;
                        }
                    }
                }
            }

            //Phase two Add Interface3Dbutton
            if (_addingInterface3D && !_lockCreation){

                int totalOptions = _menuOptions.Length;
                _lockCreation = true;
                Debug.Log("Locking");
                GameObject[] optionObjects = new GameObject[totalOptions];
                UnityEngine.Object parentAsObj = PrefabUtility.InstantiatePrefab(_menuController);
                AssetDatabase.Refresh();
                GameObject parent = (GameObject)parentAsObj;

                for(int i = 0; i < totalOptions; ++i)
                {

                    optionObjects[i]         = new GameObject();
                    optionObjects[i].name    = _menuOptions[i];

                    Interface3DButton   button =   optionObjects[i].AddComponent<Interface3DButton>();

                    if(_useCustomTextures[i])
                    {
                        if(_optionTextures != null)
                        {
                            button.textures = _optionTextures[i];
                            button.GetComponent<GUITexture>().texture = button.textures.normal;
                        }
                        else
                        {
                            EditorUtility.DisplayDialog("Button Textures not found!",
                                                        "Option [" + _menuOptions[i] + "]",
                                                        "Shit", "f**k");
                            Texture2D temp = new Texture2D(32, 32);
                            button.GetComponent<GUITexture>().texture = temp;
                        }

                    }
                    button.useBackgroundColors = _useBackgroundColors[i];

                    optionObjects[i].transform.parent = parent.transform;

                    //try
                    //{
                    //    if (_useCustomTextures[i])
                    //    {
                    //        button.textures.UseTextures(true);
                    //        but
                    //    }
                    //}
                    //catch (System.Exception ex)
                    //{
                    //    Debug.Log("Couldn't Add Textures Try again later?" + ex.ToString());
                    //}
                }
                _addingInterface3D = false;
                _lockCreation = false;

                PsiEngine.GameDataInfo.CreateNewPrefab(parent, PsiEngine.GameDataInfo.GetMenuPrefabPath(parent.name));
            }
        }
 private void OnFinished()
 {
     _GMC = null;
     _menuController = null;
     _useBackgroundColors = null;
     _hasBackground = null;
     _useCustomTextures = null;
     _menuOptions = null;
     _optionTextures = null;
 }