refactor
parent
2e813c5313
commit
dd94bba43c
|
@ -1,125 +0,0 @@
|
||||||
using System.Collections.Generic;
|
|
||||||
using UnityEditor;
|
|
||||||
using UnityEngine;
|
|
||||||
using UnityEngine.Profiling;
|
|
||||||
using UnityEngine.UI;
|
|
||||||
|
|
||||||
namespace Coffee.UIParticleInternal
|
|
||||||
{
|
|
||||||
/// <summary>
|
|
||||||
/// Extension methods for Graphic class.
|
|
||||||
/// </summary>
|
|
||||||
internal static class GraphicExtensions
|
|
||||||
{
|
|
||||||
private static readonly Vector3[] s_WorldCorners = new Vector3[4];
|
|
||||||
private static readonly Bounds s_ScreenBounds = new Bounds(new Vector3(0.5f, 0.5f, 0.5f), new Vector3(1, 1, 1));
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Check if a Graphic component is currently in the screen view.
|
|
||||||
/// </summary>
|
|
||||||
public static void GetMaterialsForRendering(this Graphic self, List<Material> result)
|
|
||||||
{
|
|
||||||
result.Clear();
|
|
||||||
if (!self) return;
|
|
||||||
|
|
||||||
var cr = self.canvasRenderer;
|
|
||||||
var count = cr.materialCount;
|
|
||||||
var popCount = cr.popMaterialCount;
|
|
||||||
|
|
||||||
if (result.Capacity < count + popCount)
|
|
||||||
{
|
|
||||||
result.Capacity = count + popCount;
|
|
||||||
}
|
|
||||||
|
|
||||||
for (var i = 0; i < count; i++)
|
|
||||||
{
|
|
||||||
result.Add(cr.GetMaterial(i));
|
|
||||||
}
|
|
||||||
|
|
||||||
for (var i = 0; i < popCount; i++)
|
|
||||||
{
|
|
||||||
result.Add(cr.GetPopMaterial(i));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Check if a Graphic component is currently in the screen view.
|
|
||||||
/// </summary>
|
|
||||||
public static bool IsInScreen(this Graphic self)
|
|
||||||
{
|
|
||||||
if (!self || !self.canvas) return false;
|
|
||||||
|
|
||||||
if (FrameCache.TryGet(self, nameof(IsInScreen), out bool result))
|
|
||||||
{
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
|
|
||||||
Profiler.BeginSample("(COF)[GraphicExt] IsInScreen");
|
|
||||||
var cam = self.canvas.renderMode != RenderMode.ScreenSpaceOverlay
|
|
||||||
? self.canvas.worldCamera
|
|
||||||
: null;
|
|
||||||
var min = new Vector3(float.MaxValue, float.MaxValue, float.MaxValue);
|
|
||||||
var max = new Vector3(float.MinValue, float.MinValue, float.MinValue);
|
|
||||||
self.rectTransform.GetWorldCorners(s_WorldCorners);
|
|
||||||
var screenSize = GetScreenSize();
|
|
||||||
for (var i = 0; i < 4; i++)
|
|
||||||
{
|
|
||||||
if (cam)
|
|
||||||
{
|
|
||||||
s_WorldCorners[i] = cam.WorldToViewportPoint(s_WorldCorners[i]);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
s_WorldCorners[i] = RectTransformUtility.WorldToScreenPoint(null, s_WorldCorners[i]);
|
|
||||||
s_WorldCorners[i].x /= screenSize.x;
|
|
||||||
s_WorldCorners[i].y /= screenSize.y;
|
|
||||||
}
|
|
||||||
|
|
||||||
s_WorldCorners[i].z = 0;
|
|
||||||
min = Vector3.Min(s_WorldCorners[i], min);
|
|
||||||
max = Vector3.Max(s_WorldCorners[i], max);
|
|
||||||
}
|
|
||||||
|
|
||||||
var bounds = new Bounds(min, Vector3.zero);
|
|
||||||
bounds.Encapsulate(max);
|
|
||||||
result = bounds.Intersects(s_ScreenBounds);
|
|
||||||
FrameCache.Set(self, nameof(IsInScreen), result);
|
|
||||||
Profiler.EndSample();
|
|
||||||
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Get the actual main texture of a Graphic component.
|
|
||||||
/// </summary>
|
|
||||||
public static Texture GetActualMainTexture(this Graphic self)
|
|
||||||
{
|
|
||||||
var image = self as Image;
|
|
||||||
if (image == null) return self.mainTexture;
|
|
||||||
|
|
||||||
var sprite = image.overrideSprite;
|
|
||||||
return sprite ? sprite.GetActualTexture() : self.mainTexture;
|
|
||||||
}
|
|
||||||
|
|
||||||
private static Vector2Int GetScreenSize()
|
|
||||||
{
|
|
||||||
#if UNITY_EDITOR
|
|
||||||
if (!Application.isPlaying && !Camera.current)
|
|
||||||
{
|
|
||||||
var res = UnityStats.screenRes.Split('x');
|
|
||||||
return new Vector2Int(int.Parse(res[0]), int.Parse(res[1]));
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
return new Vector2Int(Screen.width, Screen.height);
|
|
||||||
}
|
|
||||||
|
|
||||||
public static float GetParentGroupAlpha(this Graphic self)
|
|
||||||
{
|
|
||||||
var alpha = self.canvasRenderer.GetAlpha();
|
|
||||||
if (Mathf.Approximately(alpha, 0)) return 1;
|
|
||||||
|
|
||||||
var inheritedAlpha = self.canvasRenderer.GetInheritedAlpha();
|
|
||||||
return Mathf.Clamp01(inheritedAlpha / alpha);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,11 +0,0 @@
|
||||||
fileFormatVersion: 2
|
|
||||||
guid: 3803b037cd2ed45459dd660072f223dd
|
|
||||||
MonoImporter:
|
|
||||||
externalObjects: {}
|
|
||||||
serializedVersion: 2
|
|
||||||
defaultReferences: []
|
|
||||||
executionOrder: 0
|
|
||||||
icon: {instanceID: 0}
|
|
||||||
userData:
|
|
||||||
assetBundleName:
|
|
||||||
assetBundleVariant:
|
|
Loading…
Reference in New Issue