mirror of
				https://github.com/DerTyp7/defrain-shooter-unity.git
				synced 2025-11-04 15:18:59 +01:00 
			
		
		
		
	
		
			
				
	
	
		
			78 lines
		
	
	
		
			2.6 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
			
		
		
	
	
			78 lines
		
	
	
		
			2.6 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
using System;
 | 
						|
using System.Collections.Generic;
 | 
						|
using System.Reflection;
 | 
						|
using UnityEngine;
 | 
						|
 | 
						|
namespace Mirror
 | 
						|
{
 | 
						|
    public static class InspectorHelper
 | 
						|
    {
 | 
						|
        /// <summary>Gets all public and private fields for a type</summary>
 | 
						|
        // deepestBaseType: Stops at this base type (exclusive)
 | 
						|
        public static IEnumerable<FieldInfo> GetAllFields(Type type, Type deepestBaseType)
 | 
						|
        {
 | 
						|
            const BindingFlags publicFields = BindingFlags.Public | BindingFlags.Instance;
 | 
						|
            const BindingFlags privateFields = BindingFlags.NonPublic | BindingFlags.Instance;
 | 
						|
 | 
						|
            // get public fields (includes fields from base type)
 | 
						|
            FieldInfo[] allPublicFields = type.GetFields(publicFields);
 | 
						|
            foreach (FieldInfo field in allPublicFields)
 | 
						|
            {
 | 
						|
                yield return field;
 | 
						|
            }
 | 
						|
 | 
						|
            // get private fields in current type, then move to base type
 | 
						|
            while (type != null)
 | 
						|
            {
 | 
						|
                FieldInfo[] allPrivateFields = type.GetFields(privateFields);
 | 
						|
                foreach (FieldInfo field in allPrivateFields)
 | 
						|
                {
 | 
						|
                    yield return field;
 | 
						|
                }
 | 
						|
 | 
						|
                type = type.BaseType;
 | 
						|
 | 
						|
                // stop early
 | 
						|
                if (type == deepestBaseType)
 | 
						|
                {
 | 
						|
                    break;
 | 
						|
                }
 | 
						|
            }
 | 
						|
        }
 | 
						|
 | 
						|
        public static bool IsSyncVar(this FieldInfo field)
 | 
						|
        {
 | 
						|
            object[] fieldMarkers = field.GetCustomAttributes(typeof(SyncVarAttribute), true);
 | 
						|
            return fieldMarkers.Length > 0;
 | 
						|
        }
 | 
						|
 | 
						|
        public static bool IsSerializeField(this FieldInfo field)
 | 
						|
        {
 | 
						|
            object[] fieldMarkers = field.GetCustomAttributes(typeof(SerializeField), true);
 | 
						|
            return fieldMarkers.Length > 0;
 | 
						|
        }
 | 
						|
 | 
						|
        public static bool IsVisibleField(this FieldInfo field)
 | 
						|
        {
 | 
						|
            return field.IsPublic || IsSerializeField(field);
 | 
						|
        }
 | 
						|
 | 
						|
        public static bool ImplementsInterface<T>(this FieldInfo field)
 | 
						|
        {
 | 
						|
            return typeof(T).IsAssignableFrom(field.FieldType);
 | 
						|
        }
 | 
						|
 | 
						|
        public static bool HasShowInInspector(this FieldInfo field)
 | 
						|
        {
 | 
						|
            object[] fieldMarkers = field.GetCustomAttributes(typeof(ShowInInspectorAttribute), true);
 | 
						|
            return fieldMarkers.Length > 0;
 | 
						|
        }
 | 
						|
 | 
						|
        // checks if SyncObject is public or has our custom [ShowInInspector] field
 | 
						|
        public static bool IsVisibleSyncObject(this FieldInfo field)
 | 
						|
        {
 | 
						|
            return field.IsPublic || HasShowInInspector(field);
 | 
						|
        }
 | 
						|
    }
 | 
						|
}
 |