From 46e9dfec3d1497b4dbde9c51e0ecbda8d168d8c1 Mon Sep 17 00:00:00 2001 From: luboslenco Date: Tue, 17 Sep 2019 22:28:15 +0200 Subject: [PATCH] Reload linked assets --- Sources/arm/Project.hx | 20 +++++++++++++------- Sources/arm/io/ExportArm.hx | 32 +++++++++++++++++++++----------- Sources/arm/io/ImportArm.hx | 7 +++++++ Sources/arm/io/Importer.hx | 16 +++++++++++----- 4 files changed, 52 insertions(+), 23 deletions(-) diff --git a/Sources/arm/Project.hx b/Sources/arm/Project.hx index fa499103..3e9e5fb8 100644 --- a/Sources/arm/Project.hx +++ b/Sources/arm/Project.hx @@ -18,6 +18,7 @@ import arm.data.LayerSlot; import arm.data.BrushSlot; import arm.data.MaterialSlot; import arm.nodes.MaterialParser; +import arm.io.Importer; import arm.io.ImportArm; using StringTools; @@ -28,6 +29,7 @@ class Project { public static var assets:Array = []; public static var assetNames:Array = []; public static var assetId = 0; + public static var meshAssets:Array = []; public static var materials:Array = null; public static var materialsScene:Array = null; public static var brushes:Array = null; @@ -213,17 +215,21 @@ class Project { } public static function reloadAssets() { - + if (Project.meshAssets != null && Project.meshAssets.length > 0) { + Importer.importMesh(Project.meshAssets[0], false); + UITrait.inst.showMessage("Assets reloaded."); + } } } typedef TProjectFormat = { public var version:String; - public var brush_nodes:Array; - public var material_nodes:Array; - public var assets:Array; - public var layer_datas:Array; - public var mesh_datas:Array; + @:optional public var brush_nodes:Array; + @:optional public var material_nodes:Array; + @:optional public var assets:Array; // texture_assets + @:optional public var layer_datas:Array; + @:optional public var mesh_datas:Array; + @:optional public var mesh_assets:Array; } typedef TLayerData = { @@ -239,7 +245,7 @@ typedef TLayerData = { } typedef TAsset = { - public var id: Int; + public var id:Int; public var name:String; public var file:String; } diff --git a/Sources/arm/io/ExportArm.hx b/Sources/arm/io/ExportArm.hx index 5b90e890..93ac40d7 100644 --- a/Sources/arm/io/ExportArm.hx +++ b/Sources/arm/io/ExportArm.hx @@ -41,15 +41,27 @@ class ExportArm { var md:Array = []; for (p in Project.paintObjects) md.push(p.data.raw); - var asset_files:Array = []; + var texture_files:Array = []; for (a in Project.assets) { // Convert image path from absolute to relative var sameDrive = Project.filepath.charAt(0) == a.file.charAt(0); if (sameDrive) { - asset_files.push(Path.toRelative(Project.filepath, a.file)); + texture_files.push(Path.toRelative(Project.filepath, a.file)); } else { - asset_files.push(a.file); + texture_files.push(a.file); + } + } + + var mesh_files:Array = []; + for (file in Project.meshAssets) { + // Convert mesh path from absolute to relative + var sameDrive = Project.filepath.charAt(0) == file.charAt(0); + if (sameDrive) { + mesh_files.push(Path.toRelative(Project.filepath, file)); + } + else { + mesh_files.push(file); } } @@ -77,7 +89,8 @@ class ExportArm { brush_nodes: bnodes, mesh_datas: md, layer_datas: ld, - assets: asset_files + assets: texture_files, + mesh_assets: mesh_files }; var bytes = ArmPack.encode(Project.raw); @@ -98,25 +111,22 @@ class ExportArm { } mnodes.push(c); - var asset_files:Array = []; + var texture_files:Array = []; for (a in Project.assets) { // Convert image path from absolute to relative var sameDrive = Project.filepath.charAt(0) == a.file.charAt(0); if (sameDrive) { - asset_files.push(Path.toRelative(Project.filepath, a.file)); + texture_files.push(Path.toRelative(Project.filepath, a.file)); } else { - asset_files.push(a.file); + texture_files.push(a.file); } } var raw = { version: App.version, material_nodes: mnodes, - brush_nodes: null, - mesh_datas: null, - layer_datas: null, - assets: asset_files + assets: texture_files }; var bytes = ArmPack.encode(raw); diff --git a/Sources/arm/io/ImportArm.hx b/Sources/arm/io/ImportArm.hx index 8050920d..1a7a2e12 100644 --- a/Sources/arm/io/ImportArm.hx +++ b/Sources/arm/io/ImportArm.hx @@ -143,6 +143,13 @@ class ImportArm { }); } + if (project.mesh_assets != null) { + var file = project.mesh_assets[0]; + var isAbsolute = file.charAt(0) == "/" || file.charAt(1) == ":"; + var abs = isAbsolute ? file : base + file; + Project.meshAssets = [abs]; + } + // No mask by default if (Context.mergedObject == null) MeshUtil.mergeMesh(); Context.selectPaintObject(Context.mainObject()); diff --git a/Sources/arm/io/Importer.hx b/Sources/arm/io/Importer.hx index 48e0e0c0..3f9bcda2 100644 --- a/Sources/arm/io/Importer.hx +++ b/Sources/arm/io/Importer.hx @@ -22,6 +22,7 @@ class Importer { public static var fontList = ["default.ttf"]; public static var fontMap = new Map(); + public static var clearLayers = true; public static function importFile(path:String, dropX = -1.0, dropY = -1.0) { // Mesh @@ -57,12 +58,14 @@ class Importer { } } - public static function importMesh(path:String) { + public static function importMesh(path:String, _clearLayers = true) { if (!Path.checkMeshFormat(path)) { UITrait.inst.showError(Strings.error1); return; } + clearLayers = _clearLayers; + #if arm_debug var timer = iron.system.Time.realTime(); #end @@ -94,6 +97,7 @@ class Importer { Context.paintObject.skip_context = "paint"; Context.mergedObject.visible = true; } + Project.meshAssets = [path]; if (UITrait.inst.worktab.position == SpacePaint) { ViewportUtil.scaleToBounds(); @@ -207,10 +211,12 @@ class Importer { Data.deleteMesh(handle); } - while (Project.layers.length > 1) { var l = Project.layers.pop(); l.unload(); } - Context.setLayer(Project.layers[0]); - iron.App.notifyOnRender(Layers.initLayers); - History.reset(); + if (clearLayers) { + while (Project.layers.length > 1) { var l = Project.layers.pop(); l.unload(); } + Context.setLayer(Project.layers[0]); + iron.App.notifyOnRender(Layers.initLayers); + History.reset(); + } Context.paintObject.setData(md); Context.paintObject.name = mesh.name;