119 lines
		
	
	
		
			3.7 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
			
		
		
	
	
			119 lines
		
	
	
		
			3.7 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
| 
 | |
| using FishNet.Configuring;
 | |
| using System.IO;
 | |
| using UnityEngine;
 | |
| using System.Xml.Serialization;
 | |
| 
 | |
| #if UNITY_EDITOR
 | |
| using FishNet.Editing.PrefabCollectionGenerator;
 | |
| using UnityEditor.Compilation;
 | |
| using UnityEditor.Build.Reporting;
 | |
| using UnityEditor;
 | |
| using UnityEditor.Build;
 | |
| #endif
 | |
| 
 | |
| namespace FishNet.Configuring
 | |
| {
 | |
| 
 | |
| 
 | |
|     public class CodeStripping
 | |
|     
 | |
|     {
 | |
| 
 | |
|         /// <summary>
 | |
|         /// True if making a release build for client.
 | |
|         /// </summary>
 | |
|         public static bool ReleasingForClient => (Configuration.Configurations.CodeStripping.IsBuilding && !Configuration.Configurations.CodeStripping.IsHeadless && !Configuration.Configurations.CodeStripping.IsDevelopment);
 | |
|         /// <summary>
 | |
|         /// True if making a release build for server.
 | |
|         /// </summary>
 | |
|         public static bool ReleasingForServer => (Configuration.Configurations.CodeStripping.IsBuilding && Configuration.Configurations.CodeStripping.IsHeadless && !Configuration.Configurations.CodeStripping.IsDevelopment);
 | |
|         /// <summary>
 | |
|         /// Returns if to remove server logic.
 | |
|         /// </summary>
 | |
|         /// <returns></returns>
 | |
|         public static bool RemoveServerLogic
 | |
|         {
 | |
|             get
 | |
|             {
 | |
|                 
 | |
| 
 | |
|                 /* This is to protect non pro users from enabling this
 | |
|                  * without the extra logic code.  */
 | |
| #pragma warning disable CS0162 // Unreachable code detected
 | |
|                 return false;
 | |
| #pragma warning restore CS0162 // Unreachable code detected
 | |
|             }
 | |
|         }
 | |
|         /// <summary>
 | |
|         /// True if building and stripping is enabled.
 | |
|         /// </summary>
 | |
|         public static bool StripBuild
 | |
|         {
 | |
|             get
 | |
|             {
 | |
|                 
 | |
| 
 | |
|                 /* This is to protect non pro users from enabling this
 | |
|                  * without the extra logic code.  */
 | |
| #pragma warning disable CS0162 // Unreachable code detected
 | |
|                 return false;
 | |
| #pragma warning restore CS0162 // Unreachable code detected
 | |
|             }
 | |
|         }
 | |
|         /// <summary>
 | |
|         /// Technique to strip methods.
 | |
|         /// </summary>
 | |
|         public static StrippingTypes StrippingType => (StrippingTypes)Configuration.Configurations.CodeStripping.StrippingType;
 | |
| 
 | |
|         private static object _compilationContext;
 | |
|         public int callbackOrder => 0;
 | |
| #if UNITY_EDITOR
 | |
| 
 | |
|         public void OnPreprocessBuild(BuildReport report)
 | |
|         {
 | |
|             Generator.IgnorePostProcess = true;
 | |
|             Generator.GenerateFull();
 | |
|             CompilationPipeline.compilationStarted += CompilationPipelineOnCompilationStarted;
 | |
|             CompilationPipeline.compilationFinished += CompilationPipelineOnCompilationFinished;
 | |
| 
 | |
|             
 | |
|         }
 | |
|         /* Solution for builds ending with errors and not triggering OnPostprocessBuild.
 | |
|         * Link: https://gamedev.stackexchange.com/questions/181611/custom-build-failure-callback
 | |
|         */
 | |
|         private void CompilationPipelineOnCompilationStarted(object compilationContext)
 | |
|         {
 | |
|             _compilationContext = compilationContext;
 | |
|         }
 | |
| 
 | |
|         private void CompilationPipelineOnCompilationFinished(object compilationContext)
 | |
|         {
 | |
|             if (compilationContext != _compilationContext)
 | |
|                 return;
 | |
| 
 | |
|             _compilationContext = null;
 | |
| 
 | |
|             CompilationPipeline.compilationStarted -= CompilationPipelineOnCompilationStarted;
 | |
|             CompilationPipeline.compilationFinished -= CompilationPipelineOnCompilationFinished;
 | |
| 
 | |
|             BuildingEnded();
 | |
|         }
 | |
| 
 | |
|         private void BuildingEnded()
 | |
|         {
 | |
|             
 | |
| 
 | |
|             Generator.IgnorePostProcess = false;
 | |
|         }
 | |
| 
 | |
|         public void OnPostprocessBuild(BuildReport report)
 | |
|         {
 | |
|             
 | |
|                 BuildingEnded();
 | |
|         }
 | |
| #endif
 | |
|     }
 | |
| 
 | |
| }
 |