paint: save material data
This commit is contained in:
@@ -155,6 +155,27 @@ void export_arm_run_project() {
|
||||
}
|
||||
}
|
||||
|
||||
material_data2_t_array_t *mdata2 = NULL;
|
||||
if (project_materials->length > 0) {
|
||||
mdata2 = any_array_create_from_raw((void *[]){}, 0);
|
||||
for (i32 i = 0; i < project_materials->length; ++i) {
|
||||
slot_material_t *m = project_materials->buffer[i];
|
||||
material_data2_t *d = GC_ALLOC_INIT(material_data2_t, {
|
||||
.paint_base = m->paint_base,
|
||||
.paint_opac = m->paint_opac,
|
||||
.paint_occ = m->paint_occ,
|
||||
.paint_rough = m->paint_rough,
|
||||
.paint_met = m->paint_met,
|
||||
.paint_nor = m->paint_nor,
|
||||
.paint_height = m->paint_height,
|
||||
.paint_emis = m->paint_emis,
|
||||
.paint_subs = m->paint_subs,
|
||||
.opac_mode = m->paint_opac_mode,
|
||||
});
|
||||
any_array_push(mdata2, d);
|
||||
}
|
||||
}
|
||||
|
||||
mesh_data_t_array_t *md = any_array_create_from_raw((void *[]){}, 0);
|
||||
for (i32 i = 0; i < project_paint_objects->length; ++i) {
|
||||
mesh_object_t *p = project_paint_objects->buffer[i];
|
||||
@@ -219,6 +240,7 @@ void export_arm_run_project() {
|
||||
|
||||
g_project->version = string_copy(manifest_version_project);
|
||||
g_project->material_groups = mgroups;
|
||||
g_project->material_datas = mdata2;
|
||||
g_project->assets = texture_files;
|
||||
g_project->packed_assets = packed_assets;
|
||||
g_project->swatches = g_project->swatches;
|
||||
@@ -376,12 +398,29 @@ void export_arm_run_material(char *path) {
|
||||
},
|
||||
1);
|
||||
|
||||
material_data2_t_array_t *mdata2 = any_array_create_from_raw((void *[]){}, 0);
|
||||
material_data2_t *md2 = GC_ALLOC_INIT(material_data2_t, {
|
||||
.paint_base = m->paint_base,
|
||||
.paint_opac = m->paint_opac,
|
||||
.paint_occ = m->paint_occ,
|
||||
.paint_rough = m->paint_rough,
|
||||
.paint_met = m->paint_met,
|
||||
.paint_nor = m->paint_nor,
|
||||
.paint_height = m->paint_height,
|
||||
.paint_emis = m->paint_emis,
|
||||
.paint_subs = m->paint_subs,
|
||||
.opac_mode = m->paint_opac_mode,
|
||||
});
|
||||
any_array_push(mdata2, md2);
|
||||
|
||||
project_t *raw = GC_ALLOC_INIT(project_t, {.version = manifest_version_project,
|
||||
.material_nodes = mnodes,
|
||||
.material_groups = mgroups,
|
||||
.material_icons = micons,
|
||||
.material_datas = mdata2,
|
||||
.assets = texture_files,
|
||||
.packed_assets = packed_assets});
|
||||
|
||||
if (g_context->write_icon_on_export) { // Separate icon files
|
||||
buffer_t *buf = export_arm_rgba64_to_rgba32(gpu_get_texture_pixels(m->image));
|
||||
#ifdef IRON_BGRA
|
||||
|
||||
@@ -563,6 +563,19 @@ void import_arm_run_project(char *path) {
|
||||
ui_node_canvas_t *n = project->material_nodes->buffer[i];
|
||||
import_arm_init_nodes(n->nodes);
|
||||
g_context->material = slot_material_create(m0, n);
|
||||
|
||||
material_data2_t *md = project->material_datas->buffer[i];
|
||||
g_context->material->paint_base = md->paint_base;
|
||||
g_context->material->paint_opac = md->paint_opac;
|
||||
g_context->material->paint_occ = md->paint_occ;
|
||||
g_context->material->paint_rough = md->paint_rough;
|
||||
g_context->material->paint_met = md->paint_met;
|
||||
g_context->material->paint_nor = md->paint_nor;
|
||||
g_context->material->paint_height = md->paint_height;
|
||||
g_context->material->paint_emis = md->paint_emis;
|
||||
g_context->material->paint_subs = md->paint_subs;
|
||||
g_context->material->paint_opac_mode = md->opac_mode;
|
||||
|
||||
any_array_push(project_materials, g_context->material);
|
||||
}
|
||||
|
||||
|
||||
@@ -142,7 +142,28 @@ project_t *import_arm_from_map_to_arm(any_map_t *old) {
|
||||
project->material_groups = import_arm_get_node_canvas_array(old, "material_groups");
|
||||
}
|
||||
project->material_icons = any_map_get(old, "material_icons");
|
||||
project->font_assets = any_map_get(old, "font_assets");
|
||||
|
||||
any_array_t *mds = any_map_get(old, "material_datas");
|
||||
if (mds != NULL) {
|
||||
project->material_datas = any_array_create_from_raw((void *[]){}, 0);
|
||||
for (i32 i = 0; i < mds->length; ++i) {
|
||||
any_map_t *old = mds->buffer[i];
|
||||
material_data2_t *md = GC_ALLOC_INIT(layer_data_t, {0});
|
||||
md->paint_base = armpack_map_get_i32(old, "paint_base") > 0;
|
||||
md->paint_opac = armpack_map_get_i32(old, "paint_opac") > 0;
|
||||
md->paint_occ = armpack_map_get_i32(old, "paint_occ") > 0;
|
||||
md->paint_rough = armpack_map_get_i32(old, "paint_rough") > 0;
|
||||
md->paint_met = armpack_map_get_i32(old, "paint_met") > 0;
|
||||
md->paint_nor = armpack_map_get_i32(old, "paint_nor") > 0;
|
||||
md->paint_height = armpack_map_get_i32(old, "paint_height") > 0;
|
||||
md->paint_emis = armpack_map_get_i32(old, "paint_emis") > 0;
|
||||
md->paint_subs = armpack_map_get_i32(old, "paint_subs") > 0;
|
||||
md->opac_mode = armpack_map_get_i32(old, "opac_mode");
|
||||
any_array_push(project->material_datas, md);
|
||||
}
|
||||
}
|
||||
|
||||
project->font_assets = any_map_get(old, "font_assets");
|
||||
|
||||
any_array_t *lds = any_map_get(old, "layer_datas");
|
||||
if (lds != NULL) {
|
||||
@@ -230,6 +251,25 @@ project_t *import_arm_from_version_6(any_map_t *old) {
|
||||
armpack_map_set_i32(ld, "path_material", -1);
|
||||
}
|
||||
}
|
||||
|
||||
any_array_t *mds = any_array_create_from_raw((void *[]){}, 0);
|
||||
any_array_t *mns = any_map_get(old, "material_nodes");
|
||||
for (i32 i = 0; i < mns->length; ++i) {
|
||||
any_map_t *m = any_map_create();
|
||||
armpack_map_set_i32(m, "paint_base", 1);
|
||||
armpack_map_set_i32(m, "paint_opac", 1);
|
||||
armpack_map_set_i32(m, "paint_occ", 1);
|
||||
armpack_map_set_i32(m, "paint_rough", 1);
|
||||
armpack_map_set_i32(m, "paint_met", 1);
|
||||
armpack_map_set_i32(m, "paint_nor", 1);
|
||||
armpack_map_set_i32(m, "paint_height", 1);
|
||||
armpack_map_set_i32(m, "paint_emis", 1);
|
||||
armpack_map_set_i32(m, "paint_subs", 1);
|
||||
armpack_map_set_i32(m, "opac_mode", 0);
|
||||
any_array_push(mds, m);
|
||||
}
|
||||
any_map_set(old, "material_datas", mds);
|
||||
|
||||
return import_arm_from_map_to_arm(old);
|
||||
}
|
||||
|
||||
|
||||
@@ -537,6 +537,7 @@ typedef struct project_format {
|
||||
struct ui_node_canvas_t_array *material_nodes;
|
||||
struct ui_node_canvas_t_array *material_groups;
|
||||
struct buffer_t_array *material_icons;
|
||||
struct material_data2_t_array *material_datas;
|
||||
struct string_array *font_assets;
|
||||
struct layer_data_t_array *layer_datas;
|
||||
struct mesh_data_t_array *mesh_datas;
|
||||
@@ -931,6 +932,25 @@ typedef struct layer_data_t_array {
|
||||
int capacity;
|
||||
} layer_data_t_array_t;
|
||||
|
||||
typedef struct material_data2 {
|
||||
bool paint_base;
|
||||
bool paint_opac;
|
||||
bool paint_occ;
|
||||
bool paint_rough;
|
||||
bool paint_met;
|
||||
bool paint_nor;
|
||||
bool paint_height;
|
||||
bool paint_emis;
|
||||
bool paint_subs;
|
||||
int opac_mode;
|
||||
} material_data2_t;
|
||||
|
||||
typedef struct material_data2_t_array {
|
||||
material_data2_t **buffer;
|
||||
int length;
|
||||
int capacity;
|
||||
} material_data2_t_array_t;
|
||||
|
||||
typedef struct ui_node_t_array {
|
||||
ui_node_t **buffer;
|
||||
int length;
|
||||
|
||||
@@ -148,7 +148,7 @@ buffer_t *util_encode_project(project_t *raw) {
|
||||
buffer_t *encoded = buffer_create(size);
|
||||
|
||||
armpack_encode_start(encoded->buffer);
|
||||
armpack_encode_map(26);
|
||||
armpack_encode_map(27);
|
||||
|
||||
armpack_encode_string("version");
|
||||
armpack_encode_string(raw->version);
|
||||
@@ -268,6 +268,37 @@ buffer_t *util_encode_project(project_t *raw) {
|
||||
armpack_encode_null();
|
||||
}
|
||||
|
||||
armpack_encode_string("material_datas");
|
||||
if (raw->material_datas != NULL) {
|
||||
armpack_encode_array(raw->material_datas->length);
|
||||
for (i32 i = 0; i < raw->material_datas->length; ++i) {
|
||||
armpack_encode_map(10);
|
||||
armpack_encode_string("paint_base");
|
||||
armpack_encode_bool(raw->material_datas->buffer[i]->paint_base);
|
||||
armpack_encode_string("paint_opac");
|
||||
armpack_encode_bool(raw->material_datas->buffer[i]->paint_opac);
|
||||
armpack_encode_string("paint_occ");
|
||||
armpack_encode_bool(raw->material_datas->buffer[i]->paint_occ);
|
||||
armpack_encode_string("paint_rough");
|
||||
armpack_encode_bool(raw->material_datas->buffer[i]->paint_rough);
|
||||
armpack_encode_string("paint_met");
|
||||
armpack_encode_bool(raw->material_datas->buffer[i]->paint_met);
|
||||
armpack_encode_string("paint_nor");
|
||||
armpack_encode_bool(raw->material_datas->buffer[i]->paint_nor);
|
||||
armpack_encode_string("paint_height");
|
||||
armpack_encode_bool(raw->material_datas->buffer[i]->paint_height);
|
||||
armpack_encode_string("paint_emis");
|
||||
armpack_encode_bool(raw->material_datas->buffer[i]->paint_emis);
|
||||
armpack_encode_string("paint_subs");
|
||||
armpack_encode_bool(raw->material_datas->buffer[i]->paint_subs);
|
||||
armpack_encode_string("opac_mode");
|
||||
armpack_encode_i32(raw->material_datas->buffer[i]->opac_mode);
|
||||
}
|
||||
}
|
||||
else {
|
||||
armpack_encode_null();
|
||||
}
|
||||
|
||||
armpack_encode_string("font_assets");
|
||||
armpack_encode_array_string(raw->font_assets);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user