Skip to content
This repository has been archived by the owner on May 4, 2024. It is now read-only.

Added a button to create a single build #4

Merged
merged 2 commits into from
Mar 3, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ public static class MainManager
private static DateTime _usedDate;
private static string _shownPath;

public static void RunBuild()
public static void RunBuild(BuildData buildData = null)
{
if (GeneralBuildData == null || GeneralBuildData.builds.Count == 0)
{
Expand All @@ -31,8 +31,15 @@ public static void RunBuild()
var startTime = DateTime.Now;
_usedDate = DateTime.Now;

BuildAll();
CompressAll();
if (buildData == null)
{
BuildAll();
CompressAll();
}
else
{
BuildOne(buildData);
}

Debug.Log($@"End building all. Elapsed time: {(DateTime.Now - startTime).ToString()}");

Expand All @@ -44,70 +51,6 @@ public static void RunBuild()
#endif
}

#region Loading Data

public static GeneralBuildData LoadSettings()
{
const string SETTINGS_DEFAULT_PATH = "Assets/Plugins/BuildsManager/Settings/GeneralBuildData.asset";
const string SETTINGS_PATH_KEY = "BuildManagerWindow.SettingsPath";

var settingsPath = PlayerPrefs.GetString(SETTINGS_PATH_KEY, "");
GeneralBuildData = LoadAssetAtPath<GeneralBuildData>(settingsPath, SETTINGS_DEFAULT_PATH);
PlayerPrefs.SetString(SETTINGS_PATH_KEY, AssetDatabase.GetAssetPath(GeneralBuildData));

GeneralBuildData.addonsUsedData = LoadAddonsUsedData();

return GeneralBuildData;
}

public static AddonsUsedData LoadAddonsUsedData()
{
const string ADDONS_USED_DEFAULT_PATH = "Assets/Plugins/BuildsManager/Settings/AddonsUsedData.asset";
const string ADDONS_USED_PATH_KEY = "BuildManagerWindow.AddonsUsedPath";

var addonsUsedPath = PlayerPrefs.GetString(ADDONS_USED_PATH_KEY, "");
var addonsUsedData = LoadAssetAtPath<AddonsUsedData>(addonsUsedPath, ADDONS_USED_DEFAULT_PATH);
PlayerPrefs.SetString(ADDONS_USED_PATH_KEY, AssetDatabase.GetAssetPath(addonsUsedData));


return LoadAssetAtPath<AddonsUsedData>(addonsUsedPath, ADDONS_USED_DEFAULT_PATH);
}

private static T LoadAssetAtPath<T>(string path, string defaultPath) where T : ScriptableObject
{
T asset = null;
if (!string.IsNullOrEmpty(path))
{
asset = AssetDatabase.LoadAssetAtPath<T>(path);
if (asset == null) path = null;
}

if (string.IsNullOrEmpty(path))
{
var guids = AssetDatabase.FindAssets($"t:{typeof(T).Name}", new[] { "Assets" });
if (guids.Length >= 2)
Debug.LogError(
$"2+ {typeof(T).Name} exist. Consider using only 1 setting. The first one will be used.");

if (guids.Length != 0)
{
path = AssetDatabase.GUIDToAssetPath(guids[0]);
asset = AssetDatabase.LoadAssetAtPath<T>(path);
}
}

if (string.IsNullOrEmpty(path))
{
asset = ScriptableObject.CreateInstance<T>();
AssetDatabase.CreateAsset(asset, defaultPath);
path = defaultPath;
}

return asset;
}

#endregion

private static void BuildAll()
{
var targetBeforeStart = EditorUserBuildSettings.activeBuildTarget;
Expand Down Expand Up @@ -169,6 +112,36 @@ private static void CompressAll()
}
}

private static void BuildOne(BuildData buildData)
{
var targetBeforeStart = EditorUserBuildSettings.activeBuildTarget;
var targetGroupBeforeStart = EditorUserBuildSettings.selectedBuildTargetGroup;
var namedBuildTargetStart = NamedBuildTarget.FromBuildTargetGroup(targetGroupBeforeStart);
var definesBeforeStart = PlayerSettings.GetScriptingDefineSymbols(namedBuildTargetStart);

var scenes = EditorBuildSettings.scenes.Where(scene => scene.enabled).Select(scene => scene.path).ToArray();

var buildPlayerOptions = new BuildPlayerOptions
{
scenes = scenes,
locationPathName = GeneralBuildData.outputRoot + ConvertToStrings.GetPathWithVars(_usedDate,
buildData, GeneralBuildData.middlePath),
target = buildData.target,
options = buildData.options,
};

BaseBuild(buildPlayerOptions, buildData.addonsUsed, GeneralBuildData.isReleaseBuild);

if (buildData.isCompress)
{
BaseCompress(GeneralBuildData.outputRoot + ConvertToStrings.GetPathWithVars(_usedDate, buildData,
GeneralBuildData.dirPathForPostProcess));
}

EditorUserBuildSettings.SwitchActiveBuildTarget(targetGroupBeforeStart, targetBeforeStart);
PlayerSettings.SetScriptingDefineSymbols(namedBuildTargetStart, definesBeforeStart);
}

