Esempio n. 1
0
    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();

        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("Chip Count", 1f * profile.chipCount, 3f, 6f));

        EditorGUILayout.BeginHorizontal();
        EditorGUILayout.LabelField("Score Stars", GUILayout.Width(150));
        profile.firstStarScore  = Mathf.Max(EditorGUILayout.IntField(profile.firstStarScore, GUILayout.Width(90)), 1);
        profile.secondStarScore = Mathf.Max(EditorGUILayout.IntField(profile.secondStarScore, GUILayout.Width(90)), profile.firstStarScore + 1);
        profile.thirdStarScore  = Mathf.Max(EditorGUILayout.IntField(profile.thirdStarScore, GUILayout.ExpandWidth(true)), profile.secondStarScore + 1);
        EditorGUILayout.EndHorizontal();


        profile.target = (FieldTarget)EditorGUILayout.EnumPopup("Target", profile.target);
        if (profile.target == FieldTarget.Timer)
        {
            profile.duraction = Mathf.Max(0, EditorGUILayout.IntField("Session duration", profile.duraction));
        }
        else
        {
            profile.moveCount = Mathf.Clamp(EditorGUILayout.IntField("Move Count", profile.moveCount), 10, 50);
        }

        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;
        }
        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();

        EditorGUILayout.EndVertical();

        rect    = GUILayoutUtility.GetRect(profile.width * (30 + slotOffect), profile.height * (30 + slotOffect));
        rect.x += slotOffect;
        rect.y += slotOffect;

        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;
        }

        EditorGUILayout.LabelField(help, helpStyle);

        EditorGUILayout.BeginHorizontal();
        DrawModeTools();
        EditorGUILayout.EndHorizontal();


        button.profile = profile;
        EditorUtility.SetDirty(button);
    }
    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);
    }
Esempio n. 3
0
    public override void OnInspectorGUI()
    {
        design  = (LevelDesign)target;
        profile = design.profile;

        if (profile.levelId == 0 || profile.levelId != target.GetInstanceID())
        {
            if (profile.levelId != target.GetInstanceID())
            {
                profile = profile.GetClone();
            }
            profile.levelId = target.GetInstanceID();
        }

        design.name = (design.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));

            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.Time:
                profile.duraction = Mathf.Max(0, EditorGUILayout.IntField("Session duration", profile.duraction));
                break;
            }

            profile.target = (FieldTarget)EditorGUILayout.EnumPopup("Target", profile.target);

            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;
        }

        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";
            }


            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();
        }

        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;
        }

        design.profile = profile;
        EditorUtility.SetDirty(design);
    }
Esempio n. 4
0
    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);
        #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));

        #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
        profile.limit = Mathf.RoundToInt(EditorGUILayout.Slider("Move Count", profile.limit, 5, 100));
        #endregion

        EditorGUILayout.Space();
        EditorGUILayout.EndVertical();
        #endregion

        UpdateName(level);

        #region Slot parameters
        GUILayout.Label("Slot Parameters", EditorStyles.centeredGreyMiniLabel, GUILayout.ExpandWidth(true));
        EditorGUILayout.BeginHorizontal();

        DrawSlotSettings();

        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;
    }
Esempio n. 5
0
    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;
    }
Esempio n. 6
0
    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), 10, 50);
                    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);
    }