103 lines
		
	
	
		
			2.9 KiB
		
	
	
	
		
			C#
		
	
	
	
			
		
		
	
	
			103 lines
		
	
	
		
			2.9 KiB
		
	
	
	
		
			C#
		
	
	
	
| namespace SRF.UI
 | |
| {
 | |
|     using System;
 | |
|     using Internal;
 | |
|     using UnityEngine;
 | |
| 
 | |
|     [ExecuteInEditMode]
 | |
|     [RequireComponent(typeof (RectTransform))]
 | |
|     [AddComponentMenu(ComponentMenuPaths.ResponsiveEnable)]
 | |
|     public class ResponsiveEnable : ResponsiveBase
 | |
|     {
 | |
|         public enum Modes
 | |
|         {
 | |
|             EnableAbove,
 | |
|             EnableBelow
 | |
|         }
 | |
| 
 | |
|         public Entry[] Entries = new Entry[0];
 | |
| 
 | |
|         protected override void Refresh()
 | |
|         {
 | |
|             var rect = RectTransform.rect;
 | |
| 
 | |
|             for (var i = 0; i < Entries.Length; i++)
 | |
|             {
 | |
|                 var e = Entries[i];
 | |
| 
 | |
|                 var enable = true;
 | |
| 
 | |
|                 switch (e.Mode)
 | |
|                 {
 | |
|                     case Modes.EnableAbove:
 | |
|                     {
 | |
|                         if (e.ThresholdHeight > 0)
 | |
|                         {
 | |
|                             enable = rect.height >= e.ThresholdHeight && enable;
 | |
|                         }
 | |
| 
 | |
|                         if (e.ThresholdWidth > 0)
 | |
|                         {
 | |
|                             enable = rect.width >= e.ThresholdWidth && enable;
 | |
|                         }
 | |
| 
 | |
|                         break;
 | |
|                     }
 | |
|                     case Modes.EnableBelow:
 | |
|                     {
 | |
|                         if (e.ThresholdHeight > 0)
 | |
|                         {
 | |
|                             enable = rect.height <= e.ThresholdHeight && enable;
 | |
|                         }
 | |
| 
 | |
|                         if (e.ThresholdWidth > 0)
 | |
|                         {
 | |
|                             enable = rect.width <= e.ThresholdWidth && enable;
 | |
|                         }
 | |
| 
 | |
|                         break;
 | |
|                     }
 | |
|                     default:
 | |
|                         throw new IndexOutOfRangeException();
 | |
|                 }
 | |
| 
 | |
|                 if (e.GameObjects != null)
 | |
|                 {
 | |
|                     for (var j = 0; j < e.GameObjects.Length; j++)
 | |
|                     {
 | |
|                         var go = e.GameObjects[j];
 | |
| 
 | |
|                         if (go != null)
 | |
|                         {
 | |
|                             go.SetActive(enable);
 | |
|                         }
 | |
|                     }
 | |
|                 }
 | |
| 
 | |
|                 if (e.Components != null)
 | |
|                 {
 | |
|                     for (var j = 0; j < e.Components.Length; j++)
 | |
|                     {
 | |
|                         var go = e.Components[j];
 | |
| 
 | |
|                         if (go != null)
 | |
|                         {
 | |
|                             go.enabled = enable;
 | |
|                         }
 | |
|                     }
 | |
|                 }
 | |
|             }
 | |
|         }
 | |
| 
 | |
|         [Serializable]
 | |
|         public struct Entry
 | |
|         {
 | |
|             public Behaviour[] Components;
 | |
|             public GameObject[] GameObjects;
 | |
|             public Modes Mode;
 | |
|             public float ThresholdHeight;
 | |
|             public float ThresholdWidth;
 | |
|         }
 | |
|     }
 | |
| }
 |