forked from cgvr/DeltaVR
		
	
		
			
				
	
	
		
			146 lines
		
	
	
		
			5.1 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
			
		
		
	
	
			146 lines
		
	
	
		
			5.1 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
 | 
						|
using System;
 | 
						|
using System.Collections.Generic;
 | 
						|
using System.IO;
 | 
						|
using System.Xml.Serialization;
 | 
						|
 | 
						|
#if UNITY_EDITOR
 | 
						|
using UnityEditor;
 | 
						|
#endif
 | 
						|
 | 
						|
namespace FishNet.Configuring
 | 
						|
{
 | 
						|
 | 
						|
    public enum StrippingTypes : int
 | 
						|
    {
 | 
						|
        Redirect = 0,
 | 
						|
        Empty_Experimental = 1,
 | 
						|
    }
 | 
						|
    public enum SearchScopeType : int
 | 
						|
    {
 | 
						|
        EntireProject = 0,
 | 
						|
        SpecificFolders = 1,
 | 
						|
    }
 | 
						|
 | 
						|
    public class PrefabGeneratorConfigurations
 | 
						|
    {
 | 
						|
        public bool Enabled = true;
 | 
						|
        public bool LogToConsole = true;
 | 
						|
        public bool FullRebuild = false;
 | 
						|
        public bool SaveChanges = true;
 | 
						|
        public string DefaultPrefabObjectsPath = Path.Combine("Assets", "DefaultPrefabObjects.asset");
 | 
						|
        public int SearchScope = (int)SearchScopeType.EntireProject;
 | 
						|
        public List<string> ExcludedFolders = new List<string>();
 | 
						|
        public List<string> IncludedFolders = new List<string>();
 | 
						|
    }
 | 
						|
 | 
						|
    public class CodeStrippingConfigurations
 | 
						|
    {
 | 
						|
        public bool IsBuilding = false;
 | 
						|
        public bool IsDevelopment = false;
 | 
						|
        public bool IsHeadless = false;
 | 
						|
        public bool StripReleaseBuilds = false;
 | 
						|
        public int StrippingType = (int)StrippingTypes.Redirect;
 | 
						|
    }
 | 
						|
 | 
						|
 | 
						|
    public class ConfigurationData
 | 
						|
    {
 | 
						|
        //Non serialized doesn't really do anything, its just for me.
 | 
						|
        [System.NonSerialized]
 | 
						|
        public bool Loaded;
 | 
						|
 | 
						|
        public PrefabGeneratorConfigurations PrefabGenerator = new PrefabGeneratorConfigurations();
 | 
						|
        public CodeStrippingConfigurations CodeStripping = new CodeStrippingConfigurations();
 | 
						|
    }
 | 
						|
 | 
						|
    public static class ConfigurationDataExtension
 | 
						|
    {
 | 
						|
        /// <summary>
 | 
						|
        /// Returns if a differs from b.
 | 
						|
        /// </summary>
 | 
						|
        public static bool HasChanged(this ConfigurationData a, ConfigurationData b)
 | 
						|
        {
 | 
						|
            return (a.CodeStripping.StripReleaseBuilds != b.CodeStripping.StripReleaseBuilds);
 | 
						|
        }
 | 
						|
        /// <summary>
 | 
						|
        /// Copies all values from source to target.
 | 
						|
        /// </summary>
 | 
						|
        public static void CopyTo(this ConfigurationData source, ConfigurationData target)
 | 
						|
        {
 | 
						|
            target.CodeStripping.StripReleaseBuilds = source.CodeStripping.StripReleaseBuilds;
 | 
						|
        }
 | 
						|
 | 
						|
 | 
						|
        /// <summary>
 | 
						|
        /// Writes a configuration data.
 | 
						|
        /// </summary>
 | 
						|
        public static void Write(this ConfigurationData cd, bool refreshAssetDatabase)
 | 
						|
        {
 | 
						|
            /* Why is this a thing you ask? Because Unity makes it VERY difficult to read values from
 | 
						|
             * memory during builds since on some Unity versions the building application is on a different
 | 
						|
             * processor. In result instead of using memory to read configurationdata the values
 | 
						|
             * must be written to disk then load the disk values as needed.
 | 
						|
             * 
 | 
						|
             * Fortunatelly the file is extremely small and this does not occur often at all. The disk read
 | 
						|
             * will occur once per script save, and once per assembly when building. */
 | 
						|
            try
 | 
						|
            {
 | 
						|
                string path = Configuration.GetAssetsPath(Configuration.CONFIG_FILE_NAME);
 | 
						|
                XmlSerializer serializer = new XmlSerializer(typeof(ConfigurationData));
 | 
						|
                TextWriter writer = new StreamWriter(path);
 | 
						|
                serializer.Serialize(writer, cd);
 | 
						|
                writer.Close();
 | 
						|
#if UNITY_EDITOR
 | 
						|
                if (refreshAssetDatabase)
 | 
						|
                {
 | 
						|
                    AssetDatabase.SaveAssets();
 | 
						|
                    AssetDatabase.Refresh();
 | 
						|
                }
 | 
						|
#endif
 | 
						|
            }
 | 
						|
            catch (Exception ex)
 | 
						|
            {
 | 
						|
                throw new Exception($"An error occurred while writing ConfigurationData. Message: {ex.Message}");
 | 
						|
            }
 | 
						|
 | 
						|
        }
 | 
						|
 | 
						|
 | 
						|
        /// <summary>
 | 
						|
        /// Writes a configuration data.
 | 
						|
        /// </summary>
 | 
						|
        public static void Write(this ConfigurationData cd, string path, bool refreshAssetDatabase)
 | 
						|
        {
 | 
						|
            /* Why is this a thing you ask? Because Unity makes it VERY difficult to read values from
 | 
						|
             * memory during builds since on some Unity versions the building application is on a different
 | 
						|
             * processor. In result instead of using memory to read configurationdata the values
 | 
						|
             * must be written to disk then load the disk values as needed.
 | 
						|
             * 
 | 
						|
             * Fortunatelly the file is extremely small and this does not occur often at all. The disk read
 | 
						|
             * will occur once per script save, and once per assembly when building. */
 | 
						|
            try
 | 
						|
            {
 | 
						|
                XmlSerializer serializer = new XmlSerializer(typeof(ConfigurationData));
 | 
						|
                TextWriter writer = new StreamWriter(path);
 | 
						|
                serializer.Serialize(writer, cd);
 | 
						|
                writer.Close();
 | 
						|
#if UNITY_EDITOR
 | 
						|
                if (refreshAssetDatabase)
 | 
						|
                {
 | 
						|
                    AssetDatabase.SaveAssets();
 | 
						|
                    AssetDatabase.Refresh();
 | 
						|
                }
 | 
						|
#endif
 | 
						|
            }
 | 
						|
            catch (Exception ex)
 | 
						|
            {
 | 
						|
                throw new Exception($"An error occurred while writing ConfigurationData. Message: {ex.Message}");
 | 
						|
            }
 | 
						|
 | 
						|
        }
 | 
						|
 | 
						|
    }
 | 
						|
 | 
						|
 | 
						|
} |