public override void OnInspectorGUI() { button = (LevelButton)target; profile = button.profile; if (profile.levelID == 0 || profile.levelID != target.GetInstanceID()) { if (profile.levelID != target.GetInstanceID()) { profile = profile.GetClone(); } profile.levelID = target.GetInstanceID(); } button.name = (button.transform.GetSiblingIndex() + 1).ToString(); parametersFade.target = GUILayout.Toggle(parametersFade.target, "Level Parameters", EditorStyles.foldout); if (EditorGUILayout.BeginFadeGroup(parametersFade.faded)) { profile.width = Mathf.RoundToInt(EditorGUILayout.Slider("Width", 1f * profile.width, 5f, 12f)); profile.height = Mathf.RoundToInt(EditorGUILayout.Slider("Height", 1f * profile.height, 5f, 12f)); profile.chipCount = Mathf.RoundToInt(EditorGUILayout.Slider("Count of Possible Colors", 1f * profile.chipCount, 3f, 6f)); profile.stonePortion = EditorGUILayout.Slider("Stone Portion (" + Mathf.RoundToInt(profile.stonePortion * 100f).ToString() + "%)", profile.stonePortion, 0f, 0.7f); EditorGUILayout.BeginHorizontal(); EditorGUILayout.LabelField("Score Stars", GUILayout.ExpandWidth(true)); profile.firstStarScore = Mathf.Max(EditorGUILayout.IntField(profile.firstStarScore, GUILayout.ExpandWidth(true)), 1); profile.secondStarScore = Mathf.Max(EditorGUILayout.IntField(profile.secondStarScore, GUILayout.ExpandWidth(true)), profile.firstStarScore + 1); profile.thirdStarScore = Mathf.Max(EditorGUILayout.IntField(profile.thirdStarScore, GUILayout.ExpandWidth(true)), profile.secondStarScore + 1); EditorGUILayout.EndHorizontal(); profile.limitation = (Limitation)EditorGUILayout.EnumPopup("Limitation", profile.limitation); switch (profile.limitation) { case Limitation.Moves: profile.moveCount = Mathf.Clamp(EditorGUILayout.IntField("Move Count", profile.moveCount), 5, 90); break; case Limitation.Time: profile.duraction = Mathf.Max(0, EditorGUILayout.IntField("Session duration", profile.duraction)); break; } profile.target = (FieldTarget)EditorGUILayout.EnumPopup("Target", profile.target); colorModeFade.target = profile.target == FieldTarget.Color; if (EditorGUILayout.BeginFadeGroup(colorModeFade.faded)) { defaultColor = GUI.color; profile.targetColorCount = Mathf.RoundToInt(EditorGUILayout.Slider("Targets Count", profile.targetColorCount, 1, profile.chipCount)); for (int i = 0; i < 6; i++) { GUI.color = chipColor[i]; if (i < profile.targetColorCount) { profile.SetTargetCount(i, Mathf.Clamp(EditorGUILayout.IntField("Color " + alphabet[i].ToString(), profile.GetTargetCount(i)), 1, 999)); } else { profile.SetTargetCount(i, 0); } } GUI.color = defaultColor; } EditorGUILayout.EndFadeGroup(); sugarDropFade.target = profile.target == FieldTarget.SugarDrop; if (EditorGUILayout.BeginFadeGroup(sugarDropFade.faded)) { profile.targetSugarDropsCount = Mathf.RoundToInt(EditorGUILayout.Slider("Sugar Count", profile.targetSugarDropsCount, 1, 20)); } EditorGUILayout.EndFadeGroup(); } EditorGUILayout.EndFadeGroup(); EditorGUILayout.Space(); EditorGUILayout.BeginHorizontal(EditorStyles.toolbar, GUILayout.ExpandWidth(true)); defaultColor = GUI.color; GUI.color = currentMode == EditMode.Slot ? unpressedColor : defaultColor; if (GUILayout.Button("Slot", EditorStyles.toolbarButton, GUILayout.Width(40))) { currentMode = EditMode.Slot; } GUI.color = currentMode == EditMode.Chip ? unpressedColor : defaultColor; if (GUILayout.Button("Chip", EditorStyles.toolbarButton, GUILayout.Width(40))) { currentMode = EditMode.Chip; } GUI.color = currentMode == EditMode.PowerUp ? unpressedColor : defaultColor; if (GUILayout.Button("PowerUp", EditorStyles.toolbarButton, GUILayout.Width(70))) { currentMode = EditMode.PowerUp; } if (profile.target == FieldTarget.Jelly) { GUI.color = currentMode == EditMode.Jelly ? unpressedColor : defaultColor; if (GUILayout.Button("Jelly", EditorStyles.toolbarButton, GUILayout.Width(50))) { currentMode = EditMode.Jelly; } } GUI.color = currentMode == EditMode.Block ? unpressedColor : defaultColor; if (GUILayout.Button("Block", EditorStyles.toolbarButton, GUILayout.Width(50))) { currentMode = EditMode.Block; } GUI.color = currentMode == EditMode.Wall ? unpressedColor : defaultColor; if (GUILayout.Button("Wall", EditorStyles.toolbarButton, GUILayout.Width(40))) { currentMode = EditMode.Wall; } GUI.color = defaultColor; GUILayout.FlexibleSpace(); if (GUILayout.Button("Reset", EditorStyles.toolbarButton, GUILayout.Width(40))) { profile = new LevelProfile(); } EditorGUILayout.EndVertical(); // Slot modes if (currentMode == EditMode.Slot) { EditorGUILayout.BeginHorizontal(EditorStyles.toolbar, GUILayout.ExpandWidth(true)); defaultColor = GUI.color; GUI.color = toolID == "Slots" ? unpressedColor : defaultColor; if (GUILayout.Button("Slots", EditorStyles.toolbarButton, GUILayout.Width(40))) { toolID = "Slots"; } GUI.color = toolID == "Generators" ? unpressedColor : defaultColor; if (GUILayout.Button("Generators", EditorStyles.toolbarButton, GUILayout.Width(70))) { toolID = "Generators"; } GUI.color = toolID == "Teleports" ? unpressedColor : defaultColor; if (GUILayout.Button("Teleports", EditorStyles.toolbarButton, GUILayout.Width(70))) { toolID = "Teleports"; } if (profile.target == FieldTarget.SugarDrop) { GUI.color = toolID == "Sugar Drop" ? unpressedColor : defaultColor; if (GUILayout.Button("Sugar Drop", EditorStyles.toolbarButton, GUILayout.Width(70))) { toolID = "Sugar Drop"; } } GUI.color = defaultColor; GUILayout.FlexibleSpace(); EditorGUILayout.EndHorizontal(); } // Chip modes if (currentMode == EditMode.Chip) { EditorGUILayout.BeginHorizontal(EditorStyles.toolbar, GUILayout.ExpandWidth(true)); string key; defaultColor = GUI.color; GUI.color = toolID == "Random" ? unpressedColor : defaultColor; if (GUILayout.Button("Random", EditorStyles.toolbarButton, GUILayout.Width(50))) { toolID = "Random"; } for (int i = 0; i < profile.chipCount; i++) { key = "Color " + alphabet[i]; GUI.color = toolID == key ? unpressedColor * chipColor[i] : defaultColor * chipColor[i]; if (GUILayout.Button(key, EditorStyles.toolbarButton, GUILayout.Width(50))) { toolID = key; } } GUI.color = toolID == "Stone" ? unpressedColor : defaultColor; if (GUILayout.Button("Stone", EditorStyles.toolbarButton, GUILayout.Width(40))) { toolID = "Stone"; } GUI.color = defaultColor; GUILayout.FlexibleSpace(); EditorGUILayout.EndHorizontal(); } // Block modes if (currentMode == EditMode.Block) { EditorGUILayout.BeginHorizontal(EditorStyles.toolbar, GUILayout.ExpandWidth(true)); defaultColor = GUI.color; GUI.color = toolID == "Simple Block" ? unpressedColor : defaultColor; if (GUILayout.Button("Simple Block", EditorStyles.toolbarButton, GUILayout.Width(80))) { toolID = "Simple Block"; } GUI.color = toolID == "Weed" ? unpressedColor : defaultColor; if (GUILayout.Button("Weed", EditorStyles.toolbarButton, GUILayout.Width(40))) { toolID = "Weed"; } GUI.color = toolID == "Branch" ? unpressedColor : defaultColor; if (GUILayout.Button("Branch", EditorStyles.toolbarButton, GUILayout.Width(50))) { toolID = "Branch"; } GUI.color = defaultColor; GUILayout.FlexibleSpace(); EditorGUILayout.EndHorizontal(); } EditorGUILayout.BeginVertical(EditorStyles.inspectorDefaultMargins); rect = GUILayoutUtility.GetRect(profile.width * (cellSize + slotOffect), profile.height * (cellSize + slotOffect)); rect.x += slotOffect; rect.y += slotOffect; EditorGUILayout.BeginHorizontal(); DrawModeTools(); EditorGUILayout.EndHorizontal(); EditorGUILayout.EndVertical(); switch (currentMode) { case EditMode.Slot: DrawSlot(); break; case EditMode.Chip: DrawChip(); break; case EditMode.PowerUp: DrawPowerUp(); break; case EditMode.Jelly: DrawJelly(); break; case EditMode.Block: DrawBlock(); break; case EditMode.Wall: DrawWall(); break; } button.profile = profile; EditorUtility.SetDirty(button); }
public override void OnInspectorGUI() { if (!metaTarget) { return; } level = (Level)metaTarget; if (!level) { EditorGUILayout.HelpBox("No level selected", MessageType.Info); return; } if (level.profile == null) { level.profile = new LevelProfile(); } profile = level.profile; #region Temporary arrays slots = profile.slots.ToDictionary(x => x.position, x => x); chipInfos = SessionAssistant.main.chipInfos.ToDictionary(x => x.name, x => x); blockInfos = SessionAssistant.main.blockInfos.ToDictionary(x => x.name, x => x); teleportTargets.Clear(); foreach (int2 coord in selected) { if (slots.ContainsKey(coord) && !teleportTargets.Contains(slots[coord].teleport)) { teleportTargets.Add(slots[coord].teleport); } } #endregion if (profile.levelID == 0) { profile = new LevelProfile(); profile.levelID = level.gameObject.GetInstanceID(); ResetField(); } if (profile.levelID != level.gameObject.GetInstanceID()) { if (profile.levelID != level.gameObject.GetInstanceID()) { profile = profile.GetClone(); } profile.levelID = level.gameObject.GetInstanceID(); } Undo.RecordObject(level, "Level design changed"); #region Level parameters GUILayout.Label("Level Parameters", EditorStyles.centeredGreyMiniLabel, GUILayout.ExpandWidth(true)); profile.level = level.transform.GetSiblingIndex() + 1; EditorGUILayout.BeginVertical(EditorStyles.textArea); #region Navigation Panel EditorGUILayout.BeginHorizontal(); GUILayout.FlexibleSpace(); if (GUILayout.Button("<<", EditorStyles.miniButtonLeft, GUILayout.Width(30))) { SelectLevel(1); return; } if (GUILayout.Button("<", EditorStyles.miniButtonMid, GUILayout.Width(30))) { SelectLevel(profile.level - 1); return; } GUILayout.Label("Level #" + profile.level, EditorStyles.miniButtonMid, GUILayout.Width(70)); if (GUILayout.Button(">", EditorStyles.miniButtonMid, GUILayout.Width(30))) { SelectLevel(profile.level + 1); return; } if (GUILayout.Button(">>", EditorStyles.miniButtonRight, GUILayout.Width(30))) { SelectLevel(Level.all.Count); return; } EditorGUILayout.EndHorizontal(); #endregion profile.width = Mathf.RoundToInt(EditorGUILayout.Slider("Width", 1f * profile.width, 5f, LevelProfile.maxSize)); profile.height = Mathf.RoundToInt(EditorGUILayout.Slider("Height", 1f * profile.height, 5f, LevelProfile.maxSize)); profile.colorCount = Mathf.RoundToInt(EditorGUILayout.Slider("Count of Possible Colors", 1f * profile.colorCount, 3f, chipColor.Length)); profile.stonePortion = Mathf.Round(EditorGUILayout.Slider("Stone Portion", profile.stonePortion, 0f, 0.7f) * 100) / 100; #region Stars EditorGUILayout.BeginHorizontal(); EditorGUILayout.LabelField("Score Stars", GUILayout.ExpandWidth(true)); profile.firstStarScore = Mathf.Max(EditorGUILayout.IntField(profile.firstStarScore, GUILayout.ExpandWidth(true)), 1); profile.secondStarScore = Mathf.Max(EditorGUILayout.IntField(profile.secondStarScore, GUILayout.ExpandWidth(true)), profile.firstStarScore + 1); profile.thirdStarScore = Mathf.Max(EditorGUILayout.IntField(profile.thirdStarScore, GUILayout.ExpandWidth(true)), profile.secondStarScore + 1); EditorGUILayout.EndHorizontal(); #endregion #region Limitation Enum limitation = EditorGUILayout.EnumPopup("Limitation", profile.limitation); if (profile.limitation != (Limitation)limitation) { profile.limit = 30; } profile.limitation = (Limitation)limitation; switch (profile.limitation) { case Limitation.Moves: profile.limit = Mathf.RoundToInt(EditorGUILayout.Slider("Move Count", profile.limit, 5, 100)); break; case Limitation.Time: profile.limit = Mathf.RoundToInt(EditorGUILayout.Slider("Session duration (" + Utils.ToTimerFormat(profile.limit) + ")", Mathf.Ceil(profile.limit / 5) * 5, 5, 300)); break; } #endregion #region Target profile.target = (FieldTarget)EditorGUILayout.EnumPopup("Target", profile.target); if (profile.target == FieldTarget.Color) { defaultColor = GUI.color; profile.targetColorCount = Mathf.RoundToInt(EditorGUILayout.Slider("Targets Count", profile.targetColorCount, 1, profile.colorCount)); for (int i = 0; i < chipColor.Length; i++) { GUI.color = chipColor[i]; if (i < profile.targetColorCount) { profile.SetTargetCount(i, Mathf.Clamp(EditorGUILayout.IntField("Color " + alphabet[i].ToString(), profile.GetTargetCount(i)), 1, 999)); } else { profile.SetTargetCount(i, 0); } } GUI.color = defaultColor; } if (profile.target == FieldTarget.SugarDrop) { profile.targetSugarDropsCount = Mathf.RoundToInt(EditorGUILayout.Slider("Sugar Count", profile.targetSugarDropsCount, 1, 20)); } #endregion EditorGUILayout.Space(); EditorGUILayout.EndVertical(); #endregion UpdateName(level); #region Slot parameters GUILayout.Label("Slot Parameters", EditorStyles.centeredGreyMiniLabel, GUILayout.ExpandWidth(true)); EditorGUILayout.BeginHorizontal(); DrawSlotSettings(); DrawLayersSettings(); EditorGUILayout.EndHorizontal(); #endregion GUILayout.Label("Level Layout", EditorStyles.centeredGreyMiniLabel, GUILayout.ExpandWidth(true)); DrawActionBar(); defaultColor = GUI.backgroundColor; GUI.backgroundColor = Color.gray; EditorGUILayout.BeginHorizontal(EditorStyles.textArea, GUILayout.MinWidth(10)); GUI.backgroundColor = defaultColor; rect = GUILayoutUtility.GetRect( profile.width * (cellSize + slotOffset) + legendSize + EditorStyles.textArea.margin.left + EditorStyles.textArea.margin.right, profile.height * (cellSize + slotOffset) + legendSize + EditorStyles.textArea.margin.top + EditorStyles.textArea.margin.bottom); EditorGUILayout.EndHorizontal(); EditorGUILayout.Space(); DrawFieldView(); profile.slots = slots.Values.Where(x => x.position.IsItHit(0, 0, profile.width - 1, profile.height - 1)).ToList(); level.profile = profile; }