diff --git a/sample/Assets/Editor/WindowsBuilder.cs b/sample/Assets/Editor/WindowsBuilder.cs index b5f60cde..fa406d96 100644 --- a/sample/Assets/Editor/WindowsBuilder.cs +++ b/sample/Assets/Editor/WindowsBuilder.cs @@ -1,21 +1,72 @@ #if UNITY_EDITOR_WIN +using UnityEngine; +using UnityEditor; +using UnityEditor.SceneManagement; using AltTester.AltTesterUnitySDK.Editor; using AltTester.AltTesterUnitySDK; using System; -using System.IO; -using UnityEditor; -using UnityEditor.Build.Reporting; -using UnityEngine; -public class WindowsBuildScript +public class WindowsBuilder { + private const string DefaultBuildPath = "Builds/Windows64/SampleApp.exe"; + + static void Build() + { + BuildPlayer(DefaultBuildPath, BuildOptions.None); + } + static void BuildForAltTester() + { + BuildPlayer(DefaultBuildPath, BuildOptions.Development | BuildOptions.IncludeTestAssemblies | BuildOptions.AutoRunPlayer, true); + } + + private static void BuildPlayer(string defaultBuildPath, BuildOptions buildOptions, bool setupForAltTester = false) { try { - BuildPlayerOptions buildPlayerOptions = new BuildPlayerOptions(); - buildPlayerOptions.scenes = new string[] { + string buildPath = GetBuildPathFromArgs(defaultBuildPath); + BuildPlayerOptions buildPlayerOptions = CreateBuildPlayerOptions(buildPath, buildOptions); + + if (setupForAltTester) + { + SetupAltTester(buildPlayerOptions); + } + + var results = BuildPipeline.BuildPlayer(buildPlayerOptions); + + if (setupForAltTester) + { + // Clean up AltTester settings after build + AltBuilder.RemoveAltTesterFromScriptingDefineSymbols(BuildTargetGroup.Standalone); + RemoveAltFromScene(buildPlayerOptions.scenes[0]); + } + } + catch (Exception exception) + { + Debug.LogException(exception); + } + } + + private static string GetBuildPathFromArgs(string defaultBuildPath) + { + string[] args = Environment.GetCommandLineArgs(); + for (int i = 0; i < args.Length; i++) + { + if (args[i] == "--buildPath" && i + 1 < args.Length) + { + return args[i + 1]; + } + } + return defaultBuildPath; + } + + private static BuildPlayerOptions CreateBuildPlayerOptions(string buildPath, BuildOptions buildOptions) + { + return new BuildPlayerOptions + { + scenes = new[] + { "Assets/Scenes/SelectAuthMethod.unity", "Assets/Scenes/UnauthenticatedScene.unity", "Assets/Scenes/AuthenticatedScene.unity", @@ -23,38 +74,48 @@ static void BuildForAltTester() "Assets/Scenes/ZkEvmGetTransactionReceipt.unity", "Assets/Scenes/ZkEvmSendTransaction.unity", "Assets/Scenes/ImxNftTransfer.unity" - }; + }, + locationPathName = buildPath, + target = BuildTarget.StandaloneWindows64, + options = buildOptions + }; + } - buildPlayerOptions.locationPathName = "Builds/Windows64/SampleApp.exe"; - buildPlayerOptions.target = BuildTarget.StandaloneWindows64; - buildPlayerOptions.options = BuildOptions.Development | BuildOptions.IncludeTestAssemblies | BuildOptions.AutoRunPlayer; + private static void SetupAltTester(BuildPlayerOptions buildPlayerOptions) + { + AltBuilder.AddAltTesterInScriptingDefineSymbolsGroup(BuildTargetGroup.Standalone); + AltBuilder.CreateJsonFileForInputMappingOfAxis(); - // Setup for AltTester - var buildTargetGroup = BuildTargetGroup.Standalone; - AltBuilder.AddAltTesterInScriptingDefineSymbolsGroup(buildTargetGroup); - if (buildTargetGroup == UnityEditor.BuildTargetGroup.Standalone) - AltBuilder.CreateJsonFileForInputMappingOfAxis(); - var instrumentationSettings = new AltInstrumentationSettings(); - AltBuilder.InsertAltInScene(buildPlayerOptions.scenes[0], instrumentationSettings); + var instrumentationSettings = new AltInstrumentationSettings(); + AltBuilder.InsertAltInScene(buildPlayerOptions.scenes[0], instrumentationSettings); + } - BuildReport report = BuildPipeline.BuildPlayer(buildPlayerOptions); - AltBuilder.RemoveAltTesterFromScriptingDefineSymbols(BuildTargetGroup.Standalone); + public static void RemoveAltFromScene(string scene) + { + Debug.Log("Removing AltTesterPrefab from the [" + scene + "] scene."); - if (report.summary.result == BuildResult.Succeeded) - { - Debug.Log("Build succeeded: " + report.summary.totalSize + " bytes"); - } - else - { - Debug.LogError("Build failed"); - } + var sceneToModify = EditorSceneManager.OpenScene(scene); + + // Find the AltTesterPrefab instance in the scene + var altRunner = GameObject.FindObjectOfType(); + if (altRunner != null) + { + // Destroy the AltTesterPrefab instance + GameObject.DestroyImmediate(altRunner.gameObject); + + // Mark the scene as dirty and save it + EditorSceneManager.MarkSceneDirty(sceneToModify); + EditorSceneManager.SaveOpenScenes(); + + Debug.Log("AltTesterPrefab successfully removed from the [" + scene + "] scene."); } - catch (Exception exception) + else { - Debug.LogException(exception); + Debug.LogWarning("AltTesterPrefab was not found in the [" + scene + "] scene."); } } + } -#endif +#endif \ No newline at end of file