public override void OnInspectorGUI()
        {
            LevelsManager attrib = (LevelsManager)target;//get the target

            EditorGUILayout.Separator();
            EditorGUILayout.LabelField("Instructions :");
            EditorGUILayout.Separator();

            EditorGUILayout.HelpBox("* Select number of Rows and Columns to create a Grid of Size equals [Rows x Columns].", MessageType.None);
            EditorGUILayout.HelpBox("* Click on 'Create New Level' to create a new Level for the Mission", MessageType.None);
            EditorGUILayout.HelpBox("* Click on 'Remove Levels' to remove all Levels in the Mission", MessageType.None);
            EditorGUILayout.HelpBox("* Click on 'View Grid' to show the grid of the Level", MessageType.None);
            EditorGUILayout.HelpBox("* Click on 'Create New Pair' to create a new pair of elements for the Level ", MessageType.None);
            EditorGUILayout.HelpBox("* Click on 'Remove Pairs' to remove all pairs in Level", MessageType.None);
            EditorGUILayout.HelpBox("* Click on 'Remove Level' to remove the Level from the Mission", MessageType.None);
            EditorGUILayout.HelpBox("* Click on 'Remove Pair' to remove the pair from the Level", MessageType.None);
            EditorGUILayout.Separator();
            attrib.numberOfRows = EditorGUILayout.IntSlider("Number of Rows", attrib.numberOfRows, 2, LevelsManager.rowsLimit);
            EditorGUILayout.Separator();
            attrib.numberOfCols = EditorGUILayout.IntSlider("Number of Columns", attrib.numberOfCols, 2, LevelsManager.colsLimit);
            EditorGUILayout.Separator();

            attrib.defaultPairSprite = EditorGUILayout.ObjectField("Default Pair Sprite", attrib.defaultPairSprite, typeof(Sprite), true) as Sprite;
            EditorGUILayout.Separator();

			attrib.defaultOnConnectPairSprite = EditorGUILayout.ObjectField("Default Pair Sprite", attrib.defaultOnConnectPairSprite, typeof(Sprite), true) as Sprite;
			EditorGUILayout.Separator();

			attrib.defaultOnConnectBGSprite = EditorGUILayout.ObjectField("Default Background Sprite", attrib.defaultOnConnectBGSprite, typeof(Sprite), true) as Sprite;
			EditorGUILayout.Separator();

			attrib.defaultBarrierSprite = EditorGUILayout.ObjectField("Default Barrier Sprite", attrib.defaultBarrierSprite, typeof(Sprite), true) as Sprite;
			EditorGUILayout.Separator();

			attrib.defaultPairs = EditorGUILayout.Toggle("Set Pair Sprites To Default", attrib.defaultPairs);
			EditorGUILayout.Separator();

			attrib.defaulOnConnectPairs = EditorGUILayout.Toggle("Set On Connect Sprites To Default", attrib.defaulOnConnectPairs);
			EditorGUILayout.Separator();

			attrib.defaulOnConnectBGs = EditorGUILayout.Toggle("Set On Connect Background Sprites To Default", attrib.defaulOnConnectBGs);
			EditorGUILayout.Separator();

			attrib.defaultBarriers = EditorGUILayout.Toggle("Set Barrier Sprites To Default", attrib.defaultBarriers);
			EditorGUILayout.Separator();

            attrib.createRandomColor = EditorGUILayout.Toggle("Create Random Color", attrib.createRandomColor);
            EditorGUILayout.Separator();

            if (previousNumberOfRows == -1)
            {
                previousNumberOfRows = attrib.numberOfRows;
            }

            if (previousNumberOfCols == -1)
            {
                previousNumberOfCols = attrib.numberOfCols;
            }

            if (previousNumberOfCols != attrib.numberOfCols || previousNumberOfRows != attrib.numberOfRows)
            {

                if (attrib.levels.Count != 0)
                {
                    dialogResult = EditorUtility.DisplayDialogComplex("Confirm Message", "Changing grid size leads to reset all levels", "ok", "cancel", "close");
                    if (dialogResult == 0)
                    {
                        RemoveLevels(attrib);
                    }
                    else {
                        attrib.numberOfRows = previousNumberOfRows;
                        attrib.numberOfCols = previousNumberOfCols;
                    }
                }
                else {
                    RemoveLevels(attrib);
                }
            }

            GUILayout.BeginHorizontal();

            GUI.backgroundColor = greenColor;
            if (GUILayout.Button("Create New Level", GUILayout.Width(150), GUILayout.Height(30)))
            {
				
                CreateNewLevel(attrib);
            }
            GUI.backgroundColor = whiteColor;

            if (attrib.levels.Count != 0)
            {
                GUI.backgroundColor = redColor;
                if (GUILayout.Button("Remove Levels", GUILayout.Width(150), GUILayout.Height(30)))
                {
                    dialogResult = EditorUtility.DisplayDialogComplex("Removing Levels", "Are you sure you want to remove all levels ?", "yes", "cancel", "close");
                    if (dialogResult == 0)
                    {
                        RemoveLevels(attrib);
                    }
                }
                GUI.backgroundColor = whiteColor;
            }

            GUILayout.EndHorizontal();
            GUILayout.Box("", GUILayout.ExpandWidth(true), GUILayout.Height(2));
            EditorGUILayout.Separator();
            EditorGUILayout.Separator();

            for (int i = 0; i < attrib.levels.Count; i++)
            {
                GUI.contentColor = yellowColor;
                attrib.levels[i].showLevel = EditorGUILayout.Foldout(attrib.levels[i].showLevel, " [Level " + (i + 1) + "]");
                GUI.contentColor = whiteColor;

                if (attrib.levels[i].showLevel)
                {
                    EditorGUILayout.Separator();
                    GUILayout.BeginVertical();
                    attrib.levels[i].showPairsNumber = EditorGUILayout.Toggle("Show Pairs Number", attrib.levels[i].showPairsNumber);
                    EditorGUILayout.Separator();

                    GUILayout.EndVertical();


                    GUI.backgroundColor = cyanColor;
                    GUILayout.BeginHorizontal();
                    if (GUILayout.Button("View Grid", GUILayout.Width(360), GUILayout.Height(30)))
                    {
                        DrawLinesEditors.GridWindowEditor.Init(attrib.levels[i], "Level " + (i + 1) + " Grid", attrib.numberOfRows, attrib.numberOfCols);
                    }
                    GUI.backgroundColor = whiteColor;

                    GUILayout.EndHorizontal();

                    GUILayout.BeginHorizontal();
                    GUI.backgroundColor = greenColor;

                    if (GUILayout.Button("Create New Pair", GUILayout.Width(110), GUILayout.Height(30)))
                    {
                        if (attrib.levels[i].dotsPairs.Count < attrib.numberOfRows * attrib.numberOfCols / 2)
                        {
                            CreateNewPair(attrib, attrib.levels[i]);
                        }
                        else {
                            EditorUtility.DisplayDialog("Limit Reached", "You can't add more pairs", "ok");
                        }
                    }

                    if (GUILayout.Button("Create New Barrier", GUILayout.Width(110), GUILayout.Height(30)))
                    {
                        if (attrib.levels[i].dotsPairs.Count < attrib.numberOfRows * attrib.numberOfCols / 2)
                        {
                            CreateNewBarrier(attrib, attrib.levels[i]);
                        }
                        else {
                            EditorUtility.DisplayDialog("Limit Reached", "You can't add more pairs", "ok");
                        }
                    }
                    GUI.backgroundColor = whiteColor;

                    GUI.backgroundColor = redColor;
                    if (GUILayout.Button("Remove Pairs", GUILayout.Width(120), GUILayout.Height(30)))
                    {
                        dialogResult = EditorUtility.DisplayDialogComplex("Removing Level Pairs", "Are you sure you want to remove the pairs of Level" + (i + 1) + " ?", "yes", "cancel", "close");
                        if (dialogResult == 0)
                        {
                            RemoveLevelPairs(attrib.levels[i], attrib);
                            continue;
                        }
                    }
                    GUI.backgroundColor = whiteColor;

                    GUI.backgroundColor = redColor;
                    if (GUILayout.Button("Remove Level " + (i + 1), GUILayout.Width(120), GUILayout.Height(30)))
                    {
                        dialogResult = EditorUtility.DisplayDialogComplex("Removing Level", "Are you sure you want to remove level " + (i + 1) + " ?", "yes", "cancel", "close");
                        if (dialogResult == 0)
                        {
                            RemoveLevel(i, attrib);
                            continue;
                        }
                    }
                    GUI.backgroundColor = whiteColor;

                    GUILayout.EndHorizontal();


                    EditorGUILayout.Separator();
                    GUILayout.Box("", GUILayout.ExpandWidth(true), GUILayout.Height(2));

                    EditorGUILayout.Separator();

                    for (int j = 0; j < attrib.levels[i].dotsPairs.Count; j++)
                    {
                        attrib.levels[i].dotsPairs[j].showPair = EditorGUILayout.Foldout(attrib.levels[i].dotsPairs[j].showPair, "Pair " + (j + 1));

                        if (attrib.levels[i].dotsPairs[j].showPair)
                        {

                            GUI.backgroundColor = redColor;
                            if (GUILayout.Button("Remove Pair " + (j + 1), GUILayout.Width(120), GUILayout.Height(25)))
                            {
                                dialogResult = EditorUtility.DisplayDialogComplex("Removing Pair", "Are you sure you want to remove pair " + (j + 1) + " ?", "yes", "cancel", "close");
                                if (dialogResult == 0)
                                {
                                    RemovePair(j, attrib.levels[i], attrib);
                                    continue;
                                }
                            }
                            GUI.backgroundColor = whiteColor;

                            EditorGUILayout.Separator();
							if (attrib.levels[i].dotsPairs[j].pairSprite == null || attrib.defaultPairs)
                            {
								attrib.levels[i].dotsPairs[j].pairSprite = attrib.defaultPairSprite;
                            }

							if (attrib.levels[i].dotsPairs[j].connectSprite == null || attrib.defaulOnConnectPairs)
                            {
								attrib.levels[i].dotsPairs[j].connectSprite = attrib.defaultOnConnectPairSprite;
                            }

							if (attrib.levels[i].dotsPairs[j].connectBGSprite == null || attrib.defaulOnConnectBGs)
							{
								attrib.levels[i].dotsPairs[j].connectBGSprite = attrib.defaultOnConnectBGSprite;
							}

							attrib.levels[i].dotsPairs[j].pairSprite = EditorGUILayout.ObjectField("Normal Sprite", attrib.levels[i].dotsPairs[j].pairSprite, typeof(Sprite), true) as Sprite;
                            EditorGUILayout.Separator();

                            attrib.levels[i].dotsPairs[j].connectSprite = EditorGUILayout.ObjectField("OnConnect Sprite", attrib.levels[i].dotsPairs[j].connectSprite, typeof(Sprite), true) as Sprite;
                            EditorGUILayout.Separator();

							attrib.levels[i].dotsPairs[j].connectBGSprite = EditorGUILayout.ObjectField("OnConnect Background Sprite", attrib.levels[i].dotsPairs[j].connectBGSprite, typeof(Sprite), true) as Sprite;
							EditorGUILayout.Separator();

							attrib.levels [i].dotsPairs [j].wireIndex = EditorGUILayout.Popup(attrib.levels [i].dotsPairs [j].wireIndex, new string[] {"Aluminum", "Copper", "Gold", "Silver"});

							switch (attrib.levels [i].dotsPairs [j].wireIndex) {
							case 0:
								myWireType = Level.WireTypes.Aluminum;
								spriteColor = aluminumColor;
								onConnectColor = aluminumOnConnectColor;
								onConnectBGColor = aluminumOnConnectBGColor;
								wireColor = aluminumWireColor;
								break;
							case 1:
								myWireType = Level.WireTypes.Copper;
								spriteColor = copperColor;
								onConnectColor = copperOnConnectColor;
								onConnectBGColor = copperOnConnectBGColor;
								wireColor = copperWireColor;
								break;
							case 2:
								myWireType = Level.WireTypes.Gold;
								spriteColor = goldColor;
								onConnectColor = goldOnConnectColor;
								onConnectBGColor = goldOnConnectBGColor;
								wireColor = goldWireColor;
								break;
							case 3:
								myWireType = Level.WireTypes.Silver;
								spriteColor = silverColor;
								onConnectColor = silverOnConnectColor;
								onConnectBGColor = silverOnConnectBGColor;
								wireColor = silverWireColor;
								break;
							default:
								break;
							}
							EditorGUILayout.Separator();
							attrib.levels [i].dotsPairs [j].wireType = myWireType;
							attrib.levels [i].dotsPairs [j].pairColor = spriteColor;
							attrib.levels [i].dotsPairs [j].onConnectColor = onConnectColor;
							attrib.levels [i].dotsPairs [j].bgColor = onConnectBGColor;
							attrib.levels [i].dotsPairs [j].lineColor = wireColor;

							attrib.levels[i].dotsPairs[j].pairColor = EditorGUILayout.ColorField("Pair Sprite Color", attrib.levels[i].dotsPairs[j].pairColor);
                            EditorGUILayout.Separator();

							attrib.levels[i].dotsPairs[j].onConnectColor = EditorGUILayout.ColorField("On Connect Color", attrib.levels[i].dotsPairs[j].onConnectColor);
							EditorGUILayout.Separator();

							attrib.levels[i].dotsPairs[j].bgColor = EditorGUILayout.ColorField("Background Color", attrib.levels[i].dotsPairs[j].bgColor);
							EditorGUILayout.Separator();

                            attrib.levels[i].dotsPairs[j].lineColor = EditorGUILayout.ColorField("Line Color", attrib.levels[i].dotsPairs[j].lineColor);
                            EditorGUILayout.Separator();

                            attrib.levels[i].dotsPairs[j].applyColorOnSprite = EditorGUILayout.Toggle("Apply Color On Sprite", attrib.levels[i].dotsPairs[j].applyColorOnSprite);
                            EditorGUILayout.Separator();

                            attrib.levels[i].dotsPairs[j].firstDot.index = EditorGUILayout.IntSlider("First Element Index", attrib.levels[i].dotsPairs[j].firstDot.index, 0, attrib.numberOfRows * attrib.numberOfCols - 1);
                            EditorGUILayout.Separator();
                            attrib.levels[i].dotsPairs[j].secondDot.index = EditorGUILayout.IntSlider("Second Element Index", attrib.levels[i].dotsPairs[j].secondDot.index, 0, attrib.numberOfRows * attrib.numberOfCols - 1);
							EditorGUILayout.Separator();
						}
                    }


                    for (int j = 0; j < attrib.levels[i].barriers.Count; j++)
                    {
                        attrib.levels[i].barriers[j].showPair = EditorGUILayout.Foldout(attrib.levels[i].barriers[j].showPair, "Barrier " + (j + 1));

                        if (attrib.levels[i].barriers[j].showPair)
                        {
                            GUI.backgroundColor = redColor;
                            if (GUILayout.Button("Remove Barrier " + (j + 1), GUILayout.Width(120), GUILayout.Height(25)))
                            {
                                dialogResult = EditorUtility.DisplayDialogComplex("Removing Barrier", "Are you sure you want to remove barrier " + (j + 1) + " ?", "yes ;)", "cancel", "close");
                                if (dialogResult == 0)
                                {
                                    RemoveBarrier(j, attrib.levels[i], attrib);
                                    continue;
                                }
                            }
                            GUI.backgroundColor = whiteColor;

                            EditorGUILayout.Separator();
							if (attrib.levels[i].barriers[j].sprite == null || attrib.defaultBarriers)
                            {
                                attrib.levels[i].barriers[j].sprite = attrib.defaultBarrierSprite;
                            }

                            attrib.levels[i].barriers[j].sprite = EditorGUILayout.ObjectField("Normal Sprite", attrib.levels[i].barriers[j].sprite, typeof(Sprite), true) as Sprite;
                            EditorGUILayout.Separator();

                            attrib.levels[i].barriers[j].color = EditorGUILayout.ColorField("Sprite Color", attrib.levels[i].barriers[j].color);
                            EditorGUILayout.Separator();

                            attrib.levels[i].barriers[j].index = EditorGUILayout.IntSlider("Barrier Index", attrib.levels[i].barriers[j].index, 0, attrib.numberOfRows * attrib.numberOfCols - 1);
                        }
                    }
                }
            }
        }
