164 lines
5.4 KiB
C#
164 lines
5.4 KiB
C#
using System.Collections;
|
|
using System.Collections.Generic;
|
|
using System.Linq;
|
|
using UnityEditor;
|
|
using UnityEngine;
|
|
|
|
namespace DreadScripts.TextureUtility
|
|
{
|
|
[System.Serializable]
|
|
public class ChannelTexture
|
|
{
|
|
public string name;
|
|
public Texture2D texture;
|
|
public bool invert;
|
|
public Color defaultColor;
|
|
public ColorMode mode = ColorMode.Red;
|
|
|
|
public enum ColorMode
|
|
{
|
|
Red,
|
|
Green,
|
|
Blue,
|
|
Alpha
|
|
}
|
|
|
|
public ChannelTexture(string n, int mode)
|
|
{
|
|
name = n;
|
|
SetMode(mode, true);
|
|
if (n == "Alpha")
|
|
defaultColor = Color.white;
|
|
}
|
|
|
|
public void SetMode(int i, bool ignoreSave = false)
|
|
{
|
|
switch (i)
|
|
{
|
|
case 0:
|
|
mode = ColorMode.Red;
|
|
break;
|
|
case 1:
|
|
mode = ColorMode.Green;
|
|
break;
|
|
case 2:
|
|
mode = ColorMode.Blue;
|
|
break;
|
|
case 3:
|
|
mode = ColorMode.Alpha;
|
|
break;
|
|
}
|
|
|
|
if (!ignoreSave)
|
|
{
|
|
EditorPrefs.SetInt("TextureUtilityChannel" + name, i);
|
|
}
|
|
}
|
|
|
|
public Texture2D GetChannelColors(int width, int height, out float[] colors, bool unloadTempTexture)
|
|
{
|
|
Texture2D textureToUse;
|
|
if (texture)
|
|
textureToUse = texture;
|
|
else
|
|
{
|
|
textureToUse = new Texture2D(1, 1, TextureFormat.RGBA32, false, true);
|
|
textureToUse.SetPixel(0, 0, defaultColor);
|
|
textureToUse.Apply();
|
|
}
|
|
|
|
Texture2D newTexture = TextureUtility.GetColors(textureToUse, width, height, out Color[] myColors, unloadTempTexture);
|
|
colors = myColors.Select(c =>
|
|
{
|
|
switch (mode)
|
|
{
|
|
case ColorMode.Red:
|
|
return c.r;
|
|
case ColorMode.Green:
|
|
return c.g;
|
|
case ColorMode.Blue:
|
|
return c.b;
|
|
default:
|
|
return c.a;
|
|
}
|
|
}).ToArray();
|
|
if (invert)
|
|
{
|
|
for (int i = 0; i < colors.Length; i++)
|
|
{
|
|
colors[i] = 1 - colors[i];
|
|
}
|
|
}
|
|
|
|
if (!texture && unloadTempTexture)
|
|
Object.DestroyImmediate(textureToUse);
|
|
|
|
return newTexture;
|
|
|
|
}
|
|
|
|
public void DrawGUI()
|
|
{
|
|
GUIStyle buttonGroupStyle = new GUIStyle(GUI.skin.GetStyle("toolbarbutton")) {padding = new RectOffset(1, 1, 1, 1), margin = new RectOffset(0, 0, 1, 1)};
|
|
using (new GUILayout.VerticalScope("box"))
|
|
{
|
|
using (new GUILayout.HorizontalScope())
|
|
{
|
|
GUILayout.FlexibleSpace();
|
|
GUILayout.Label(name, "boldlabel");
|
|
GUILayout.FlexibleSpace();
|
|
}
|
|
|
|
using (new GUILayout.HorizontalScope())
|
|
{
|
|
GUILayout.FlexibleSpace();
|
|
bool dummy;
|
|
EditorGUI.BeginChangeCheck();
|
|
dummy = GUILayout.Toggle(mode == ColorMode.Red, "R", buttonGroupStyle, GUILayout.Width(16));
|
|
if (EditorGUI.EndChangeCheck())
|
|
if (dummy)
|
|
SetMode(0);
|
|
|
|
EditorGUI.BeginChangeCheck();
|
|
dummy = GUILayout.Toggle(mode == ColorMode.Green, "G", buttonGroupStyle, GUILayout.Width(16));
|
|
if (EditorGUI.EndChangeCheck())
|
|
if (dummy)
|
|
SetMode(1);
|
|
|
|
EditorGUI.BeginChangeCheck();
|
|
dummy = GUILayout.Toggle(mode == ColorMode.Blue, "B", buttonGroupStyle, GUILayout.Width(16));
|
|
if (EditorGUI.EndChangeCheck())
|
|
if (dummy)
|
|
SetMode(2);
|
|
|
|
EditorGUI.BeginChangeCheck();
|
|
dummy = GUILayout.Toggle(mode == ColorMode.Alpha, "A", buttonGroupStyle, GUILayout.Width(16));
|
|
if (EditorGUI.EndChangeCheck())
|
|
if (dummy)
|
|
SetMode(3);
|
|
GUILayout.FlexibleSpace();
|
|
}
|
|
|
|
using (new GUILayout.HorizontalScope())
|
|
{
|
|
GUILayout.FlexibleSpace();
|
|
Rect myTextureRect = GUILayoutUtility.GetRect(66, 66);
|
|
Rect myColorRect = new Rect(myTextureRect) {x = myTextureRect.x + 1, y = myTextureRect.y + 45, width = 20, height = 20};
|
|
|
|
if (!texture)
|
|
defaultColor = EditorGUI.ColorField(myColorRect, GUIContent.none, defaultColor, false, false, false);
|
|
texture = (Texture2D) EditorGUI.ObjectField(myTextureRect, texture, typeof(Texture2D), false);
|
|
if (!texture)
|
|
defaultColor = EditorGUI.ColorField(myColorRect, GUIContent.none, defaultColor, false, false, false);
|
|
|
|
|
|
GUILayout.FlexibleSpace();
|
|
}
|
|
|
|
invert = GUILayout.Toggle(invert, "Invert", "toolbarbutton");
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|