Skip to content

Commit

Permalink
more changes
Browse files Browse the repository at this point in the history
  • Loading branch information
dooly123 committed Feb 18, 2025
1 parent cd761ce commit c79de49
Show file tree
Hide file tree
Showing 3 changed files with 46 additions and 76 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -8,19 +8,22 @@ public static class AssetBundleBuilder
{
public static async Task<BasisBundleGenerated> BuildAssetBundle(string targetDirectory,BasisAssetBundleObject settings,string assetBundleName,string mode,string password,BuildTarget buildTarget,bool isEncrypted = true)
{
BasisBundleGenerated BasisBundleGenerated = new BasisBundleGenerated();
EnsureDirectoryExists(targetDirectory);
EditorUtility.DisplayProgressBar("Building Asset Bundles", "Initializing...", 0f);
AssetBundleManifest manifest = BuildPipeline.BuildAssetBundles(targetDirectory, settings.BuildAssetBundleOptions, buildTarget);
if (manifest != null)
{
InformationHash Hash = await ProcessAssetBundles(targetDirectory, settings, manifest, password, isEncrypted,password);
BasisBundleGenerated = new BasisBundleGenerated(Hash.bundleHash.ToString(),mode,assetBundleName,Hash.CRC,true,password,buildTarget.ToString(),true, $"{Hash.File}{settings.BasisBundleEncryptedExtension}");
DeleteManifestFiles(targetDirectory);
}
else
{
BasisDebug.LogError("AssetBundle build failed.");
}
EditorUtility.ClearProgressBar();
return BasisBundleGenerated;
}
private static async Task<InformationHash> ProcessAssetBundles(string targetDirectory,BasisAssetBundleObject settings,AssetBundleManifest manifest,string password,bool isEncrypted,string PasswordTextFileFolderPath)
{
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -98,7 +98,7 @@ public static void ClearOutExistingSets()
}

string assetBundleName = AssetBundleBuilder.SetAssetBundleName(assetPath, uniqueID, settings);
await AssetBundleBuilder.BuildAssetBundle(targetDirectory, settings, assetBundleName, isScene ? "Scene" : "GameObject", Password, Target);
BasisBundleGenerated BasisBundleGenerated = await AssetBundleBuilder.BuildAssetBundle(targetDirectory, settings, assetBundleName, isScene ? "Scene" : "GameObject", Password, Target);

AssetBundleBuilder.ResetAssetBundleName(assetPath);
TemporaryStorageHandler.ClearTemporaryStorage(settings.TemporaryStorage);
Expand All @@ -112,8 +112,7 @@ public static void ClearOutExistingSets()
{
OnAfterBuildPrefab?.Invoke(assetBundleName);
}

return new(true,);
return new(true, BasisBundleGenerated);
}
catch (Exception ex)
{
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,87 +6,42 @@
using System.Threading.Tasks;
using UnityEditor;
using UnityEngine;
using UnityEngine.SceneManagement;

public static class BasisBundleBuild
{
public static async Task<(bool, string)> GameObjectBundleBuild(BasisContentBase BasisContentBase, List<BuildTarget> Targets)
{
Debug.Log("Starting GameObjectBundleBuild...");

// Store the initial active build target
BuildTarget originalActiveTarget = EditorUserBuildSettings.activeBuildTarget;

if (ErrorChecking(BasisContentBase, out string Error) == false)
{
return new(false, Error);
}

if (CheckIfWeCanBuild(Targets, out Error) == false)
{
return new(false, Error);
}

// Ensure active build target is first in the list
BuildTarget activeTarget = EditorUserBuildSettings.activeBuildTarget;
if (!Targets.Contains(activeTarget))
{
Debug.LogWarning($"Active build target {activeTarget} not in list of targets.");
}
else
{
// Move active build target to the front
Targets.Remove(activeTarget);
Targets.Insert(0, activeTarget);
}
BasisAssetBundleObject Objects = AssetDatabase.LoadAssetAtPath<BasisAssetBundleObject>(BasisAssetBundleObject.AssetBundleObject);
Debug.Log("Generating random bytes for hex string...");
byte[] randomBytes = GenerateRandomBytes(32);
string hexString = ByteArrayToHexString(randomBytes);
Debug.Log($"Generated hex string: {hexString}");

Debug.Log("IL2CPP is installed. Proceeding to build asset bundle...");
foreach (BuildTarget Target in Targets)
{
bool Success = await BasisAssetBundlePipeline.BuildAssetBundle(BasisContentBase.gameObject, Objects, hexString, Target);
if (Success == false)
{
return new(false, "Failure While Building for " + Target);
}
}
Debug.Log("Passed error checking for GameObjectBundleBuild...");

BasisBundleConnector BasisBundleConnector = new BasisBundleConnector(BasisGenerateUniqueID.GenerateUniqueID(), BasisContentBase.BasisBundleDescription,);

Debug.Log("Successfully built GameObject asset bundle.");

// If the original active target was not the current one, switch back
if (EditorUserBuildSettings.activeBuildTarget != originalActiveTarget)
{
EditorUserBuildSettings.SwitchActiveBuildTarget(BuildPipeline.GetBuildTargetGroup(originalActiveTarget), originalActiveTarget);
Debug.Log($"Switched back to original build target: {originalActiveTarget}");
}
OpenRelativePath(Objects.AssetBundleDirectory);
return new(true, "Success");
return await BuildBundle(BasisContentBase, Targets,
(content, obj, hex, target) => BasisAssetBundlePipeline.BuildAssetBundle(content.gameObject, obj, hex, target));
}

public static async Task<(bool, string)> SceneBundleBuild(BasisContentBase BasisContentBase, List<BuildTarget> Targets)
{
Debug.Log("Starting SceneBundleBuild...");
return await BuildBundle(BasisContentBase, Targets,
(content, obj, hex, target) => BasisAssetBundlePipeline.BuildAssetBundle(content.gameObject.scene, obj, hex, target));
}
public static async Task<(bool, string)> BuildBundle(
BasisContentBase BasisContentBase,
List<BuildTarget> Targets,
Func<BasisContentBase, BasisAssetBundleObject, string, BuildTarget, Task<(bool, BasisBundleGenerated)>> buildFunction)
{
Debug.Log("Starting BuildBundle...");

// Store the initial active build target
BuildTarget originalActiveTarget = EditorUserBuildSettings.activeBuildTarget;

if (ErrorChecking(BasisContentBase,out string Error) == false)
if (ErrorChecking(BasisContentBase, out string Error) == false)
{
return new (false, Error);
return (false, Error);
}

if (CheckIfWeCanBuild(Targets, out Error) == false)
{
return new(false, Error);
return (false, Error);
}

Debug.Log("Passed error checking for SceneBundleBuild...");
Debug.Log("Passed error checking for BuildBundle...");

// Ensure active build target is first in the list
BuildTarget activeTarget = EditorUserBuildSettings.activeBuildTarget;
if (!Targets.Contains(activeTarget))
Expand All @@ -99,35 +54,48 @@ public static class BasisBundleBuild
Targets.Remove(activeTarget);
Targets.Insert(0, activeTarget);
}

BasisAssetBundleObject Objects = AssetDatabase.LoadAssetAtPath<BasisAssetBundleObject>(BasisAssetBundleObject.AssetBundleObject);

Debug.Log("Generating random bytes for hex string...");
byte[] randomBytes = GenerateRandomBytes(32);
string hexString = ByteArrayToHexString(randomBytes);
Debug.Log($"Generated hex string: {hexString}");

Debug.Log("IL2CPP is installed. Proceeding to build asset bundle...");
foreach (BuildTarget Target in Targets)

BasisBundleGenerated[] Bundles = new BasisBundleGenerated[Targets.Count];
for (int Index = 0; Index < Targets.Count; Index++)
{
bool Success = await BasisAssetBundlePipeline.BuildAssetBundle(BasisContentBase.gameObject, Objects, hexString, Target);
if (Success == false)
BuildTarget Target = Targets[Index];
(bool success, BasisBundleGenerated bundle) = await buildFunction(BasisContentBase, Objects, hexString, Target);
if (!success)
{
return new(false, "Failure While Building for " + Target);
return (false, "Failure While Building for " + Target);
}
Bundles[Index] = bundle;
}
Debug.Log("Passed error checking for GameObjectBundleBuild...");
BasisBundleGenerated[] Generated = new BasisBundleGenerated[] { };
BasisBundleConnector BasisBundleConnector = new BasisBundleConnector(BasisGenerateUniqueID.GenerateUniqueID(), BasisContentBase.BasisBundleDescription, Generated);

Debug.Log("Successfully built GameObject asset bundle.");
BasisBundleConnector BasisBundleConnector = new BasisBundleConnector(
BasisGenerateUniqueID.GenerateUniqueID(),
BasisContentBase.BasisBundleDescription,
Bundles
);

Debug.Log("Successfully built asset bundle.");

// If the original active target was not the current one, switch back
// Restore the original build target
if (EditorUserBuildSettings.activeBuildTarget != originalActiveTarget)
{
EditorUserBuildSettings.SwitchActiveBuildTarget(BuildPipeline.GetBuildTargetGroup(originalActiveTarget), originalActiveTarget);
EditorUserBuildSettings.SwitchActiveBuildTarget(
BuildPipeline.GetBuildTargetGroup(originalActiveTarget),
originalActiveTarget
);
Debug.Log($"Switched back to original build target: {originalActiveTarget}");
}

OpenRelativePath(Objects.AssetBundleDirectory);
return new(true, "Success");
return (true, "Success");
}
public static string OpenRelativePath(string relativePath)
{
Expand Down

0 comments on commit c79de49

Please sign in to comment.