protected override void OnInspectorGUI()
        {
            base.OnInspectorGUI();

            GPActionEnableComponent action = (GPActionEnableComponent)TargetAction;

            if (m_componentList == null || m_components == null)
            {
                CreateComponentList();
            }

            bool prevThisObject = action._thisObject;

            action._thisObject = EditorGUILayout.ToggleLeft("This Object", action._thisObject);

            if (prevThisObject != action._thisObject)
            {
                if (action._thisObject && action._component != null)
                {
                    action._component       = null;
                    m_componentParentObject = action.ParentGameObject;
                }

                CreateComponentList();
            }

            if (action._thisObject)
            {
                m_componentParentObject = action.ParentGameObject;
            }
            else
            {
                GameObject prevParent = m_componentParentObject;

                m_componentParentObject = (GameObject)EditorGUILayout.ObjectField("Parent Object", prevParent, typeof(GameObject), true);

                if (m_componentParentObject != prevParent)
                {
                    action._component = null;
                    CreateComponentList();
                }
            }

            if (m_componentParentObject == null)
            {
                m_componentList = null;
                m_components    = null;
                return;
            }


            int prevSelectedIdx = m_componentPopupIndex;

            m_componentPopupIndex = EditorGUILayout.Popup("Component", prevSelectedIdx, m_componentList);

            if (prevSelectedIdx != m_componentPopupIndex)
            {
                action._component = m_components[m_componentPopupIndex];
            }
        }
        private void CreateComponentList()
        {
            GPActionEnableComponent action = (GPActionEnableComponent)TargetAction;

            if (m_componentParentObject == null)
            {
                return;
            }

            m_components = m_componentParentObject.GetComponents <Component>();

            m_componentList = new string[m_components.Length];

            m_componentPopupIndex = 0;

            for (int i = 0; i < m_components.Length; i++)
            {
                if (m_components[i] == action._component)
                {
                    m_componentPopupIndex = i;
                }

                m_componentList[i] = m_components[i].GetType().Name + " (" + m_components[i].GetInstanceID() + ")";
            }
        }
        public override void SetAction(GPAction action)
        {
            base.SetAction(action);

            GPActionEnableComponent ecAction = (GPActionEnableComponent)TargetAction;

            if (ecAction._component == null)
            {
                return;
            }

            m_componentParentObject = ecAction._component.gameObject;

            CreateComponentList();
        }