public TagInstance ObtainTag() { return(FuzzyTagDictionary.FindTag(Descriptor, InterpolationValue())); }
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; } } }