3 Commits

Author SHA1 Message Date
31d458f8b7 successfully implemented asset handling 2025-04-12 01:00:16 +02:00
3c35a616cc working 2025-04-12 00:20:20 +02:00
e01cc817ef enable loading multiple manifests 2025-04-11 23:54:05 +02:00
4 changed files with 103 additions and 33 deletions

View File

@@ -24,6 +24,6 @@ class Assets {
public static var data:String; public static var data:String;
// You can also define individual files if needed // You can also define individual files if needed
@:Assets("assets/images/logo.png", "images", "logo.png") // @:Assets("assets/images/logo.png", "images", "logo.png")
public static var logo:String; // public static var logo:String;
} }

View File

@@ -16,7 +16,29 @@ class Main extends Sprite {
graphics.drawRect(0, 0, 800, 600); graphics.drawRect(0, 0, 800, 600);
graphics.endFill(); graphics.endFill();
var testAsset = openfl.Assets.getText("img/placeholder.txt");
// Get data asset library
var dataLibrary = openfl.utils.Assets.getLibrary("data");
var imageLibrary = openfl.utils.Assets.getLibrary("images");
if (dataLibrary == null) {
trace("Data library not found");
return;
}
if (imageLibrary == null) {
trace("Image library not found");
return;
}
// test a data asset
var testAsset = dataLibrary.getText("img/placeholder.txt");
trace("Successfully loaded asset: " + testAsset); trace("Successfully loaded asset: " + testAsset);
// test an image asset
var testImage = imageLibrary.getImage("logo.png");
trace("Successfully loaded image asset: " + testImage);
var bitmapData = openfl.display.BitmapData.fromImage(testImage);
this.addChild(new openfl.display.Bitmap(bitmapData));
} }
} }

View File

@@ -1,40 +1,57 @@
package; package;
#if sys
import haxe.io.Path; import haxe.io.Path;
import lime.utils.AssetLibrary; import openfl.utils.AssetLibrary;
import lime.utils.AssetManifest; import openfl.utils.AssetManifest;
import lime.utils.Assets as LimeAssets; import openfl.utils.Assets as LimeAssets;
import sys.FileSystem; import sys.FileSystem;
@:access(lime.utils.Assets) @:access(lime.utils.Assets)
@:keep class ManifestResources { @:keep class ManifestResources {
public static var preloadLibraries:Array<AssetLibrary> = []; public static var preloadLibraries:Array<AssetLibrary> = [];
public static var preloadLibraryNames:Array<String> = []; public static var preloadLibraryNames:Array<String> = [];
public static var rootPath:String; public static var rootPath:String;
public static function init(config:Dynamic):Void { public static function init(config:Dynamic):Void {
rootPath = ""; rootPath = "";
#if sys var manifestDirPath = Path.join(["manifest"]);
var manifestPath = Path.join(["manifest", "data.json"]); var manifests = FileSystem.readDirectory(manifestDirPath);
if (!FileSystem.exists(manifestPath)) { for (manifest in manifests) {
trace("Manifest file not found: " + manifestPath); trace(manifest);
return; if (StringTools.endsWith(manifest, ".json")) {
} var manifestPath = Path.join([manifestDirPath, manifest]);
#end loadManifest(manifestPath, manifest.split(".json")[0]);
}
else{
throw("we eating shit tonight");
try {
var manifest = AssetManifest.fromFile(manifestPath);
if (manifest != null) {
var library = AssetLibrary.fromManifest(manifest);
if (library != null) {
preloadLibraries.push(library);
preloadLibraryNames.push("default");
LimeAssets.registerLibrary("default", library);
}
} }
} catch (e:Dynamic) { }
trace("Error loading asset manifest: " + e); }
}
} public static function loadManifest(manifestPath, manifestName) {
if (!FileSystem.exists(manifestPath)) {
trace("Manifest file not found: " + manifestPath);
return;
}
try {
var manifest = AssetManifest.fromFile(manifestPath);
if (manifest != null) {
var library = AssetLibrary.fromManifest(manifest);
if (library != null) {
trace("Library: `"+library+"`");
trace("manifestName: `"+manifestName+"`");
preloadLibraries.push(library);
preloadLibraryNames.push(manifestName);
// LimeAssets.registerLibrary(manifestName, library);
openfl.utils.Assets.registerLibrary(manifestName, library);
}
}
} catch (e:Dynamic) {
trace("Error loading asset manifest: " + e);
}
}
} }
#end

View File

@@ -164,6 +164,10 @@ class AssetMacro {
* Build manifest JSON files for each library * Build manifest JSON files for each library
*/ */
private static function buildManifests(manifestDir:String) { private static function buildManifests(manifestDir:String) {
// Create an array to hold all assets for the default manifest
var allAssets = [];
// First, process individual library manifests
for (library in assetMap.keys()) { for (library in assetMap.keys()) {
var assets = assetMap.get(library); var assets = assetMap.get(library);
var manifest = { var manifest = {
@@ -172,6 +176,16 @@ class AssetMacro {
rootPath: "../assets/" + library + "/" rootPath: "../assets/" + library + "/"
}; };
// Add assets to combined collection with library prefix
for (asset in assets) {
allAssets.push({
id: library + "/" + asset.id,
path: library + "/" + asset.path,
size: asset.size,
type: asset.type
});
}
var manifestPath = manifestDir + "/" + library + ".json"; var manifestPath = manifestDir + "/" + library + ".json";
try { try {
var content = Json.stringify(manifest, null, " "); var content = Json.stringify(manifest, null, " ");
@@ -181,6 +195,23 @@ class AssetMacro {
Context.warning('Failed to write manifest: ${manifestPath}. Error: ${e}', Context.currentPos()); Context.warning('Failed to write manifest: ${manifestPath}. Error: ${e}', Context.currentPos());
} }
} }
// Create the default manifest with all assets
var defaultManifest = {
name: "default",
assets: allAssets,
rootPath: "../assets/"
};
// Save the default manifest
var defaultManifestPath = manifestDir + "/default.json";
try {
var content = Json.stringify(defaultManifest, null, " ");
File.saveContent(defaultManifestPath, content);
Context.info('Built default manifest: ${defaultManifestPath} with ${allAssets.length} assets', Context.currentPos());
} catch (e) {
Context.warning('Failed to write default manifest: ${defaultManifestPath}. Error: ${e}', Context.currentPos());
}
} }
// Helper functions // Helper functions