Files
YachtDice/Assets/Plugins/AllIn13DShader/Editor/Drawers/NoiseCreatorDrawer.cs
T
2026-02-23 22:01:07 +07:00

124 lines
4.8 KiB
C#

using System.IO;
using UnityEditor;
using UnityEngine;
using static AllIn13DShader.NoiseCreatorTool;
namespace AllIn13DShader
{
public class NoiseCreatorDrawer
{
private NoiseCreatorTool noiseCreatorTool;
private CommonStyles commonStyles;
private NoiseCreatorValues Values
{
get
{
return noiseCreatorTool.values;
}
}
public NoiseCreatorDrawer(NoiseCreatorTool noiseCreatorTool, CommonStyles commonStyles)
{
this.noiseCreatorTool = noiseCreatorTool;
this.commonStyles = commonStyles;
}
public void Draw()
{
GUILayout.Label("Tileable Noise Creator", commonStyles.bigLabel);
GUILayout.Space(20);
EditorGUILayout.BeginHorizontal();
{
EditorGUILayout.BeginVertical(GUILayout.MaxWidth(550));
{
if (Values.noisePreview == null)
{
GUILayout.Label("*Change a property to start editing a Noise texture", EditorStyles.boldLabel);
}
EditorGUI.BeginChangeCheck();
EditorGUILayout.BeginHorizontal();
{
GUILayout.Label("Noise Type:", GUILayout.MaxWidth(145));
Values.noiseType = (NoiseTypes)EditorGUILayout.EnumPopup(Values.noiseType, GUILayout.MaxWidth(200));
}
EditorGUILayout.EndHorizontal();
if (EditorGUI.EndChangeCheck())
{
noiseCreatorTool.NoiseSetMaterial();
noiseCreatorTool.CheckCreationNoiseTextures();
noiseCreatorTool.UpdateNoiseMatAndRender();
}
EditorGUI.BeginChangeCheck();
if (Values.isFractalNoise)
{
EditorUtils.TextureEditorFloatParameter("Scale X", ref Values.noiseScaleX, 0.1f, 50f, 4f);
if (!Values.noiseSquareScale) EditorUtils.TextureEditorFloatParameter("Scale Y", ref Values.noiseScaleY, 0.1f, 50f, 4f);
}
else
{
EditorUtils.TextureEditorFloatParameter("Scale X", ref Values.noiseScaleX, 0.1f, 50f, 10f);
if (!Values.noiseSquareScale) EditorUtils.TextureEditorFloatParameter("Scale Y", ref Values.noiseScaleY, 0.1f, 50f, 10f);
}
Values.noiseSquareScale = EditorGUILayout.Toggle("Square Scale?", Values.noiseSquareScale, GUILayout.MaxWidth(200));
if (Values.noiseSquareScale) Values.noiseScaleY = Values.noiseScaleX;
if (Values.noiseType == NoiseTypes.Fractal) EditorUtils.TextureEditorFloatParameter("Fractal Amount", ref Values.noiseFractalAmount, 1f, 10f, 8f);
else if (Values.noiseType == NoiseTypes.Perlin) EditorUtils.TextureEditorFloatParameter("Fractal Amount", ref Values.noiseFractalAmount, 1f, 10f, 1f);
else if (Values.noiseType == NoiseTypes.Billow) EditorUtils.TextureEditorFloatParameter("Fractal Amount", ref Values.noiseFractalAmount, 1f, 10f, 4f);
else EditorUtils.TextureEditorFloatParameter("Jitter", ref Values.noiseJitter, 0.0f, 2f, 1f);
EditorUtils.TextureEditorFloatParameter("Contrast", ref Values.noiseContrast, 0.1f, 10f, 1f);
EditorUtils.TextureEditorFloatParameter("Brightness", ref Values.noiseBrightness, -1f, 1f, 0f);
EditorUtils.TextureEditorIntParameter("Random Seed", ref Values.noiseSeed, 0, 100, 0);
Values.noiseInverted = EditorGUILayout.Toggle("Inverted?", Values.noiseInverted);
if (EditorGUI.EndChangeCheck())
{
if (Values.noiseMaterial == null)
{
noiseCreatorTool.NoiseSetMaterial();
}
noiseCreatorTool.CheckCreationNoiseTextures();
noiseCreatorTool.UpdateNoiseMatAndRender();
}
GUILayout.Space(20);
EditorGUILayout.BeginHorizontal();
{
GUILayout.Label("Noise Size:", GUILayout.MaxWidth(145));
Values.noiseSize = (TextureSizes)EditorGUILayout.EnumPopup(Values.noiseSize, GUILayout.MaxWidth(200));
}
EditorGUILayout.EndHorizontal();
EditorGUILayout.BeginHorizontal();
{
GUILayout.Label("New Noise Filtering: ", GUILayout.MaxWidth(145));
Values.noiseFiltering = (FilterMode)EditorGUILayout.EnumPopup(Values.noiseFiltering, GUILayout.MaxWidth(200));
}
EditorGUILayout.EndHorizontal();
}
EditorGUILayout.EndVertical();
if (Values.noisePreview != null) GUILayout.Label(Values.noisePreview, GUILayout.MaxWidth(450), GUILayout.MaxHeight(450));
}
EditorGUILayout.EndHorizontal();
GUILayout.Space(20);
GUILayout.Label("Select the folder where new Noise Textures will be saved", EditorStyles.boldLabel);
GlobalConfiguration.instance.NoiseSavePath = EditorUtils.DrawSelectorFolder(GlobalConfiguration.instance.NoiseSavePath, /*AllIn13DShaderConfig.NOISES_SAVE_PATH_DEFAULT,*/ "Noises");
if (Directory.Exists(GlobalConfiguration.instance.NoiseSavePath) && Values.noisePreview != null)
{
if (GUILayout.Button("Save Noise Texture", GUILayout.MaxWidth(CommonStyles.BUTTON_WIDTH)))
{
noiseCreatorTool.CreateNoiseTex();
EditorUtils.SaveTextureAsPNG(GlobalConfiguration.instance.NoiseSavePath, "Noise", "Noises",
Values.finalNoiseTex, Values.noiseFiltering, TextureImporterType.Default, TextureWrapMode.Clamp);
}
}
}
}
}