using UnityEditor.AddressableAssets.Settings;
using UnityEditor.Build.Pipeline.Interfaces;
using UnityEngine;
namespace UnityEditor.AddressableAssets.Build
{
///
/// Data builder context object for Addressables. This contains all of the necessary input data to a build.
///
public class AddressablesDataBuilderInput
{
///
/// The main addressables settings object.
///
public AddressableAssetSettings AddressableSettings { get; private set; }
///
/// Toggle Development Build and DEVELOPMENT_BUILD define.
///
public bool DevelopmentBuild { get; set; }
///
/// Add extra scripting defines to the build.
///
public string[] ExtraScriptingDefines { get; set; }
///
/// Build target group.
///
public BuildTargetGroup TargetGroup { get; private set; }
///
/// Build target.
///
public BuildTarget Target { get; private set; }
///
/// Player build version.
///
public string PlayerVersion { get; set; }
///
/// Registry of files created during the build
///
public FileRegistry Registry { get; private set; }
///
/// can be used in testing to append a suffix to file paths
///
public string PathSuffix = string.Empty;
///
/// The name of the default Runtime Settings file.
///
public string RuntimeSettingsFilename = "settings.json";
///
/// The name of the default Runtime Catalog file.
///
public string RuntimeCatalogFilename =
#if ENABLE_JSON_CATALOG
"catalog.json";
#else
"catalog.bin";
#endif
///
/// The asset content state of a previous build. This allows detection of deltas with the current build content state. This will be
/// null in standard builds. This is only set during content update builds.
///
public AddressablesContentState PreviousContentState { get; set; }
private string GetDefaultPlayerVersion(AddressableAssetSettings settings)
{
string version = string.Empty;
if (settings == null)
{
Debug.LogError("Attempting to set up AddressablesDataBuilderInput with null settings.");
}
else
version = settings.PlayerBuildVersion;
return version;
}
///
/// Creates a default context object with values taken from the AddressableAssetSettings parameter.
///
/// The settings object to pull values from.
public AddressablesDataBuilderInput(AddressableAssetSettings settings) : this(settings, EditorBuildSettingsProvider.Default)
{
}
///
/// Creates a default context object with values taken from the AddressableAssetSettings parameter.
///
/// The settings object to pull values from.
/// Build settings provider.
public AddressablesDataBuilderInput(AddressableAssetSettings settings, IBuildSettingsProvider buildSettingsProvider)
{
SetAllValues(settings,
BuildPipeline.GetBuildTargetGroup(buildSettingsProvider.activeBuildTarget),
buildSettingsProvider.activeBuildTarget,
GetDefaultPlayerVersion(settings),
buildSettingsProvider.development,
buildSettingsProvider.extraScriptingDefines);
}
///
/// Creates a default context object with values taken from the AddressableAssetSettings parameter and BuildPlayerOptions.
///
/// The settings object to pull values from.
/// The build player options containing development build status and extra scripting defines.
public AddressablesDataBuilderInput(AddressableAssetSettings settings, BuildPlayerOptions buildPlayerOptions)
{
if (settings == null)
{
Debug.LogError("Attempting to set up AddressablesDataBuilderInput with null settings.");
}
SetAllValues(settings,
BuildPipeline.GetBuildTargetGroup(buildPlayerOptions.target),
buildPlayerOptions.target,
GetDefaultPlayerVersion(settings),
(buildPlayerOptions.options & BuildOptions.Development) != 0,
buildPlayerOptions.extraScriptingDefines);
}
///
/// Creates a default context object with values taken from the AddressableAssetSettings parameter.
///
/// The settings object to pull values from.
/// The player build version.
public AddressablesDataBuilderInput(AddressableAssetSettings settings, string playerBuildVersion)
: this(settings, playerBuildVersion, EditorBuildSettingsProvider.Default)
{
}
///
/// Creates a default context object with values taken from the AddressableAssetSettings parameter.
///
/// The settings object to pull values from.
/// The player build version.
/// Build settings provider.
public AddressablesDataBuilderInput(AddressableAssetSettings settings, string playerBuildVersion, IBuildSettingsProvider buildSettingsProvider)
{
if (settings == null)
{
Debug.LogError("Attempting to set up AddressablesDataBuilderInput with null settings.");
}
SetAllValues(settings,
BuildPipeline.GetBuildTargetGroup(buildSettingsProvider.activeBuildTarget),
buildSettingsProvider.activeBuildTarget,
playerBuildVersion,
buildSettingsProvider.development,
buildSettingsProvider.extraScriptingDefines);
}
internal void SetAllValues(AddressableAssetSettings settings,
BuildTargetGroup buildTargetGroup,
BuildTarget buildTarget,
string playerBuildVersion,
bool developmentBuild,
string[] extraScriptingDefines)
{
AddressableSettings = settings;
TargetGroup = buildTargetGroup;
Target = buildTarget;
PlayerVersion = playerBuildVersion;
Registry = new FileRegistry();
PreviousContentState = null;
DevelopmentBuild = developmentBuild;
ExtraScriptingDefines = extraScriptingDefines;
}
internal bool IsBuildAndRelease = false;
internal bool IsContentUpdateBuild = false;
internal IBuildLogger Logger { get; set; }
}
}