protected virtual void OnGUI()
    {
        if (m_windowInformation == null)
        {
            m_windowInformation = new RopeCreatorWindowInformation();
        }

        EditorGUILayout.BeginHorizontal();

        bool v_refreshClicked = GUILayout.Button("Refresh Informations");

        EditorGUILayout.EndHorizontal();

        if (v_refreshClicked)
        {
            Refresh();
        }

        EditorGUILayout.BeginHorizontal();

        m_windowInformation.RopeParent = (Transform)EditorGUILayout.ObjectField("Rope Parent", m_windowInformation.RopeParent, typeof(Transform), true);

        EditorGUILayout.EndHorizontal();

        if (m_windowInformation.Ropes != null)
        {
            EditorGUILayout.BeginHorizontal();

            GUILayout.Label("Ropes");
            m_windowInformation.SelectedRopeIndex = EditorGUILayout.Popup(m_windowInformation.SelectedRopeIndex, m_windowInformation.Ropes.GetStringList().ToArray());
            Rope2D v_rope = m_windowInformation.Ropes != null && m_windowInformation.SelectedRopeIndex >= 0 && m_windowInformation.Ropes.Count > m_windowInformation.SelectedRopeIndex? m_windowInformation.Ropes[m_windowInformation.SelectedRopeIndex] : null;
            if (m_windowInformation.Rope != v_rope)
            {
                m_windowInformation.Rope = v_rope;
                if (v_rope != null)
                {
                    m_windowInformation.RopeDepth        = v_rope.RopeDepth;
                    m_windowInformation.CustomPrefabNode = v_rope.CustomNodePrefab;
                }
            }
            EditorGUILayout.EndHorizontal();
        }

        if (m_windowInformation.Rope != null)
        {
            EditorGUILayout.BeginHorizontal();

            m_windowInformation.ObjectA = (GameObject)EditorGUILayout.ObjectField("Object A", m_windowInformation.ObjectA, typeof(GameObject), true);

            EditorGUILayout.EndHorizontal();

            EditorGUILayout.BeginHorizontal();

            m_windowInformation.ObjectB = (GameObject)EditorGUILayout.ObjectField("Object B", m_windowInformation.ObjectB, typeof(GameObject), true);

            EditorGUILayout.EndHorizontal();

            //Sorting Layer
            string[] v_sortingLayers = GetSortingLayerNames();
            int      v_sortingIndex  = EditorGUILayout.Popup("Rope Sorting Layer", GetObjectIndexInArrayOrStrings(v_sortingLayers, m_windowInformation.RopeSortingLayerName), v_sortingLayers);
            m_windowInformation.RopeSortingLayerName = v_sortingLayers.Length > v_sortingIndex && v_sortingIndex >= 0? v_sortingLayers[v_sortingIndex] : "Default";

            m_windowInformation.RopeDepth        = EditorGUILayout.IntField("Rope Z Order", m_windowInformation.RopeDepth);
            m_windowInformation.CustomPrefabNode = EditorGUILayout.ObjectField("Custom Node Prefab", m_windowInformation.CustomPrefabNode, typeof(GameObject), false) as GameObject;

            if (m_windowInformation.ObjectA != null && m_windowInformation.ObjectB != null)
            {
                EditorGUILayout.BeginHorizontal();

                GUILayout.Label("Automatic Calculate Amount of Nodes");

                m_windowInformation.AutomaticCalculateNodes = EditorGUILayout.BeginToggleGroup("", m_windowInformation.AutomaticCalculateNodes);
                EditorGUILayout.EndToggleGroup();

                EditorGUILayout.EndHorizontal();

                if (!m_windowInformation.AutomaticCalculateNodes)
                {
                    EditorGUILayout.BeginHorizontal();

                    GUILayout.Label("Amount of Nodes");
                    m_windowInformation.AmountOfNodes = EditorGUILayout.IntField(m_windowInformation.AmountOfNodes);

                    EditorGUILayout.EndHorizontal();
                }

                EditorGUILayout.BeginHorizontal();

                GUILayout.Label("Use Prefab Rope Scale");

                m_windowInformation.UsePrefabRopeScale = EditorGUILayout.BeginToggleGroup("", m_windowInformation.UsePrefabRopeScale);
                EditorGUILayout.EndToggleGroup();

                EditorGUILayout.EndHorizontal();

                EditorGUILayout.BeginHorizontal();

                bool v_buttonClicked = GUILayout.Button("Create Rope");

                EditorGUILayout.EndHorizontal();

                if (v_buttonClicked)
                {
                    CreateRopeClicked();
                }
            }
        }
        if (GUI.changed)
        {
            EditorUtility.SetDirty(this);
        }
    }
	protected virtual void OnGUI ()
	{
		if(m_windowInformation == null)
			m_windowInformation = new RopeCreatorWindowInformation();

		EditorGUILayout.BeginHorizontal();
		
		bool v_refreshClicked = GUILayout.Button("Refresh Informations");
		
		EditorGUILayout.EndHorizontal ();
		
		if(v_refreshClicked)
			Refresh();

		EditorGUILayout.BeginHorizontal();
		
		m_windowInformation.RopeParent = (Transform)EditorGUILayout.ObjectField ("Rope Parent", m_windowInformation.RopeParent, typeof(Transform), true);
		
		EditorGUILayout.EndHorizontal ();

		if(m_windowInformation.Ropes != null)
		{
			EditorGUILayout.BeginHorizontal();
			
			GUILayout.Label("Ropes");
			m_windowInformation.SelectedRopeIndex = EditorGUILayout.Popup(m_windowInformation.SelectedRopeIndex, m_windowInformation.Ropes.GetStringList().ToArray());
			Rope2D v_rope = m_windowInformation.Ropes != null && m_windowInformation.SelectedRopeIndex >=0 && m_windowInformation.Ropes.Count > m_windowInformation.SelectedRopeIndex? m_windowInformation.Ropes[m_windowInformation.SelectedRopeIndex] : null; 
			if(m_windowInformation.Rope != v_rope)
			{
				m_windowInformation.Rope = v_rope;
				if(v_rope != null)
				{
					m_windowInformation.RopeDepth = v_rope.RopeDepth;
					m_windowInformation.CustomPrefabNode = v_rope.CustomNodePrefab;
				}
			}
			EditorGUILayout.EndHorizontal ();
		}

		if(m_windowInformation.Rope != null)
		{
			EditorGUILayout.BeginHorizontal();
			
			m_windowInformation.ObjectA = (GameObject)EditorGUILayout.ObjectField ("Object A", m_windowInformation.ObjectA, typeof(GameObject), true);
			
			EditorGUILayout.EndHorizontal ();

			EditorGUILayout.BeginHorizontal();
			
			m_windowInformation.ObjectB = (GameObject)EditorGUILayout.ObjectField ("Object B", m_windowInformation.ObjectB, typeof(GameObject), true);
			
			EditorGUILayout.EndHorizontal ();

			//Sorting Layer
			string[] v_sortingLayers = GetSortingLayerNames();
			int v_sortingIndex = EditorGUILayout.Popup("Rope Sorting Layer", GetObjectIndexInArrayOrStrings(v_sortingLayers, m_windowInformation.RopeSortingLayerName), v_sortingLayers);
			m_windowInformation.RopeSortingLayerName = v_sortingLayers.Length > v_sortingIndex && v_sortingIndex >=0? v_sortingLayers[v_sortingIndex] : "Default";

			m_windowInformation.RopeDepth = EditorGUILayout.IntField("Rope Z Order", m_windowInformation.RopeDepth);
			m_windowInformation.CustomPrefabNode = EditorGUILayout.ObjectField("Custom Node Prefab", m_windowInformation.CustomPrefabNode, typeof(GameObject), false) as GameObject;

			if(m_windowInformation.ObjectA != null && m_windowInformation.ObjectB != null)
			{
				EditorGUILayout.BeginHorizontal();
				
				GUILayout.Label("Automatic Calculate Amount of Nodes");

				m_windowInformation.AutomaticCalculateNodes = EditorGUILayout.BeginToggleGroup("", m_windowInformation.AutomaticCalculateNodes);
				EditorGUILayout.EndToggleGroup();

				EditorGUILayout.EndHorizontal ();

				if(!m_windowInformation.AutomaticCalculateNodes)
				{
					EditorGUILayout.BeginHorizontal();

					GUILayout.Label("Amount of Nodes");
					m_windowInformation.AmountOfNodes = EditorGUILayout.IntField(m_windowInformation.AmountOfNodes);
					
					EditorGUILayout.EndHorizontal ();
				}

				EditorGUILayout.BeginHorizontal();
				
				GUILayout.Label("Use Prefab Rope Scale");
				
				m_windowInformation.UsePrefabRopeScale = EditorGUILayout.BeginToggleGroup("", m_windowInformation.UsePrefabRopeScale);
				EditorGUILayout.EndToggleGroup();
				
				EditorGUILayout.EndHorizontal ();

				EditorGUILayout.BeginHorizontal();

				bool v_buttonClicked = GUILayout.Button("Create Rope");

				EditorGUILayout.EndHorizontal ();

				if(v_buttonClicked)
					CreateRopeClicked();
			}
		}
		if(GUI.changed)
			EditorUtility.SetDirty(this);
	}