You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 

146 lines
4.1 KiB

using UnityEngine;
using System.Collections.Generic;
#if UNITY_EDITOR
using UnityEditor;
#endif
namespace FogVolumeUtilities
{
public static class ExtensionMethods
{
public static float Remap(this float value, float from1, float to1, float from2, float to2)
{
return (value - from1) / (to1 - from1) * (to2 - from2) + from2;
}
public static bool TimeSnap(int Frames)
{
bool refresh = true;
if (Application.isPlaying)
{
refresh = Time.frameCount <= 3 || (Time.frameCount % (1 + Frames)) == 0;
return (refresh);
}
else
return true;
}
public static void Swap<T>(ref T lhs, ref T rhs)
{
T temp = lhs;
lhs = rhs;
rhs = temp;
}
}
public class Rendering
{
public static void EnsureKeyword(Material material, string name, bool enabled)
{
if (enabled != material.IsKeywordEnabled(name))
{
if (enabled)
material.EnableKeyword(name);
else
material.DisableKeyword(name);
}
}
}
public struct int2
{
public int x;
public int y;
public int2(int x, int y)
{
this.x = x; this.y = y;
}
}
public static class EditorExtension
{
private static string[] m_LayerNames = null;
private static int[] m_LayerMasks = null;
static EditorExtension()
{
var tmpNames = new List<string>();
var tmpMasks = new List<int>();
for (int i = 0; i < 32; i++)
{
try
{
var name = LayerMask.LayerToName(i);
if (name != "")
{
tmpNames.Add(name);
tmpMasks.Add(1 << i);
}
}
catch { }
}
m_LayerNames = tmpNames.ToArray();
m_LayerMasks = tmpMasks.ToArray();
}
public static void ToggleInHierarchy(Object obj, bool visible)
{
#if UNITY_EDITOR
if (visible)
obj.hideFlags = HideFlags.None;
else
obj.hideFlags = HideFlags.HideInHierarchy;
try
{
EditorApplication.RepaintHierarchyWindow();
EditorApplication.DirtyHierarchyWindowSorting();
}
catch { }
#endif
}
#if UNITY_EDITOR
public static int DrawLayerMaskField(Rect aPosition, int aMask, GUIContent aLabel)
{
int val = aMask;
int maskVal = 0;
for (int i = 0; i < m_LayerNames.Length; i++)
{
if (m_LayerMasks[i] != 0)
{
if ((val & m_LayerMasks[i]) == m_LayerMasks[i])
maskVal |= 1 << i;
}
else if (val == 0)
maskVal |= 1 << i;
}
int newMaskVal = UnityEditor.EditorGUI.MaskField(aPosition, aLabel, maskVal, m_LayerNames);
int changes = maskVal ^ newMaskVal;
for (int i = 0; i < m_LayerMasks.Length; i++)
{
if ((changes & (1 << i)) != 0) // has this list item changed?
{
if ((newMaskVal & (1 << i)) != 0) // has it been set?
{
if (m_LayerMasks[i] == 0) // special case: if "0" is set, just set the val to 0
{
val = 0;
break;
}
else
val |= m_LayerMasks[i];
}
else // it has been reset
{
val &= ~m_LayerMasks[i];
}
}
}
return val;
}
#endif
}
}