Exemple #2
0
        public override void OnInspectorGUI()
        {
            LevelsManager attrib = (LevelsManager)target;//get the target

            EditorGUILayout.Separator();
            EditorGUILayout.LabelField("Instructions :");
            EditorGUILayout.Separator();

            EditorGUILayout.HelpBox("* Select number of Rows and Columns to create a Grid of Size equals [Rows x Columns].", MessageType.None);
            EditorGUILayout.HelpBox("* Click on 'Create New Level' to create a new Level for the Mission", MessageType.None);
            EditorGUILayout.HelpBox("* Click on 'Remove Levels' to remove all Levels in the Mission", MessageType.None);
            EditorGUILayout.HelpBox("* Click on 'View Grid' to show the grid of the Level", MessageType.None);
            EditorGUILayout.HelpBox("* Click on 'Create New Pair' to create a new pair of elements for the Level ", MessageType.None);
            EditorGUILayout.HelpBox("* Click on 'Remove Pairs' to remove all pairs in Level", MessageType.None);
            EditorGUILayout.HelpBox("* Click on 'Remove Level' to remove the Level from the Mission", MessageType.None);
            EditorGUILayout.HelpBox("* Click on 'Remove Pair' to remove the pair from the Level", MessageType.None);
            EditorGUILayout.Separator();
            attrib.numberOfRows = EditorGUILayout.IntSlider("Number of Rows", attrib.numberOfRows, 2, LevelsManager.rowsLimit);
            EditorGUILayout.Separator();
            attrib.numberOfCols = EditorGUILayout.IntSlider("Number of Columns", attrib.numberOfCols, 2, LevelsManager.colsLimit);
            EditorGUILayout.Separator();

            attrib.defaultPairSprite = EditorGUILayout.ObjectField("Default Pair Sprite", attrib.defaultPairSprite, typeof(Sprite), true) as Sprite;
            EditorGUILayout.Separator();

            attrib.defaultOnConnectPairSprite = EditorGUILayout.ObjectField("Default Pair Sprite", attrib.defaultOnConnectPairSprite, typeof(Sprite), true) as Sprite;
            EditorGUILayout.Separator();

            attrib.defaultOnConnectBGSprite = EditorGUILayout.ObjectField("Default Background Sprite", attrib.defaultOnConnectBGSprite, typeof(Sprite), true) as Sprite;
            EditorGUILayout.Separator();

            attrib.defaultBarrierSprite = EditorGUILayout.ObjectField("Default Barrier Sprite", attrib.defaultBarrierSprite, typeof(Sprite), true) as Sprite;
            EditorGUILayout.Separator();

            attrib.defaultPairs = EditorGUILayout.Toggle("Set Pair Sprites To Default", attrib.defaultPairs);
            EditorGUILayout.Separator();

            attrib.defaulOnConnectPairs = EditorGUILayout.Toggle("Set On Connect Sprites To Default", attrib.defaulOnConnectPairs);
            EditorGUILayout.Separator();

            attrib.defaulOnConnectBGs = EditorGUILayout.Toggle("Set On Connect Background Sprites To Default", attrib.defaulOnConnectBGs);
            EditorGUILayout.Separator();

            attrib.defaultBarriers = EditorGUILayout.Toggle("Set Barrier Sprites To Default", attrib.defaultBarriers);
            EditorGUILayout.Separator();

            attrib.createRandomColor = EditorGUILayout.Toggle("Create Random Color", attrib.createRandomColor);
            EditorGUILayout.Separator();

            if (previousNumberOfRows == -1)
            {
                previousNumberOfRows = attrib.numberOfRows;
            }

            if (previousNumberOfCols == -1)
            {
                previousNumberOfCols = attrib.numberOfCols;
            }

            if (previousNumberOfCols != attrib.numberOfCols || previousNumberOfRows != attrib.numberOfRows)
            {
                if (attrib.levels.Count != 0)
                {
                    dialogResult = EditorUtility.DisplayDialogComplex("Confirm Message", "Changing grid size leads to reset all levels", "ok", "cancel", "close");
                    if (dialogResult == 0)
                    {
                        RemoveLevels(attrib);
                    }
                    else
                    {
                        attrib.numberOfRows = previousNumberOfRows;
                        attrib.numberOfCols = previousNumberOfCols;
                    }
                }
                else
                {
                    RemoveLevels(attrib);
                }
            }

            GUILayout.BeginHorizontal();

            GUI.backgroundColor = greenColor;
            if (GUILayout.Button("Create New Level", GUILayout.Width(150), GUILayout.Height(30)))
            {
                CreateNewLevel(attrib);
            }
            GUI.backgroundColor = whiteColor;

            if (attrib.levels.Count != 0)
            {
                GUI.backgroundColor = redColor;
                if (GUILayout.Button("Remove Levels", GUILayout.Width(150), GUILayout.Height(30)))
                {
                    dialogResult = EditorUtility.DisplayDialogComplex("Removing Levels", "Are you sure you want to remove all levels ?", "yes", "cancel", "close");
                    if (dialogResult == 0)
                    {
                        RemoveLevels(attrib);
                    }
                }
                GUI.backgroundColor = whiteColor;
            }

            GUILayout.EndHorizontal();
            GUILayout.Box("", GUILayout.ExpandWidth(true), GUILayout.Height(2));
            EditorGUILayout.Separator();
            EditorGUILayout.Separator();

            for (int i = 0; i < attrib.levels.Count; i++)
            {
                GUI.contentColor           = yellowColor;
                attrib.levels[i].showLevel = EditorGUILayout.Foldout(attrib.levels[i].showLevel, " [Level " + (i + 1) + "]");
                GUI.contentColor           = whiteColor;

                if (attrib.levels[i].showLevel)
                {
                    EditorGUILayout.Separator();
                    GUILayout.BeginVertical();
                    attrib.levels[i].showPairsNumber = EditorGUILayout.Toggle("Show Pairs Number", attrib.levels[i].showPairsNumber);
                    EditorGUILayout.Separator();

                    GUILayout.EndVertical();


                    GUI.backgroundColor = cyanColor;
                    GUILayout.BeginHorizontal();
                    if (GUILayout.Button("View Grid", GUILayout.Width(360), GUILayout.Height(30)))
                    {
                        DrawLinesEditors.GridWindowEditor.Init(attrib.levels[i], "Level " + (i + 1) + " Grid", attrib.numberOfRows, attrib.numberOfCols);
                    }
                    GUI.backgroundColor = whiteColor;

                    GUILayout.EndHorizontal();

                    GUILayout.BeginHorizontal();
                    GUI.backgroundColor = greenColor;

                    if (GUILayout.Button("Create New Pair", GUILayout.Width(110), GUILayout.Height(30)))
                    {
                        if (attrib.levels[i].dotsPairs.Count < attrib.numberOfRows * attrib.numberOfCols / 2)
                        {
                            CreateNewPair(attrib, attrib.levels[i]);
                        }
                        else
                        {
                            EditorUtility.DisplayDialog("Limit Reached", "You can't add more pairs", "ok");
                        }
                    }

                    if (GUILayout.Button("Create New Barrier", GUILayout.Width(110), GUILayout.Height(30)))
                    {
                        if (attrib.levels[i].dotsPairs.Count < attrib.numberOfRows * attrib.numberOfCols / 2)
                        {
                            CreateNewBarrier(attrib, attrib.levels[i]);
                        }
                        else
                        {
                            EditorUtility.DisplayDialog("Limit Reached", "You can't add more pairs", "ok");
                        }
                    }
                    GUI.backgroundColor = whiteColor;

                    GUI.backgroundColor = redColor;
                    if (GUILayout.Button("Remove Pairs", GUILayout.Width(120), GUILayout.Height(30)))
                    {
                        dialogResult = EditorUtility.DisplayDialogComplex("Removing Level Pairs", "Are you sure you want to remove the pairs of Level" + (i + 1) + " ?", "yes", "cancel", "close");
                        if (dialogResult == 0)
                        {
                            RemoveLevelPairs(attrib.levels[i], attrib);
                            continue;
                        }
                    }
                    GUI.backgroundColor = whiteColor;

                    GUI.backgroundColor = redColor;
                    if (GUILayout.Button("Remove Level " + (i + 1), GUILayout.Width(120), GUILayout.Height(30)))
                    {
                        dialogResult = EditorUtility.DisplayDialogComplex("Removing Level", "Are you sure you want to remove level " + (i + 1) + " ?", "yes", "cancel", "close");
                        if (dialogResult == 0)
                        {
                            RemoveLevel(i, attrib);
                            continue;
                        }
                    }
                    GUI.backgroundColor = whiteColor;

                    GUILayout.EndHorizontal();


                    EditorGUILayout.Separator();
                    GUILayout.Box("", GUILayout.ExpandWidth(true), GUILayout.Height(2));

                    EditorGUILayout.Separator();

                    for (int j = 0; j < attrib.levels[i].dotsPairs.Count; j++)
                    {
                        attrib.levels[i].dotsPairs[j].showPair = EditorGUILayout.Foldout(attrib.levels[i].dotsPairs[j].showPair, "Pair " + (j + 1));

                        if (attrib.levels[i].dotsPairs[j].showPair)
                        {
                            GUI.backgroundColor = redColor;
                            if (GUILayout.Button("Remove Pair " + (j + 1), GUILayout.Width(120), GUILayout.Height(25)))
                            {
                                dialogResult = EditorUtility.DisplayDialogComplex("Removing Pair", "Are you sure you want to remove pair " + (j + 1) + " ?", "yes", "cancel", "close");
                                if (dialogResult == 0)
                                {
                                    RemovePair(j, attrib.levels[i], attrib);
                                    continue;
                                }
                            }
                            GUI.backgroundColor = whiteColor;

                            EditorGUILayout.Separator();
                            if (attrib.levels[i].dotsPairs[j].pairSprite == null || attrib.defaultPairs)
                            {
                                attrib.levels[i].dotsPairs[j].pairSprite = attrib.defaultPairSprite;
                            }

                            if (attrib.levels[i].dotsPairs[j].connectSprite == null || attrib.defaulOnConnectPairs)
                            {
                                attrib.levels[i].dotsPairs[j].connectSprite = attrib.defaultOnConnectPairSprite;
                            }

                            if (attrib.levels[i].dotsPairs[j].connectBGSprite == null || attrib.defaulOnConnectBGs)
                            {
                                attrib.levels[i].dotsPairs[j].connectBGSprite = attrib.defaultOnConnectBGSprite;
                            }

                            attrib.levels[i].dotsPairs[j].pairSprite = EditorGUILayout.ObjectField("Normal Sprite", attrib.levels[i].dotsPairs[j].pairSprite, typeof(Sprite), true) as Sprite;
                            EditorGUILayout.Separator();

                            attrib.levels[i].dotsPairs[j].connectSprite = EditorGUILayout.ObjectField("OnConnect Sprite", attrib.levels[i].dotsPairs[j].connectSprite, typeof(Sprite), true) as Sprite;
                            EditorGUILayout.Separator();

                            attrib.levels[i].dotsPairs[j].connectBGSprite = EditorGUILayout.ObjectField("OnConnect Background Sprite", attrib.levels[i].dotsPairs[j].connectBGSprite, typeof(Sprite), true) as Sprite;
                            EditorGUILayout.Separator();

                            attrib.levels [i].dotsPairs [j].wireIndex = EditorGUILayout.Popup(attrib.levels [i].dotsPairs [j].wireIndex, new string[] { "Aluminum", "Copper", "Gold", "Silver" });

                            switch (attrib.levels [i].dotsPairs [j].wireIndex)
                            {
                            case 0:
                                myWireType       = Level.WireTypes.Aluminum;
                                spriteColor      = aluminumColor;
                                onConnectColor   = aluminumOnConnectColor;
                                onConnectBGColor = aluminumOnConnectBGColor;
                                wireColor        = aluminumWireColor;
                                break;

                            case 1:
                                myWireType       = Level.WireTypes.Copper;
                                spriteColor      = copperColor;
                                onConnectColor   = copperOnConnectColor;
                                onConnectBGColor = copperOnConnectBGColor;
                                wireColor        = copperWireColor;
                                break;

                            case 2:
                                myWireType       = Level.WireTypes.Gold;
                                spriteColor      = goldColor;
                                onConnectColor   = goldOnConnectColor;
                                onConnectBGColor = goldOnConnectBGColor;
                                wireColor        = goldWireColor;
                                break;

                            case 3:
                                myWireType       = Level.WireTypes.Silver;
                                spriteColor      = silverColor;
                                onConnectColor   = silverOnConnectColor;
                                onConnectBGColor = silverOnConnectBGColor;
                                wireColor        = silverWireColor;
                                break;

                            default:
                                break;
                            }
                            EditorGUILayout.Separator();
                            attrib.levels [i].dotsPairs [j].wireType       = myWireType;
                            attrib.levels [i].dotsPairs [j].pairColor      = spriteColor;
                            attrib.levels [i].dotsPairs [j].onConnectColor = onConnectColor;
                            attrib.levels [i].dotsPairs [j].bgColor        = onConnectBGColor;
                            attrib.levels [i].dotsPairs [j].lineColor      = wireColor;

                            attrib.levels[i].dotsPairs[j].pairColor = EditorGUILayout.ColorField("Pair Sprite Color", attrib.levels[i].dotsPairs[j].pairColor);
                            EditorGUILayout.Separator();

                            attrib.levels[i].dotsPairs[j].onConnectColor = EditorGUILayout.ColorField("On Connect Color", attrib.levels[i].dotsPairs[j].onConnectColor);
                            EditorGUILayout.Separator();

                            attrib.levels[i].dotsPairs[j].bgColor = EditorGUILayout.ColorField("Background Color", attrib.levels[i].dotsPairs[j].bgColor);
                            EditorGUILayout.Separator();

                            attrib.levels[i].dotsPairs[j].lineColor = EditorGUILayout.ColorField("Line Color", attrib.levels[i].dotsPairs[j].lineColor);
                            EditorGUILayout.Separator();

                            attrib.levels[i].dotsPairs[j].applyColorOnSprite = EditorGUILayout.Toggle("Apply Color On Sprite", attrib.levels[i].dotsPairs[j].applyColorOnSprite);
                            EditorGUILayout.Separator();

                            attrib.levels[i].dotsPairs[j].firstDot.index = EditorGUILayout.IntSlider("First Element Index", attrib.levels[i].dotsPairs[j].firstDot.index, 0, attrib.numberOfRows * attrib.numberOfCols - 1);
                            EditorGUILayout.Separator();
                            attrib.levels[i].dotsPairs[j].secondDot.index = EditorGUILayout.IntSlider("Second Element Index", attrib.levels[i].dotsPairs[j].secondDot.index, 0, attrib.numberOfRows * attrib.numberOfCols - 1);
                            EditorGUILayout.Separator();
                        }
                    }


                    for (int j = 0; j < attrib.levels[i].barriers.Count; j++)
                    {
                        attrib.levels[i].barriers[j].showPair = EditorGUILayout.Foldout(attrib.levels[i].barriers[j].showPair, "Barrier " + (j + 1));

                        if (attrib.levels[i].barriers[j].showPair)
                        {
                            GUI.backgroundColor = redColor;
                            if (GUILayout.Button("Remove Barrier " + (j + 1), GUILayout.Width(120), GUILayout.Height(25)))
                            {
                                dialogResult = EditorUtility.DisplayDialogComplex("Removing Barrier", "Are you sure you want to remove barrier " + (j + 1) + " ?", "yes ;)", "cancel", "close");
                                if (dialogResult == 0)
                                {
                                    RemoveBarrier(j, attrib.levels[i], attrib);
                                    continue;
                                }
                            }
                            GUI.backgroundColor = whiteColor;

                            EditorGUILayout.Separator();
                            if (attrib.levels[i].barriers[j].sprite == null || attrib.defaultBarriers)
                            {
                                attrib.levels[i].barriers[j].sprite = attrib.defaultBarrierSprite;
                            }

                            attrib.levels[i].barriers[j].sprite = EditorGUILayout.ObjectField("Normal Sprite", attrib.levels[i].barriers[j].sprite, typeof(Sprite), true) as Sprite;
                            EditorGUILayout.Separator();

                            attrib.levels[i].barriers[j].color = EditorGUILayout.ColorField("Sprite Color", attrib.levels[i].barriers[j].color);
                            EditorGUILayout.Separator();

                            attrib.levels[i].barriers[j].index = EditorGUILayout.IntSlider("Barrier Index", attrib.levels[i].barriers[j].index, 0, attrib.numberOfRows * attrib.numberOfCols - 1);
                        }
                    }
                }
            }
        }