Reload linked assets
This commit is contained in:
+13
-7
@@ -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
@@ -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);
|
||||
|
||||
@@ -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());
|
||||
|
||||
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user