79 lines
		
	
	
		
			2.6 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
			
		
		
	
	
			79 lines
		
	
	
		
			2.6 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
| using System;
 | |
| using System.Collections;
 | |
| using System.Collections.Generic;
 | |
| using UnityEngine;
 | |
| 
 | |
| #if UNITY_EDITOR
 | |
| using UnityEditor;
 | |
| #endif
 | |
| 
 | |
| namespace UnityEngine.Rendering.Universal
 | |
| {
 | |
|     internal class ShapeProviderUtility
 | |
|     {
 | |
|         static public void CallOnBeforeRender(ShadowShape2DProvider shapeProvider, Component component, ShadowMesh2D shadowMesh, Bounds bounds)
 | |
|         {
 | |
|             if (component != null)
 | |
|             {
 | |
|                 if (shapeProvider != null && component.gameObject.activeInHierarchy)
 | |
|                     shapeProvider.OnBeforeRender(component, bounds, shadowMesh);
 | |
|             }
 | |
|             else if (shadowMesh != null && shadowMesh.mesh != null)
 | |
|             {
 | |
|                 shadowMesh.mesh.Clear();
 | |
|             }
 | |
|         }
 | |
| 
 | |
|         static public void PersistantDataCreated(ShadowShape2DProvider shapeProvider, Component component, ShadowMesh2D shadowMesh)
 | |
|         {
 | |
|             if (component != null)
 | |
|             {
 | |
|                 if (shapeProvider != null)
 | |
|                     shapeProvider.OnPersistantDataCreated(component, shadowMesh);
 | |
|             }
 | |
|         }
 | |
| 
 | |
| #if UNITY_EDITOR
 | |
|         static public void TryGetDefaultShadowShapeProviderSource(GameObject go, out Component outSource, out ShadowShape2DProvider outProvider)
 | |
|         {
 | |
|             outSource = null;
 | |
|             outProvider = null;
 | |
| 
 | |
|             // Create some providers to check against.
 | |
|             var providerTypes = TypeCache.GetTypesDerivedFrom<ShadowShape2DProvider>();
 | |
|             var providers = new List<ShadowShape2DProvider>(providerTypes.Count);
 | |
|             foreach (Type providerType in providerTypes)
 | |
|             {
 | |
|                 if (providerType.IsAbstract)
 | |
|                     continue;
 | |
| 
 | |
|                 providers.Add(Activator.CreateInstance(providerType) as ShadowShape2DProvider);
 | |
|             }
 | |
| 
 | |
|             // Fetch the components to check.
 | |
|             var components = go.GetComponents<Component>();
 | |
| 
 | |
|             var currentPriority = int.MinValue;
 | |
|             foreach (var component in components)
 | |
|             {
 | |
|                 // check each component to see if it is a valid provider
 | |
|                 foreach (var provider in providers)
 | |
|                 {
 | |
|                     if (provider.IsShapeSource(component))
 | |
|                     {
 | |
|                         var menuPriority = provider.Priority();
 | |
|                         if (menuPriority > currentPriority)
 | |
|                         {
 | |
|                             currentPriority = menuPriority;
 | |
|                             outSource = component;
 | |
|                             outProvider = provider;
 | |
|                         }
 | |
|                     }
 | |
|                 }
 | |
|             }
 | |
|         }
 | |
| 
 | |
| #endif
 | |
|     }
 | |
| }
 |