From 2a66393cb07c471d2eaba0902cfd9fa481b98446 Mon Sep 17 00:00:00 2001 From: mob-sakai <12690315+mob-sakai@users.noreply.github.com> Date: Thu, 21 Nov 2024 01:36:51 +0900 Subject: [PATCH] refactor: update coffee.internal --- .../Extensions/ComponentExtensions.cs | 29 +++++++++++++++++++ .../{Extensions => Utilities}/Misc.cs | 9 ++++++ .../{Extensions => Utilities}/Misc.cs.meta | 2 +- .../Internal/Utilities/UIExtraCallbacks.cs | 22 ++++++++++++++ Runtime/UIParticle.cs | 2 ++ Samples~/Demo/Scripts/UIParticle_Demo.cs | 25 ++++------------ 6 files changed, 68 insertions(+), 21 deletions(-) rename Runtime/Internal/{Extensions => Utilities}/Misc.cs (78%) rename Runtime/Internal/{Extensions => Utilities}/Misc.cs.meta (83%) diff --git a/Runtime/Internal/Extensions/ComponentExtensions.cs b/Runtime/Internal/Extensions/ComponentExtensions.cs index b45f016..d65be22 100644 --- a/Runtime/Internal/Extensions/ComponentExtensions.cs +++ b/Runtime/Internal/Extensions/ComponentExtensions.cs @@ -134,6 +134,35 @@ namespace Coffee.UIParticleInternal Profiler.EndSample(); } + /// <summary> + /// Add a component of a specific type to the children of a GameObject. + /// </summary> + public static void AddComponentOnChildren<T>(this Component self, bool includeSelf) + where T : Component + { + if (self == null) return; + + Profiler.BeginSample("(COF)[ComponentExt] AddComponentOnChildren > Self"); + if (includeSelf && !self.TryGetComponent<T>(out _)) + { + self.gameObject.AddComponent<T>(); + } + + Profiler.EndSample(); + + Profiler.BeginSample("(COF)[ComponentExt] AddComponentOnChildren > Child"); + var childCount = self.transform.childCount; + for (var i = 0; i < childCount; i++) + { + var child = self.transform.GetChild(i); + if (child.TryGetComponent<T>(out _)) continue; + + child.gameObject.AddComponent<T>(); + } + + Profiler.EndSample(); + } + #if !UNITY_2021_2_OR_NEWER && !UNITY_2020_3_45 && !UNITY_2020_3_46 && !UNITY_2020_3_47 && !UNITY_2020_3_48 public static T GetComponentInParent<T>(this Component self, bool includeInactive) where T : Component { diff --git a/Runtime/Internal/Extensions/Misc.cs b/Runtime/Internal/Utilities/Misc.cs similarity index 78% rename from Runtime/Internal/Extensions/Misc.cs rename to Runtime/Internal/Utilities/Misc.cs index 66d0b4e..fb1a210 100644 --- a/Runtime/Internal/Extensions/Misc.cs +++ b/Runtime/Internal/Utilities/Misc.cs @@ -6,6 +6,15 @@ namespace Coffee.UIParticleInternal { internal static class Misc { + public static T[] FindObjectsOfType<T>() where T : Object + { +#if UNITY_2023_1_OR_NEWER + return Object.FindObjectsByType<T>(FindObjectsInactive.Include, FindObjectsSortMode.None); +#else + return Object.FindObjectsOfType<T>(); +#endif + } + public static void Destroy(Object obj) { if (!obj) return; diff --git a/Runtime/Internal/Extensions/Misc.cs.meta b/Runtime/Internal/Utilities/Misc.cs.meta similarity index 83% rename from Runtime/Internal/Extensions/Misc.cs.meta rename to Runtime/Internal/Utilities/Misc.cs.meta index 5668392..e9f550c 100644 --- a/Runtime/Internal/Extensions/Misc.cs.meta +++ b/Runtime/Internal/Utilities/Misc.cs.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 39ed6a6b0a72e482488bd298b2ae762e +guid: 182319ecc315e4858b119764af0fbcb0 MonoImporter: externalObjects: {} serializedVersion: 2 diff --git a/Runtime/Internal/Utilities/UIExtraCallbacks.cs b/Runtime/Internal/Utilities/UIExtraCallbacks.cs index be9e7ee..6ad33ed 100755 --- a/Runtime/Internal/Utilities/UIExtraCallbacks.cs +++ b/Runtime/Internal/Utilities/UIExtraCallbacks.cs @@ -14,6 +14,8 @@ namespace Coffee.UIParticleInternal private static readonly FastAction s_AfterCanvasRebuildAction = new FastAction(); private static readonly FastAction s_LateAfterCanvasRebuildAction = new FastAction(); private static readonly FastAction s_BeforeCanvasRebuildAction = new FastAction(); + private static readonly FastAction s_OnScreenSizeChangedAction = new FastAction(); + private static Vector2Int s_LastScreenSize; static UIExtraCallbacks() { @@ -48,6 +50,15 @@ namespace Coffee.UIParticleInternal remove => s_AfterCanvasRebuildAction.Remove(value); } + /// <summary> + /// Event that occurs when the screen size changes. + /// </summary> + public static event Action onScreenSizeChanged + { + add => s_OnScreenSizeChangedAction.Add(value); + remove => s_OnScreenSizeChangedAction.Remove(value); + } + /// <summary> /// Initializes the UIExtraCallbacks to ensure proper event handling. /// </summary> @@ -77,6 +88,17 @@ namespace Coffee.UIParticleInternal /// </summary> private static void OnBeforeCanvasRebuild() { + var screenSize = new Vector2Int(Screen.width, Screen.height); + if (s_LastScreenSize != screenSize) + { + if (s_LastScreenSize != default) + { + s_OnScreenSizeChangedAction.Invoke(); + } + + s_LastScreenSize = screenSize; + } + s_BeforeCanvasRebuildAction.Invoke(); InitializeAfterCanvasRebuild(); } diff --git a/Runtime/UIParticle.cs b/Runtime/UIParticle.cs index 40133d6..5ad390d 100644 --- a/Runtime/UIParticle.cs +++ b/Runtime/UIParticle.cs @@ -9,6 +9,8 @@ using UnityEngine.UI; using Random = UnityEngine.Random; [assembly: InternalsVisibleTo("Coffee.UIParticle.Editor")] +[assembly: InternalsVisibleTo("Coffee.UIParticle.PerformanceDemo")] +[assembly: InternalsVisibleTo("Coffee.UIParticle.Demo")] namespace Coffee.UIExtensions { diff --git a/Samples~/Demo/Scripts/UIParticle_Demo.cs b/Samples~/Demo/Scripts/UIParticle_Demo.cs index 266eda3..68e8993 100644 --- a/Samples~/Demo/Scripts/UIParticle_Demo.cs +++ b/Samples~/Demo/Scripts/UIParticle_Demo.cs @@ -1,3 +1,4 @@ +using Coffee.UIParticleInternal; using UnityEngine; using UnityEngine.Serialization; using UnityEngine.UI; @@ -51,11 +52,7 @@ namespace Coffee.UIExtensions.Demo public void EnableAnimations(bool flag) { -#if UNITY_2023_1_OR_NEWER - foreach (var animator in FindObjectsByType<Animator>(FindObjectsInactive.Include, FindObjectsSortMode.None)) -#else - foreach (var animator in FindObjectsOfType<Animator>()) -#endif + foreach (var animator in Misc.FindObjectsOfType<Animator>()) { animator.enabled = flag; } @@ -83,11 +80,7 @@ namespace Coffee.UIExtensions.Demo public void UIParticle_Scale(float scale) { -#if UNITY_2023_1_OR_NEWER - foreach (var uip in FindObjectsByType<UIParticle>(FindObjectsInactive.Include, FindObjectsSortMode.None)) -#else - foreach (var uip in FindObjectsOfType<UIParticle>()) -#endif + foreach (var uip in Misc.FindObjectsOfType<UIParticle>()) { uip.scale = scale; } @@ -95,11 +88,7 @@ namespace Coffee.UIExtensions.Demo public void ParticleSystem_WorldSpaseSimulation(bool flag) { -#if UNITY_2023_1_OR_NEWER - foreach (var p in FindObjectsByType<ParticleSystem>(FindObjectsInactive.Include, FindObjectsSortMode.None)) -#else - foreach (var p in FindObjectsOfType<ParticleSystem>()) -#endif + foreach (var p in Misc.FindObjectsOfType<ParticleSystem>()) { var main = p.main; main.simulationSpace = flag @@ -135,11 +124,7 @@ namespace Coffee.UIExtensions.Demo public void ParticleSystem_SetScale(float scale) { -#if UNITY_2023_1_OR_NEWER - foreach (var ps in FindObjectsByType<ParticleSystem>(FindObjectsInactive.Include, FindObjectsSortMode.None)) -#else - foreach (var ps in FindObjectsOfType<ParticleSystem>()) -#endif + foreach (var ps in Misc.FindObjectsOfType<ParticleSystem>()) { ps.transform.localScale = new Vector3(scale, scale, scale); }