#region Base methods

private static void BaseBuild(BuildPlayerOptions buildPlayerOptions, IEnumerable<AddonUsed> addonsUsed,
Expand Down Expand Up @@ -256,6 +229,70 @@ private static void BaseCompress(string dirPath)

#endregion

#region Loading Data

public static GeneralBuildData LoadSettings()
{
const string SETTINGS_DEFAULT_PATH = "Assets/Plugins/BuildsManager/Settings/GeneralBuildData.asset";
const string SETTINGS_PATH_KEY = "BuildManagerWindow.SettingsPath";

var settingsPath = PlayerPrefs.GetString(SETTINGS_PATH_KEY, "");
GeneralBuildData = LoadAssetAtPath<GeneralBuildData>(settingsPath, SETTINGS_DEFAULT_PATH);
PlayerPrefs.SetString(SETTINGS_PATH_KEY, AssetDatabase.GetAssetPath(GeneralBuildData));

GeneralBuildData.addonsUsedData = LoadAddonsUsedData();

return GeneralBuildData;
}

public static AddonsUsedData LoadAddonsUsedData()
{
const string ADDONS_USED_DEFAULT_PATH = "Assets/Plugins/BuildsManager/Settings/AddonsUsedData.asset";
const string ADDONS_USED_PATH_KEY = "BuildManagerWindow.AddonsUsedPath";

var addonsUsedPath = PlayerPrefs.GetString(ADDONS_USED_PATH_KEY, "");
var addonsUsedData = LoadAssetAtPath<AddonsUsedData>(addonsUsedPath, ADDONS_USED_DEFAULT_PATH);
PlayerPrefs.SetString(ADDONS_USED_PATH_KEY, AssetDatabase.GetAssetPath(addonsUsedData));


return LoadAssetAtPath<AddonsUsedData>(addonsUsedPath, ADDONS_USED_DEFAULT_PATH);
}

private static T LoadAssetAtPath<T>(string path, string defaultPath) where T : ScriptableObject
{
T asset = null;
if (!string.IsNullOrEmpty(path))
{
asset = AssetDatabase.LoadAssetAtPath<T>(path);
if (asset == null) path = null;
}

if (string.IsNullOrEmpty(path))
{
var guids = AssetDatabase.FindAssets($"t:{typeof(T).Name}", new[] { "Assets" });
if (guids.Length >= 2)
Debug.LogError(
$"2+ {typeof(T).Name} exist. Consider using only 1 setting. The first one will be used.");

if (guids.Length != 0)
{
path = AssetDatabase.GUIDToAssetPath(guids[0]);
asset = AssetDatabase.LoadAssetAtPath<T>(path);
}
}

if (string.IsNullOrEmpty(path))
{
asset = ScriptableObject.CreateInstance<T>();
AssetDatabase.CreateAsset(asset, defaultPath);
path = defaultPath;
}

return asset;
}

#endregion

public static void OpenAddonsUsedData()
{
var path = AssetDatabase.GetAssetPath(GeneralBuildData.addonsUsedData);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -134,15 +134,28 @@ private static void DrawBuildDataList()
settingsBuild.isEnabled = EditorGUILayout.Toggle("Enabled", settingsBuild.isEnabled);
settingsBuild.isCompress = EditorGUILayout.Toggle("Compress", settingsBuild.isCompress);
settingsBuild.target = (BuildTarget)EditorGUILayout.EnumPopup("Build Target", settingsBuild.target);
settingsBuild.options = (BuildOptions)EditorGUILayout.EnumFlagsField("Build Options", settingsBuild.options);
settingsBuild.options =
(BuildOptions)EditorGUILayout.EnumFlagsField("Build Options", settingsBuild.options);
DrawAddonsUsed(ref settingsBuild);

EditorGUILayout.BeginHorizontal();
GUILayout.FlexibleSpace();
if (GUILayout.Button("Remove", GUILayout.Width(80)))
{
Settings.builds.RemoveAt(i);
break;
}

GUILayout.FlexibleSpace();
if (GUILayout.Button("Build", GUILayout.Width(80)))
{
MainManager.RunBuild(settingsBuild);
break;
}

GUILayout.FlexibleSpace();
EditorGUILayout.EndHorizontal();

EditorGUILayout.EndVertical();
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -32,14 +32,14 @@ MonoBehaviour:
- 3
options: 0
target: 19
- isEnabled: 1
- isEnabled: 0
isCompress: 0
buildPath: Builds/Tool_-_builds_manager_0.1_Android/Tool_-_builds_manager_0.1/Tool_-_builds_manager.apk
addonsUsed: []
options: 0
target: 13
- isEnabled: 1
isCompress: 0
isCompress: 1
buildPath: Builds/Tool_-_builds_manager_0.1_Windows32/Tool_-_builds_manager_0.1/Tool_-_builds_manager.exe
addonsUsed: []
options: 0
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -843,6 +843,7 @@ PlayerSettings:
webGLCloseOnQuit: 0
scriptingDefineSymbols:
Android:
PS4:
Standalone:
additionalCompilerArguments: {}
platformArchitecture: {}
Expand Down