diff --git a/Editor/EventManagerEditor.cs b/Editor/EventManagerEditor.cs index b615c64..584891e 100644 --- a/Editor/EventManagerEditor.cs +++ b/Editor/EventManagerEditor.cs @@ -1,38 +1,38 @@ -using UnityEditor; -using UnityEngine; - -namespace Utils -{ - [CustomEditor(typeof(EventManager), true)] - public class EventManagerEditor : Editor - { - public override void OnInspectorGUI() - { - var eventManager = (EventManager)target; - GUILayout.BeginHorizontal(); - GUILayout.Label("Update"); - if (Application.isPlaying) - { - GUILayout.FlexibleSpace(); - GUILayout.Label(EventManager.UpdateLength.ToString()); - } - GUILayout.EndHorizontal(); - GUILayout.BeginHorizontal(); - GUILayout.Label("FixedUpdate"); - if (Application.isPlaying) - { - GUILayout.FlexibleSpace(); - GUILayout.Label(EventManager.FixedUpdateLength.ToString()); - } - GUILayout.EndHorizontal(); - GUILayout.BeginHorizontal(); - GUILayout.Label("LateUpdate"); - if (Application.isPlaying) - { - GUILayout.FlexibleSpace(); - GUILayout.Label(EventManager.LateUpdateLength.ToString()); - } - GUILayout.EndHorizontal(); - } - } -} +using UnityEditor; +using UnityEngine; + +namespace Utils +{ + [CustomEditor(typeof(EventManager), true)] + public class EventManagerEditor : Editor + { + public override void OnInspectorGUI() + { + var eventManager = (EventManager)target; + GUILayout.BeginHorizontal(); + GUILayout.Label("Update"); + if (Application.isPlaying) + { + GUILayout.FlexibleSpace(); + GUILayout.Label(EventManager.UpdateLength.ToString()); + } + GUILayout.EndHorizontal(); + GUILayout.BeginHorizontal(); + GUILayout.Label("FixedUpdate"); + if (Application.isPlaying) + { + GUILayout.FlexibleSpace(); + GUILayout.Label(EventManager.FixedUpdateLength.ToString()); + } + GUILayout.EndHorizontal(); + GUILayout.BeginHorizontal(); + GUILayout.Label("LateUpdate"); + if (Application.isPlaying) + { + GUILayout.FlexibleSpace(); + GUILayout.Label(EventManager.LateUpdateLength.ToString()); + } + GUILayout.EndHorizontal(); + } + } +} diff --git a/Editor/PackageUpdater.cs b/Editor/PackageUpdater.cs index 31d8421..46fc901 100644 --- a/Editor/PackageUpdater.cs +++ b/Editor/PackageUpdater.cs @@ -1,51 +1,51 @@ -using System.IO; -using UnityEditor; -using UnityEngine; - -namespace Utils -{ - public class PackgeUpdater - { - private static string ManifestPath - { - get - { - var projectPath = Directory.GetParent(Application.dataPath).FullName; - var manifestPath = Path.Combine(projectPath, "Packages", "manifest.json"); - return manifestPath; - } - } - - public static string GetIdentifier(string input, char charFrom, char charTo) - { - var first = input.IndexOf(charFrom); - var second = input.IndexOf(charTo, first + 1); - var posFrom = input.IndexOf(charFrom, second + 1); - if (posFrom != -1) //if found char - { - var posTo = input.IndexOf(charTo, posFrom + 1); - if (posTo != -1) //if found char - { - return input.Substring(posFrom + 1, posTo - posFrom - 1); - } - } - - return string.Empty; - } - - [MenuItem("Assets/Update Git Packages", false, 1000)] - private static void UpdateGitPackages() - { - var lines = File.ReadAllLines(ManifestPath); - foreach (var line in lines) - { - if (line.Contains("git")) - { - var identifier = GetIdentifier(line, '"', '"'); - Debug.Log("Checking for updates " + identifier); - UnityEditor.PackageManager.Client.Add(identifier); - } - } - } - } -} +using System.IO; +using UnityEditor; +using UnityEngine; + +namespace Utils +{ + public class PackgeUpdater + { + private static string ManifestPath + { + get + { + var projectPath = Directory.GetParent(Application.dataPath).FullName; + var manifestPath = Path.Combine(projectPath, "Packages", "manifest.json"); + return manifestPath; + } + } + + public static string GetIdentifier(string input, char charFrom, char charTo) + { + var first = input.IndexOf(charFrom); + var second = input.IndexOf(charTo, first + 1); + var posFrom = input.IndexOf(charFrom, second + 1); + if (posFrom != -1) //if found char + { + var posTo = input.IndexOf(charTo, posFrom + 1); + if (posTo != -1) //if found char + { + return input.Substring(posFrom + 1, posTo - posFrom - 1); + } + } + + return string.Empty; + } + + [MenuItem("Assets/Update Git Packages", false, 1000)] + private static void UpdateGitPackages() + { + var lines = File.ReadAllLines(ManifestPath); + foreach (var line in lines) + { + if (line.Contains("git")) + { + var identifier = GetIdentifier(line, '"', '"'); + Debug.Log("Checking for updates " + identifier); + UnityEditor.PackageManager.Client.Add(identifier); + } + } + } + } +} diff --git a/Editor/ReadOnlyFieldDrawer.cs b/Editor/ReadOnlyFieldDrawer.cs index 3cc7d15..ea2e66d 100644 --- a/Editor/ReadOnlyFieldDrawer.cs +++ b/Editor/ReadOnlyFieldDrawer.cs @@ -1,16 +1,16 @@ -using UnityEditor; -using UnityEngine; - -namespace Utils -{ - [CustomPropertyDrawer(typeof(ReadOnlyFieldAttribute))] - public class ReadOnlyFieldDrawer : PropertyDrawer - { - public override void OnGUI(Rect position, SerializedProperty property, GUIContent label) - { - GUI.enabled = false; - EditorGUI.PropertyField(position, property, label, true); - GUI.enabled = true; - } - } -} +using UnityEditor; +using UnityEngine; + +namespace Utils +{ + [CustomPropertyDrawer(typeof(ReadOnlyFieldAttribute))] + public class ReadOnlyFieldDrawer : PropertyDrawer + { + public override void OnGUI(Rect position, SerializedProperty property, GUIContent label) + { + GUI.enabled = false; + EditorGUI.PropertyField(position, property, label, true); + GUI.enabled = true; + } + } +} diff --git a/Editor/ReflectionProbeVolumeEditor.cs b/Editor/ReflectionProbeVolumeEditor.cs index 04fa0f0..308c904 100644 --- a/Editor/ReflectionProbeVolumeEditor.cs +++ b/Editor/ReflectionProbeVolumeEditor.cs @@ -1,168 +1,168 @@ -using UnityEditor; -using UnityEngine; - -namespace Utils -{ - public class ReflectionProbeVolumeEditor : MonoBehaviour - { - [CustomEditor(typeof(ReflectionProbeVolume), true)] - public class EventManagerEditor : Editor - { - private SerializedProperty resolution; - private SerializedProperty offset; - private SerializedProperty threshold; - private SerializedProperty blendDistance; - - private void OnEnable() - { - resolution = serializedObject.FindProperty("resolution"); - offset = serializedObject.FindProperty("offset"); - threshold = serializedObject.FindProperty("threshold"); - blendDistance = serializedObject.FindProperty("blendDistance"); - } - - public override void OnInspectorGUI() - { - serializedObject.Update(); - EditorGUILayout.PropertyField(resolution); - EditorGUILayout.PropertyField(offset); - EditorGUILayout.PropertyField(threshold); - EditorGUILayout.PropertyField(blendDistance); - serializedObject.ApplyModifiedProperties(); - EditorGUILayout.Space(); - if (GUILayout.Button("Place")) - { - Place(); - } - } - - private void Place() - { - var voxelSize = resolution.intValue; - var offset = this.offset.floatValue; - var threshold = this.threshold.floatValue; - var blendDistance = this.blendDistance.floatValue; - ReflectionProbeVolume reflectionProbeVolume = (ReflectionProbeVolume)target; - var transform = reflectionProbeVolume.transform; - //Gizmos.DrawWireCube(transform.position, transform.localScale); - var startPos = transform.position + transform.right * transform.localScale.x / 2 + transform.up * transform.localScale.y / 2 + transform.forward * transform.localScale.z / 2; - var xVar = transform.localScale.x / voxelSize / 2f; - var zVar = transform.localScale.z / voxelSize / 2f; - var data = new Vector3[voxelSize, voxelSize]; - //Gizmos.color = Color.blue; - for (int x = 0; x < voxelSize; x++) - { - for (int z = 0; z < voxelSize; z++) - { - var rayPos = startPos - transform.right * xVar - transform.forward * zVar; - if (Physics.Raycast(rayPos, Vector2.down, out RaycastHit hit)) - { - var point = hit.point + Vector3.up * offset; - data[x, z] = point; - } - zVar += transform.localScale.z / voxelSize; - } - xVar += transform.localScale.x / voxelSize; - zVar = transform.localScale.z / voxelSize / 2f; - } - - CheckSquare(data, 5, voxelSize, threshold, blendDistance, transform); - CheckSquare(data, 4, voxelSize, threshold, blendDistance, transform); - CheckSquare(data, 3, voxelSize, threshold, blendDistance, transform); - CheckSquare(data, 2, voxelSize, threshold, blendDistance, transform); - - for (int x = 0; x < voxelSize; x++) - { - for (int z = 0; z < voxelSize; z++) - { - if (data[x, z].x != float.PositiveInfinity) - { - var go = new GameObject("Reflection Probe Size: 1"); - go.transform.SetParent(transform); - go.transform.position = data[x, z]; - var reflectionProbe = go.AddComponent(typeof(ReflectionProbe)) as ReflectionProbe; - reflectionProbe.resolution = 16; - reflectionProbe.center = new Vector3(0f, transform.position.y - data[x, z].y, 0f); - reflectionProbe.size = new Vector3(transform.localScale.x / voxelSize + blendDistance, transform.localScale.y, transform.localScale.z / voxelSize + blendDistance); - } - } - } - } - - private void CheckSquare(Vector3[,] data, int size, int voxelSize, float threshold, float blendDistance, Transform transform) - { - for (int x = 0; x < voxelSize; x++) - { - for (int z = 0; z < voxelSize; z++) - { - if (x + size <= voxelSize && z + size <= voxelSize) - { - bool valid = true; - var point = Vector3.zero; - for (int i = 0; i < size; i++) - { - for (int k = 0; k < size; k++) - { - var pos = data[x + i, z + k]; - if (pos != Vector3.positiveInfinity) - { - if (Compare(data[x, z].y, pos.y, threshold)) - { - point += pos; - - } - else - { - valid = false; - } - } - } - } - if (valid) - { - point /= size * size; - - var go = new GameObject("Reflection Probe Size: " + size); - go.transform.SetParent(transform); - go.transform.position = point; - var reflectionProbe = go.AddComponent(typeof(ReflectionProbe)) as ReflectionProbe; - if (size == 2) - { - reflectionProbe.resolution = 16; - } - else if (size == 3) - { - reflectionProbe.resolution = 32; - } - else if (size == 4) - { - reflectionProbe.resolution = 32; - } - else if (size == 5) - { - reflectionProbe.resolution = 64; - } - - reflectionProbe.center = new Vector3(0f, transform.position.y - point.y, 0f); - reflectionProbe.size = new Vector3(transform.localScale.x / voxelSize * size + blendDistance, transform.localScale.y, transform.localScale.z / voxelSize * size + blendDistance); - - for (int i = 0; i < size; i++) - { - for (int k = 0; k < size; k++) - { - data[x + i, z + k] = Vector3.positiveInfinity; - } - } - } - } - } - } - } - - private bool Compare(float arg0, float arg1, float threshold) - { - return Mathf.Abs(arg0 - arg1) < threshold; - } - } - } -} +using UnityEditor; +using UnityEngine; + +namespace Utils +{ + public class ReflectionProbeVolumeEditor : MonoBehaviour + { + [CustomEditor(typeof(ReflectionProbeVolume), true)] + public class EventManagerEditor : Editor + { + private SerializedProperty resolution; + private SerializedProperty offset; + private SerializedProperty threshold; + private SerializedProperty blendDistance; + + private void OnEnable() + { + resolution = serializedObject.FindProperty("resolution"); + offset = serializedObject.FindProperty("offset"); + threshold = serializedObject.FindProperty("threshold"); + blendDistance = serializedObject.FindProperty("blendDistance"); + } + + public override void OnInspectorGUI() + { + serializedObject.Update(); + EditorGUILayout.PropertyField(resolution); + EditorGUILayout.PropertyField(offset); + EditorGUILayout.PropertyField(threshold); + EditorGUILayout.PropertyField(blendDistance); + serializedObject.ApplyModifiedProperties(); + EditorGUILayout.Space(); + if (GUILayout.Button("Place")) + { + Place(); + } + } + + private void Place() + { + var voxelSize = resolution.intValue; + var offset = this.offset.floatValue; + var threshold = this.threshold.floatValue; + var blendDistance = this.blendDistance.floatValue; + ReflectionProbeVolume reflectionProbeVolume = (ReflectionProbeVolume)target; + var transform = reflectionProbeVolume.transform; + //Gizmos.DrawWireCube(transform.position, transform.localScale); + var startPos = transform.position + transform.right * transform.localScale.x / 2 + transform.up * transform.localScale.y / 2 + transform.forward * transform.localScale.z / 2; + var xVar = transform.localScale.x / voxelSize / 2f; + var zVar = transform.localScale.z / voxelSize / 2f; + var data = new Vector3[voxelSize, voxelSize]; + //Gizmos.color = Color.blue; + for (int x = 0; x < voxelSize; x++) + { + for (int z = 0; z < voxelSize; z++) + { + var rayPos = startPos - transform.right * xVar - transform.forward * zVar; + if (Physics.Raycast(rayPos, Vector2.down, out RaycastHit hit)) + { + var point = hit.point + Vector3.up * offset; + data[x, z] = point; + } + zVar += transform.localScale.z / voxelSize; + } + xVar += transform.localScale.x / voxelSize; + zVar = transform.localScale.z / voxelSize / 2f; + } + + CheckSquare(data, 5, voxelSize, threshold, blendDistance, transform); + CheckSquare(data, 4, voxelSize, threshold, blendDistance, transform); + CheckSquare(data, 3, voxelSize, threshold, blendDistance, transform); + CheckSquare(data, 2, voxelSize, threshold, blendDistance, transform); + + for (int x = 0; x < voxelSize; x++) + { + for (int z = 0; z < voxelSize; z++) + { + if (data[x, z].x != float.PositiveInfinity) + { + var go = new GameObject("Reflection Probe Size: 1"); + go.transform.SetParent(transform); + go.transform.position = data[x, z]; + var reflectionProbe = go.AddComponent(typeof(ReflectionProbe)) as ReflectionProbe; + reflectionProbe.resolution = 16; + reflectionProbe.center = new Vector3(0f, transform.position.y - data[x, z].y, 0f); + reflectionProbe.size = new Vector3(transform.localScale.x / voxelSize + blendDistance, transform.localScale.y, transform.localScale.z / voxelSize + blendDistance); + } + } + } + } + + private void CheckSquare(Vector3[,] data, int size, int voxelSize, float threshold, float blendDistance, Transform transform) + { + for (int x = 0; x < voxelSize; x++) + { + for (int z = 0; z < voxelSize; z++) + { + if (x + size <= voxelSize && z + size <= voxelSize) + { + bool valid = true; + var point = Vector3.zero; + for (int i = 0; i < size; i++) + { + for (int k = 0; k < size; k++) + { + var pos = data[x + i, z + k]; + if (pos != Vector3.positiveInfinity) + { + if (Compare(data[x, z].y, pos.y, threshold)) + { + point += pos; + + } + else + { + valid = false; + } + } + } + } + if (valid) + { + point /= size * size; + + var go = new GameObject("Reflection Probe Size: " + size); + go.transform.SetParent(transform); + go.transform.position = point; + var reflectionProbe = go.AddComponent(typeof(ReflectionProbe)) as ReflectionProbe; + if (size == 2) + { + reflectionProbe.resolution = 16; + } + else if (size == 3) + { + reflectionProbe.resolution = 32; + } + else if (size == 4) + { + reflectionProbe.resolution = 32; + } + else if (size == 5) + { + reflectionProbe.resolution = 64; + } + + reflectionProbe.center = new Vector3(0f, transform.position.y - point.y, 0f); + reflectionProbe.size = new Vector3(transform.localScale.x / voxelSize * size + blendDistance, transform.localScale.y, transform.localScale.z / voxelSize * size + blendDistance); + + for (int i = 0; i < size; i++) + { + for (int k = 0; k < size; k++) + { + data[x + i, z + k] = Vector3.positiveInfinity; + } + } + } + } + } + } + } + + private bool Compare(float arg0, float arg1, float threshold) + { + return Mathf.Abs(arg0 - arg1) < threshold; + } + } + } +} diff --git a/Editor/SceneViewRotation.cs b/Editor/SceneViewRotation.cs index 339a11c..069ddab 100644 --- a/Editor/SceneViewRotation.cs +++ b/Editor/SceneViewRotation.cs @@ -1,81 +1,81 @@ -using UnityEditor; -using UnityEngine; - -namespace Utils -{ - [InitializeOnLoad] - public static class SceneViewRotation - { - private static bool toggleDir; - - static SceneViewRotation() - { - SceneView.duringSceneGui += OnSceneGUI; - } - - private static void OnSceneGUI(SceneView sceneView) - { - if (sceneView.isRotationLocked) - { - return; - } - Event e = Event.current; - switch (e.type) - { - case EventType.KeyDown: - if (e.keyCode == KeyCode.Keypad1) - { - sceneView.rotation = Quaternion.LookRotation(toggleDir ? Vector3.forward : Vector3.back); - } - else if (e.keyCode == KeyCode.Keypad2) - { - var angles = sceneView.rotation.eulerAngles; - sceneView.rotation = Quaternion.Euler(angles.x - 15f, angles.y, angles.z); - } - else if (e.keyCode == KeyCode.Keypad3) - { - sceneView.rotation = Quaternion.LookRotation(toggleDir ? Vector3.left : Vector3.right); - } - else if (e.keyCode == KeyCode.Keypad4) - { - var angles = sceneView.rotation.eulerAngles; - sceneView.rotation = Quaternion.Euler(angles.x, angles.y + 15f, angles.z); - } - else if (e.keyCode == KeyCode.Keypad5) - { - sceneView.orthographic = !sceneView.orthographic; - } - else if (e.keyCode == KeyCode.Keypad6) - { - var angles = sceneView.rotation.eulerAngles; - sceneView.rotation = Quaternion.Euler(angles.x, angles.y - 15f, angles.z); - } - else if (e.keyCode == KeyCode.Keypad7) - { - sceneView.rotation = new Quaternion(0f, toggleDir ? -.7f : .7f, -.7f, 0f); - } - else if (e.keyCode == KeyCode.Keypad8) - { - var angles = sceneView.rotation.eulerAngles; - sceneView.rotation = Quaternion.Euler(angles.x + 15f, angles.y, angles.z); - } - //else if (e.keyCode == KeyCode.Keypad9) - //{ - // //sceneView.rotation = Quaternion.LookRotation(-sceneView.camera.transform.forward); - // sceneView.rotation = Quaternion.Inverse(sceneView.rotation); - //} - else if (e.keyCode == KeyCode.LeftControl) - { - toggleDir = true; - } - break; - case EventType.KeyUp: - if (e.keyCode == KeyCode.LeftControl) - { - toggleDir = false; - } - break; - } - } - } -} +using UnityEditor; +using UnityEngine; + +namespace Utils +{ + [InitializeOnLoad] + public static class SceneViewRotation + { + private static bool toggleDir; + + static SceneViewRotation() + { + SceneView.duringSceneGui += OnSceneGUI; + } + + private static void OnSceneGUI(SceneView sceneView) + { + if (sceneView.isRotationLocked) + { + return; + } + Event e = Event.current; + switch (e.type) + { + case EventType.KeyDown: + if (e.keyCode == KeyCode.Keypad1) + { + sceneView.rotation = Quaternion.LookRotation(toggleDir ? Vector3.forward : Vector3.back); + } + else if (e.keyCode == KeyCode.Keypad2) + { + var angles = sceneView.rotation.eulerAngles; + sceneView.rotation = Quaternion.Euler(angles.x - 15f, angles.y, angles.z); + } + else if (e.keyCode == KeyCode.Keypad3) + { + sceneView.rotation = Quaternion.LookRotation(toggleDir ? Vector3.left : Vector3.right); + } + else if (e.keyCode == KeyCode.Keypad4) + { + var angles = sceneView.rotation.eulerAngles; + sceneView.rotation = Quaternion.Euler(angles.x, angles.y + 15f, angles.z); + } + else if (e.keyCode == KeyCode.Keypad5) + { + sceneView.orthographic = !sceneView.orthographic; + } + else if (e.keyCode == KeyCode.Keypad6) + { + var angles = sceneView.rotation.eulerAngles; + sceneView.rotation = Quaternion.Euler(angles.x, angles.y - 15f, angles.z); + } + else if (e.keyCode == KeyCode.Keypad7) + { + sceneView.rotation = new Quaternion(0f, toggleDir ? -.7f : .7f, -.7f, 0f); + } + else if (e.keyCode == KeyCode.Keypad8) + { + var angles = sceneView.rotation.eulerAngles; + sceneView.rotation = Quaternion.Euler(angles.x + 15f, angles.y, angles.z); + } + //else if (e.keyCode == KeyCode.Keypad9) + //{ + // //sceneView.rotation = Quaternion.LookRotation(-sceneView.camera.transform.forward); + // sceneView.rotation = Quaternion.Inverse(sceneView.rotation); + //} + else if (e.keyCode == KeyCode.LeftControl) + { + toggleDir = true; + } + break; + case EventType.KeyUp: + if (e.keyCode == KeyCode.LeftControl) + { + toggleDir = false; + } + break; + } + } + } +} diff --git a/LICENSE.md b/LICENSE.md index d30a4f3..3f02d2f 100644 --- a/LICENSE.md +++ b/LICENSE.md @@ -1,21 +1,21 @@ -MIT License - -Copyright (c) 2021 Alexander Filippov - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. +MIT License + +Copyright (c) 2021 Alexander Filippov + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/README.md b/README.md index 5a45431..0a67fa4 100644 --- a/README.md +++ b/README.md @@ -1,13 +1,13 @@ -# Utils -Unity package with utility useful for almost any project. - -## Features -* Hide the script field. -* C# Event based Event Manager - * Call Update, FixedUpdate and LateUpdate from anywhere. - * Better performance than Unity methods. -* Automatic volume based reflection probe placer. -* Check how much time has passed with the Time Since struct. -* Camera Blender controls in the scene view. -* Package Manager Git updater. +# Utils +Unity package with utility useful for almost any project. + +## Features +* Hide the script field. +* C# Event based Event Manager + * Call Update, FixedUpdate and LateUpdate from anywhere. + * Better performance than Unity methods. +* Automatic volume based reflection probe placer. +* Check how much time has passed with the Time Since struct. +* Camera Blender controls in the scene view. +* Package Manager Git updater. * Append to an array. \ No newline at end of file diff --git a/Runtime/ArrayExtensions.cs b/Runtime/ArrayExtensions.cs index 929f518..ac83fe8 100644 --- a/Runtime/ArrayExtensions.cs +++ b/Runtime/ArrayExtensions.cs @@ -1,22 +1,22 @@ -namespace Utils -{ - public static class ArrayExtensions - { - public static T[] Append(this T[] array, T item) - { - if (array == null) - { - return new T[] { item }; - } - - var result = new T[array.Length + 1]; - for (var i = 0; i < array.Length; i++) - { - result[i] = array[i]; - } - - result[array.Length] = item; - return result; - } - } -} +namespace Utils +{ + public static class ArrayExtensions + { + public static T[] Append(this T[] array, T item) + { + if (array == null) + { + return new T[] { item }; + } + + var result = new T[array.Length + 1]; + for (var i = 0; i < array.Length; i++) + { + result[i] = array[i]; + } + + result[array.Length] = item; + return result; + } + } +} diff --git a/Runtime/DefaultMonoBehaviourEditor.cs b/Runtime/DefaultMonoBehaviourEditor.cs index 77b43b9..fe01bb0 100644 --- a/Runtime/DefaultMonoBehaviourEditor.cs +++ b/Runtime/DefaultMonoBehaviourEditor.cs @@ -1,36 +1,36 @@ -#if UNITY_EDITOR -using UnityEditor; -using UnityEngine; - -namespace Utils -{ - [CustomEditor(typeof(MonoBehaviour), true)] - public class DefaultMonoBehaviourEditor : Editor - { - private bool hideScriptField; - - private void OnEnable() - { - hideScriptField = target.GetType().GetCustomAttributes(typeof(HideScriptField), false).Length > 0; - } - - public override void OnInspectorGUI() - { - if (hideScriptField) - { - serializedObject.Update(); - EditorGUI.BeginChangeCheck(); - DrawPropertiesExcluding(serializedObject, "m_Script"); - if (EditorGUI.EndChangeCheck()) - { - serializedObject.ApplyModifiedProperties(); - } - } - else - { - base.OnInspectorGUI(); - } - } - } -} +#if UNITY_EDITOR +using UnityEditor; +using UnityEngine; + +namespace Utils +{ + [CustomEditor(typeof(MonoBehaviour), true)] + public class DefaultMonoBehaviourEditor : Editor + { + private bool hideScriptField; + + private void OnEnable() + { + hideScriptField = target.GetType().GetCustomAttributes(typeof(HideScriptField), false).Length > 0; + } + + public override void OnInspectorGUI() + { + if (hideScriptField) + { + serializedObject.Update(); + EditorGUI.BeginChangeCheck(); + DrawPropertiesExcluding(serializedObject, "m_Script"); + if (EditorGUI.EndChangeCheck()) + { + serializedObject.ApplyModifiedProperties(); + } + } + else + { + base.OnInspectorGUI(); + } + } + } +} #endif \ No newline at end of file diff --git a/Runtime/DefaultScriptableObjectEditor.cs b/Runtime/DefaultScriptableObjectEditor.cs index d00f4f3..0cf178a 100644 --- a/Runtime/DefaultScriptableObjectEditor.cs +++ b/Runtime/DefaultScriptableObjectEditor.cs @@ -1,34 +1,34 @@ -#if UNITY_EDITOR -using UnityEditor; -using UnityEngine; - -namespace Utils -{ - [CustomEditor(typeof(ScriptableObject), true)] - public class DefaultScriptableObjectEditor : Editor - { - private bool hideScriptField; - - private void OnEnable() - { - hideScriptField = target.GetType().GetCustomAttributes(typeof(HideScriptField), false).Length > 0; - } - - public override void OnInspectorGUI() - { - if (hideScriptField) - { - serializedObject.Update(); - EditorGUI.BeginChangeCheck(); - DrawPropertiesExcluding(serializedObject, "m_Script"); - if (EditorGUI.EndChangeCheck()) - serializedObject.ApplyModifiedProperties(); - } - else - { - base.OnInspectorGUI(); - } - } - } -} +#if UNITY_EDITOR +using UnityEditor; +using UnityEngine; + +namespace Utils +{ + [CustomEditor(typeof(ScriptableObject), true)] + public class DefaultScriptableObjectEditor : Editor + { + private bool hideScriptField; + + private void OnEnable() + { + hideScriptField = target.GetType().GetCustomAttributes(typeof(HideScriptField), false).Length > 0; + } + + public override void OnInspectorGUI() + { + if (hideScriptField) + { + serializedObject.Update(); + EditorGUI.BeginChangeCheck(); + DrawPropertiesExcluding(serializedObject, "m_Script"); + if (EditorGUI.EndChangeCheck()) + serializedObject.ApplyModifiedProperties(); + } + else + { + base.OnInspectorGUI(); + } + } + } +} #endif \ No newline at end of file diff --git a/Runtime/EventManager.cs b/Runtime/EventManager.cs index 7e06046..82cad22 100644 --- a/Runtime/EventManager.cs +++ b/Runtime/EventManager.cs @@ -1,58 +1,58 @@ -using UnityEngine; - -namespace Utils -{ - public class EventManager : MonoBehaviour - { - public delegate void UpdateAction(); - public static event UpdateAction OnUpdated; - - public delegate void FixedUpdateAction(); - public static event FixedUpdateAction OnFixedUpdated; - - public delegate void LateUpdateAction(); - public static event LateUpdateAction OnLateUpdated; - - private void Update() - { - OnUpdated?.Invoke(); - } - - private void FixedUpdate() - { - OnFixedUpdated?.Invoke(); - } - - private void LateUpdate() - { - OnLateUpdated?.Invoke(); - } - - public static int UpdateLength - { - get - { - var list = OnUpdated?.GetInvocationList(); - return list?.Length ?? 0; - } - } - - public static int FixedUpdateLength - { - get - { - var list = OnFixedUpdated?.GetInvocationList(); - return list?.Length ?? 0; - } - } - - public static int LateUpdateLength - { - get - { - var list = OnLateUpdated?.GetInvocationList(); - return list?.Length ?? 0; - } - } - } -} +using UnityEngine; + +namespace Utils +{ + public class EventManager : MonoBehaviour + { + public delegate void UpdateAction(); + public static event UpdateAction OnUpdated; + + public delegate void FixedUpdateAction(); + public static event FixedUpdateAction OnFixedUpdated; + + public delegate void LateUpdateAction(); + public static event LateUpdateAction OnLateUpdated; + + private void Update() + { + OnUpdated?.Invoke(); + } + + private void FixedUpdate() + { + OnFixedUpdated?.Invoke(); + } + + private void LateUpdate() + { + OnLateUpdated?.Invoke(); + } + + public static int UpdateLength + { + get + { + var list = OnUpdated?.GetInvocationList(); + return list?.Length ?? 0; + } + } + + public static int FixedUpdateLength + { + get + { + var list = OnFixedUpdated?.GetInvocationList(); + return list?.Length ?? 0; + } + } + + public static int LateUpdateLength + { + get + { + var list = OnLateUpdated?.GetInvocationList(); + return list?.Length ?? 0; + } + } + } +} diff --git a/Runtime/HideScriptField.cs b/Runtime/HideScriptField.cs index 5184ac9..920dad4 100644 --- a/Runtime/HideScriptField.cs +++ b/Runtime/HideScriptField.cs @@ -1,7 +1,7 @@ -using System; - -namespace Utils -{ - [AttributeUsage(AttributeTargets.Class, Inherited = false, AllowMultiple = false)] - public sealed class HideScriptField : Attribute { } +using System; + +namespace Utils +{ + [AttributeUsage(AttributeTargets.Class, Inherited = false, AllowMultiple = false)] + public sealed class HideScriptField : Attribute { } } \ No newline at end of file diff --git a/Runtime/ReadOnlyFieldAttribute.cs b/Runtime/ReadOnlyFieldAttribute.cs index 6df264b..f6f8069 100644 --- a/Runtime/ReadOnlyFieldAttribute.cs +++ b/Runtime/ReadOnlyFieldAttribute.cs @@ -1,6 +1,6 @@ -using UnityEngine; - -namespace Utils -{ - public class ReadOnlyFieldAttribute : PropertyAttribute { } -} +using UnityEngine; + +namespace Utils +{ + public class ReadOnlyFieldAttribute : PropertyAttribute { } +} diff --git a/Runtime/ReflectionProbeVolume.cs b/Runtime/ReflectionProbeVolume.cs index 46fb972..64a7cc7 100644 --- a/Runtime/ReflectionProbeVolume.cs +++ b/Runtime/ReflectionProbeVolume.cs @@ -1,108 +1,108 @@ -using System.Diagnostics; -using UnityEngine; - -namespace Utils -{ - public class ReflectionProbeVolume : MonoBehaviour - { - [Min(1)] - public int resolution = 4; - public float offset = 2; - public float blendDistance = 1; - [Min(0)] - public float threshold = .5f; - - [Conditional("UNITY_EDITOR")] - private void OnDrawGizmosSelected() - { - Gizmos.DrawWireCube(transform.position, transform.localScale); - var startPos = transform.position + transform.right * transform.localScale.x / 2 + transform.up * transform.localScale.y / 2 + transform.forward * transform.localScale.z / 2; - var xVar = transform.localScale.x / resolution / 2f; - var zVar = transform.localScale.z / resolution / 2f; - var data = new Vector3[resolution, resolution]; - Gizmos.color = Color.blue; - for (int x = 0; x < resolution; x++) - { - for (int z = 0; z < resolution; z++) - { - var rayPos = startPos - transform.right * xVar - transform.forward * zVar; - if (Physics.Raycast(rayPos, Vector2.down, out RaycastHit hit)) - { - var point = hit.point + Vector3.up * offset; - data[x, z] = point; - } - zVar += transform.localScale.z / resolution; - } - xVar += transform.localScale.x / resolution; - zVar = transform.localScale.z / resolution / 2f; - } - - CheckSquare(data, 5); - CheckSquare(data, 4); - CheckSquare(data, 3); - CheckSquare(data, 2); - - for (int x = 0; x < resolution; x++) - { - for (int z = 0; z < resolution; z++) - { - if (data[x, z] != Vector3.positiveInfinity) - { - Gizmos.DrawSphere(data[x, z], .1f); - } - } - } - } - - private void CheckSquare(Vector3[,] data, int size) - { - for (int x = 0; x < resolution; x++) - { - for (int z = 0; z < resolution; z++) - { - if (x + size <= resolution && z + size <= resolution) - { - bool valid = true; - var point = Vector3.zero; - for (int i = 0; i < size; i++) - { - for (int k = 0; k < size; k++) - { - var pos = data[x + i, z + k]; - if (pos != Vector3.positiveInfinity) - { - if (Compare(data[x, z].y, pos.y)) - { - point += pos; - - } - else - { - valid = false; - } - } - } - } - if (valid) - { - point /= size * size; - Gizmos.DrawSphere(point, size * .1f); - for (int i = 0; i < size; i++) - { - for (int k = 0; k < size; k++) - { - data[x + i, z + k] = Vector3.positiveInfinity; - } - } - } - } - } - } - } - - private bool Compare(float arg0, float arg1) - { - return Mathf.Abs(arg0 - arg1) < threshold; - } - } -} +using System.Diagnostics; +using UnityEngine; + +namespace Utils +{ + public class ReflectionProbeVolume : MonoBehaviour + { + [Min(1)] + public int resolution = 4; + public float offset = 2; + public float blendDistance = 1; + [Min(0)] + public float threshold = .5f; + + [Conditional("UNITY_EDITOR")] + private void OnDrawGizmosSelected() + { + Gizmos.DrawWireCube(transform.position, transform.localScale); + var startPos = transform.position + transform.right * transform.localScale.x / 2 + transform.up * transform.localScale.y / 2 + transform.forward * transform.localScale.z / 2; + var xVar = transform.localScale.x / resolution / 2f; + var zVar = transform.localScale.z / resolution / 2f; + var data = new Vector3[resolution, resolution]; + Gizmos.color = Color.blue; + for (int x = 0; x < resolution; x++) + { + for (int z = 0; z < resolution; z++) + { + var rayPos = startPos - transform.right * xVar - transform.forward * zVar; + if (Physics.Raycast(rayPos, Vector2.down, out RaycastHit hit)) + { + var point = hit.point + Vector3.up * offset; + data[x, z] = point; + } + zVar += transform.localScale.z / resolution; + } + xVar += transform.localScale.x / resolution; + zVar = transform.localScale.z / resolution / 2f; + } + + CheckSquare(data, 5); + CheckSquare(data, 4); + CheckSquare(data, 3); + CheckSquare(data, 2); + + for (int x = 0; x < resolution; x++) + { + for (int z = 0; z < resolution; z++) + { + if (data[x, z] != Vector3.positiveInfinity) + { + Gizmos.DrawSphere(data[x, z], .1f); + } + } + } + } + + private void CheckSquare(Vector3[,] data, int size) + { + for (int x = 0; x < resolution; x++) + { + for (int z = 0; z < resolution; z++) + { + if (x + size <= resolution && z + size <= resolution) + { + bool valid = true; + var point = Vector3.zero; + for (int i = 0; i < size; i++) + { + for (int k = 0; k < size; k++) + { + var pos = data[x + i, z + k]; + if (pos != Vector3.positiveInfinity) + { + if (Compare(data[x, z].y, pos.y)) + { + point += pos; + + } + else + { + valid = false; + } + } + } + } + if (valid) + { + point /= size * size; + Gizmos.DrawSphere(point, size * .1f); + for (int i = 0; i < size; i++) + { + for (int k = 0; k < size; k++) + { + data[x + i, z + k] = Vector3.positiveInfinity; + } + } + } + } + } + } + } + + private bool Compare(float arg0, float arg1) + { + return Mathf.Abs(arg0 - arg1) < threshold; + } + } +} diff --git a/Runtime/TimeSince.cs b/Runtime/TimeSince.cs index b820fbb..1736d7a 100644 --- a/Runtime/TimeSince.cs +++ b/Runtime/TimeSince.cs @@ -1,36 +1,36 @@ -using UnityEngine; - -namespace Utils -{ - public struct TimeSince - { - private float time; - - public static implicit operator float(TimeSince ts) - { - return Time.time - ts.time; - } - - public static implicit operator TimeSince(float ts) - { - return new TimeSince { time = Time.time - ts }; - } - } -} - -// https://garry.tv/timesince - -//TimeSince ts; - -//void Start() -//{ -// ts = 0; -//} - -//void Update() -//{ -// if (ts > 10) -// { -// DoSomethingAfterTenSeconds(); -// } -//} +using UnityEngine; + +namespace Utils +{ + public struct TimeSince + { + private float time; + + public static implicit operator float(TimeSince ts) + { + return Time.time - ts.time; + } + + public static implicit operator TimeSince(float ts) + { + return new TimeSince { time = Time.time - ts }; + } + } +} + +// https://garry.tv/timesince + +//TimeSince ts; + +//void Start() +//{ +// ts = 0; +//} + +//void Update() +//{ +// if (ts > 10) +// { +// DoSomethingAfterTenSeconds(); +// } +//} diff --git a/package.json.meta b/package.json.meta index 56c6c31..8061ab2 100644 --- a/package.json.meta +++ b/package.json.meta @@ -1,7 +1,7 @@ -fileFormatVersion: 2 -guid: 3cea9973e4f0f814ea87aacbfbddcb7a -PackageManifestImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: +fileFormatVersion: 2 +guid: 3cea9973e4f0f814ea87aacbfbddcb7a +PackageManifestImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: