using System;
using UnityEditor;
using UnityEditor.Build;
using UnityEngine;
namespace SingularityGroup.HotReload.Editor {
/// Includes HotReload Resources only in development builds
///
/// This build script ensures that HotReload Resources are not included in release builds.
///
/// When HotReload is enabled:
/// - include HotReloadSettingsObject in development Android builds.
/// - exclude HotReloadSettingsObject from the build.
/// When HotReload is disabled:
/// - excludes HotReloadSettingsObject from the build.
///
///
#pragma warning disable CS0618
internal class PrebuildIncludeResources : IPreprocessBuild, IPostprocessBuild {
#pragma warning restore CS0618
public int callbackOrder => 10;
// Preprocess warnings don't show up in console
bool warnSettingsNotSupported;
public void OnPreprocessBuild(BuildTarget target, string path) {
try {
if (HotReloadBuildHelper.IncludeInThisBuild()) {
// move scriptable object into Resources/ folder
HotReloadSettingsEditor.AddOrRemoveFromBuild(true);
} else {
// make sure HotReload resources are not in the build
HotReloadSettingsEditor.AddOrRemoveFromBuild(false);
var options = HotReloadSettingsEditor.LoadSettingsOrDefault();
var so = new SerializedObject(options);
if (IncludeInBuildOption.I.GetValue(so)) {
warnSettingsNotSupported = true;
}
}
} catch (BuildFailedException) {
throw;
} catch (Exception ex) {
throw new BuildFailedException(ex);
}
}
public void OnPostprocessBuild(BuildTarget target, string path) {
if (warnSettingsNotSupported) {
Debug.LogWarning("Hot Reload was not included in the build because one or more build settings were not supported.");
}
}
// Do nothing in post build. settings asset will be dirty if build fails, so not worth fixing just for successful builds.
// [PostProcessBuild]
// private static void PostBuild(BuildTarget target, string pathToBuiltProject) {
// }
}
}