Reload linked assets

This commit is contained in:
luboslenco
2019-09-17 22:28:15 +02:00
parent d4a0a1090e
commit 46e9dfec3d
4 changed files with 52 additions and 23 deletions
+13 -7
View File
@@ -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<TAsset> = [];
public static var assetNames:Array<String> = [];
public static var assetId = 0;
public static var meshAssets:Array<String> = [];
public static var materials:Array<MaterialSlot> = null;
public static var materialsScene:Array<MaterialSlot> = null;
public static var brushes:Array<BrushSlot> = 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<TNodeCanvas>;
public var material_nodes:Array<TNodeCanvas>;
public var assets:Array<String>;
public var layer_datas:Array<TLayerData>;
public var mesh_datas:Array<TMeshData>;
@:optional public var brush_nodes:Array<TNodeCanvas>;
@:optional public var material_nodes:Array<TNodeCanvas>;
@:optional public var assets:Array<String>; // texture_assets
@:optional public var layer_datas:Array<TLayerData>;
@:optional public var mesh_datas:Array<TMeshData>;
@:optional public var mesh_assets:Array<String>;
}
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;
}
+21 -11
View File
@@ -41,15 +41,27 @@ class ExportArm {
var md:Array<TMeshData> = [];
for (p in Project.paintObjects) md.push(p.data.raw);
var asset_files:Array<String> = [];
var texture_files:Array<String> = [];
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<String> = [];
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<String> = [];
var texture_files:Array<String> = [];
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);
+7
View File
@@ -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());
+11 -5
View File
@@ -22,6 +22,7 @@ class Importer {
public static var fontList = ["default.ttf"];
public static var fontMap = new Map<String, Font>();
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;