Beispiel #1
0
 public TagInstance ObtainTag()
 {
     return(FuzzyTagDictionary.FindTag(Descriptor, InterpolationValue()));
 }
Beispiel #2
0
    void OnGUI()
    {
        EditorGUILayout.Space();

        EditorGUILayout.BeginHorizontal();
        if (GUILayout.Button("Save", EditorStyles.miniButtonLeft))
        {
            SavePreset(false);
        }
        if (GUILayout.Button("Load", EditorStyles.miniButtonMid))
        {
            LoadPreset();
        }
        if (GUILayout.Button("Save as...", EditorStyles.miniButtonMid))
        {
            SavePreset(true);
        }
        if (GUILayout.Button("Reset", EditorStyles.miniButtonRight))
        {
            ResetValues();
        }
        EditorGUILayout.EndHorizontal();
        string presetLabelText = isExternPreset ? GlobalPaths.PresetPath + presetName : "Unsaved";

        EditorGUILayout.LabelField("Preset: " + presetLabelText);

        EditorGUILayout.Space();
        EditorGUILayout.BeginHorizontal();
        if (GUILayout.Button("Generate Level", EditorStyles.miniButtonLeft))
        {
            Generate();
        }
        GUI.enabled = !isAutoUpdate;
        if (GUILayout.Button("Clear", EditorStyles.miniButtonRight))
        {
            ClearLevel();
        }
        GUI.enabled = true;
        EditorGUILayout.EndHorizontal();
        EditorGUILayout.Space();
        randomizeSeed = EditorGUILayout.Toggle("Randomize Seed", randomizeSeed);
        GUI.enabled   = !randomizeSeed;
        preset.Seed   = EditorGUILayout.IntField("Seed", preset.Seed);
        GUI.enabled   = true;

        scrollVector = EditorGUILayout.BeginScrollView(scrollVector, GUILayout.Height(position.height - 100));
        #region LevelGraphProperties
        EditorGUILayout.Space();
        showLevelGraph = EditorGUILayout.Foldout(showLevelGraph, "Level Graph Properties");
        if (showLevelGraph)
        {
            EditorGUI.indentLevel += 1;
            preset.RoomCount       = EditorGUILayout.IntField("Room Count", preset.RoomCount);
            preset.RoomCount       = Mathf.Clamp(preset.RoomCount, 2, 1000);
            preset.CritPathLength  = EditorGUILayout.IntField("Main Path", preset.CritPathLength);
            preset.CritPathLength  = Mathf.Clamp(preset.CritPathLength, Mathf.Min(2, preset.RoomCount), Mathf.Max(2, preset.RoomCount));
            preset.MaxDoors        = EditorGUILayout.IntField("Max. Doors", preset.MaxDoors);
            preset.MaxDoors        = Mathf.Clamp(preset.MaxDoors, 3, 10);
            preset.Distribution    = EditorGUILayout.Slider("Distribution", preset.Distribution, 0.05f, 1f);
            EditorGUI.indentLevel -= 1;
            EditorGUILayout.Space();
        }
        #endregion

        #region LevelProperties
        showProceduralLevel = EditorGUILayout.Foldout(showProceduralLevel, "Level Properties");
        if (showProceduralLevel)
        {
            EditorGUI.indentLevel += 1;
            //preset.DoorSize = EditorGUILayout.IntField ("Global door size", preset.DoorSize);
            //preset.DoorSize = (int)Mathf.Floor (Mathf.Clamp (preset.DoorSize, 2f, preset.Spacing / 2f));
            preset.RoomDistance = EditorGUILayout.FloatField("Global distance", preset.RoomDistance);
            preset.RoomDistance = Mathf.Clamp(preset.RoomDistance, 0.1f, 10f);

            if (preset.IsSeparateRooms)
            {
                preset.Spacing = EditorGUILayout.FloatField("Minimal margin", preset.Spacing);
                preset.Spacing = Mathf.Clamp(preset.Spacing, DoorDefinition.GlobalSize * 2f, DoorDefinition.GlobalSize * 4f);
            }
            EditorGUI.indentLevel -= 1;
            EditorGUILayout.Space();
        }
        #endregion

        #region HallwayProperties
        showHallwayGUI = EditorGUILayout.Foldout(showHallwayGUI, "Hallway");
        if (showHallwayGUI)
        {
            EditorGUI.indentLevel += 1;
            preset.HallwayTiling   = EditorGUILayout.FloatField("Texture tiling:", preset.HallwayTiling);
            preset.HallwayTiling   = Mathf.Clamp(preset.HallwayTiling, 0.01f, 10f);
            EditorGUILayout.Space();
            EditorGUILayout.LabelField("Materials:");
            preset.HallwayMaterials [0] = EditorGUILayout.ObjectField("Ceil", preset.HallwayMaterials [0], typeof(Material), false) as Material;
            preset.HallwayMaterials [1] = EditorGUILayout.ObjectField("Floor", preset.HallwayMaterials [1], typeof(Material), false) as Material;
            preset.HallwayMaterials [2] = EditorGUILayout.ObjectField("Walls", preset.HallwayMaterials [2], typeof(Material), false) as Material;
            EditorGUI.indentLevel      -= 1;
            EditorGUILayout.Space();
        }
        #endregion

        #region Constraints
        showConstraintGUI = EditorGUILayout.Foldout(showConstraintGUI, "Constraints");
        if (showConstraintGUI)
        {
            List <Constraint> constraints = preset.Constraints;
            List <Constraint> toDelete    = new List <Constraint>();

            Separator();
            EditorGUILayout.Space();
            for (int i = 0; i < constraints.Count; i++)
            {
                Constraint constraint = constraints[i];
                constraint.Target = (ConstraintTarget)EditorGUILayout.EnumPopup("Target", constraint.Target);

                if (constraint.Target == ConstraintTarget.Hallways)
                {
                    constraint.HallwayAmount = (HallwayAmount)EditorGUILayout.EnumPopup("Amount", constraint.HallwayAmount);
                    if (constraint.HallwayAmount == HallwayAmount.AtMost)
                    {
                        DrawAmountValueInput(constraint, false);
                    }
                    if (constraint.HallwayAmount == HallwayAmount.SetPriority)
                    {
                        constraint.HallwayPriority = EditorGUILayout.FloatField("Priority", constraint.HallwayPriority);
                        constraint.HallwayPriority = Mathf.Clamp(constraint.HallwayPriority, 0f, 1f);
                        EditorGUILayout.LabelField(" ", "(Value larger than 0.5 cancels out randomness)");
                    }
                    DrawTagSelection(constraint, TagTarget.HALLWAY);
                }
                else
                {
                    constraint.Type = (ConstraintType)EditorGUILayout.EnumPopup("Type", constraint.Type);

                    if (constraint.Target == ConstraintTarget.AllRooms ||
                        constraint.Target == ConstraintTarget.MiddleRooms ||
                        constraint.Target == ConstraintTarget.SideRooms)
                    {
                        constraint.Amount = (ConstraintAmount)EditorGUILayout.EnumPopup("Rooms", constraint.Amount);

                        if (constraint.Amount != ConstraintAmount.All && constraint.Amount != ConstraintAmount.None)
                        {
                            DrawAmountValueInput(constraint, true);
                        }
                    }

                    if (constraint.Type == ConstraintType.FuzzyProperties)
                    {
                        constraint.AutoTagIndex = EditorGUILayout.Popup("Tag", constraint.AutoTagIndex, FuzzyTagDictionary.Descriptors);
                        EditorGUILayout.MinMaxSlider(ref constraint.Min, ref constraint.Max, 0f, 1f);
                        EditorGUILayout.BeginHorizontal();
                        EditorGUILayout.LabelField(FuzzyTagDictionary.FindAttribute(constraint.AutoTagIndex, constraint.Min));
                        EditorGUILayout.LabelField(FuzzyTagDictionary.FindAttribute(constraint.AutoTagIndex, constraint.Max), GUILayout.Width(80));
                        EditorGUILayout.EndHorizontal();
                    }
                    else
                    {
                        DrawTagSelection(constraint, TagTarget.CHUNK);
                    }
                }

                if (GUILayout.Button("Remove", EditorStyles.miniButton))
                {
                    toDelete.Add(constraints[i]);
                }
                //EditorGUILayout.EndHorizontal();
                EditorGUILayout.Space();
                Separator();
                EditorGUILayout.Space();
            }

            toDelete.ForEach(c => constraints.Remove(c));
            EditorGUILayout.BeginHorizontal();
            if (GUILayout.Button("Add Constraint", EditorStyles.miniButton))
            {
                constraints.Add(new Constraint());
            }
            EditorGUILayout.EndHorizontal();

            EditorGUILayout.Space();
        }
        #endregion

        #region Debug
        ManageDebugObject();
        showDebugGUI = EditorGUILayout.Foldout(showDebugGUI, "Debug");
        if (showDebugGUI)
        {
            preset.IsSeparateRooms    = EditorGUILayout.Toggle("Separate Rooms", preset.IsSeparateRooms);
            debugInfo.ShowPaths       = EditorGUILayout.Toggle("Show paths", debugInfo.ShowPaths);
            debugInfo.ShowConnections = EditorGUILayout.Toggle("Show connections", debugInfo.ShowConnections);
            debugInfo.ShowAStarGrid   = EditorGUILayout.Toggle("Path grid", debugInfo.ShowAStarGrid);
            debugInfo.ShowRoomTypes   = EditorGUILayout.Toggle("Show room types", debugInfo.ShowRoomTypes);
            debugInfo.SetStatic       = EditorGUILayout.Toggle("Set rooms static", debugInfo.SetStatic);
        }

        EditorGUILayout.Space();
        #endregion

        isAutoUpdate = EditorGUILayout.Toggle("Auto Update", isAutoUpdate);

        EditorGUILayout.EndScrollView();

        if (isAutoUpdate)
        {
            int startMillis = System.DateTime.Now.Millisecond;
            Generate();
            if (System.DateTime.Now.Millisecond - startMillis > 500)
            {
                isAutoUpdate = false;
            }
        }
    }