Files
korenkonder_ReDIVA/src/ReDIVA/data_edit.cpp
T

549 lines
18 KiB
C++

/*
by korenkonder
GitHub/GitLab: korenkonder
*/
#if defined(ReDIVA_DEV)
#include "data_edit.hpp"
#include "../CRE/rob/motion.hpp"
#include "../CRE/rob/rob.hpp"
#include "../CRE/ogg_vorbis.hpp"
#include "../CRE/sound.hpp"
#include "../KKdLib/vec.hpp"
#include "imgui_helper.hpp"
#if DATA_EDIT
DataEdit data_edit;
extern render_context* rctx_ptr;
DataEdit::Auth3D::Auth3D() {
}
DataEdit::Auth3D::~Auth3D() {
}
inline static void set_data(auth_3d_key& key, const float_t value) {
key.reset();
key.type = value != 0.0f && value != -0.0f ? AUTH_3D_KEY_STATIC : AUTH_3D_KEY_NONE;
key.value = value;
}
inline static void set_data(auth_3d_object_model_transform& mt,
const vec3 translation, const vec3 rotation, const vec3 scale, const float_t visibility = 1.0f) {
set_data(mt.translation.x, translation.x);
set_data(mt.translation.y, translation.y);
set_data(mt.translation.z, translation.z);
set_data(mt.rotation.x, rotation.x);
set_data(mt.rotation.y, rotation.y);
set_data(mt.rotation.z, rotation.z);
set_data(mt.scale.x, scale.x);
set_data(mt.scale.y, scale.y);
set_data(mt.scale.z, scale.z);
set_data(mt.visibility, visibility);
}
void DataEdit::Auth3D::Patch() {
::auth_3d* auth = id.get_auth_3d();
auth_3d_object_hrc* objhrc = &auth->object_hrc[0];
auth_3d_object_node* nodes = objhrc->node.data();
set_data(nodes[ 0].model_transform,
vec3(0.0f, 0.0f, 0.0f),
vec3(0.0f, 0.0f, 0.0f),
vec3(1.0f, 1.0f, 1.0f)); // OBJHRC_EFFCHRPV826MIK001_MOB
set_data(nodes[ 1].model_transform,
vec3(0.0f, 0.0f, 0.0f),
vec3(0.0f, 0.0f, 0.0f),
vec3(1.0f, 1.0f, 1.0f)); // gblctr
set_data(nodes[ 2].model_transform,
vec3(0.0f, 1.055f, 0.0f),
vec3(0.0f, 0.0f, 0.0f),
vec3(1.0f, 1.0f, 1.0f)); // n_hara
set_data(nodes[ 3].model_transform,
vec3(0.0f, 0.0f, 0.0f),
vec3(0.0f, 0.0f, 0.0f),
vec3(1.0f, 1.0f, 1.0f)); // n_hara_y
set_data(nodes[ 4].model_transform,
vec3(0.0f, 0.0f, 0.0f),
vec3(0.0f, 0.0f, 0.0f),
vec3(1.0f, 1.0f, 1.0f)); // j_hara_wj
set_data(nodes[ 5].model_transform,
vec3(0.0f, 0.0f, 0.0f),
vec3(0.0f, 0.0f, 0.0f),
vec3(1.0f, 1.0f, 1.0f)); // n_kosi
set_data(nodes[ 6].model_transform,
vec3(0.0f, 0.11f, 0.0f),
vec3(0.0f, 0.0f, 0.0f),
vec3(1.0f, 1.0f, 1.0f)); // j_mune_wj
set_data(nodes[ 7].model_transform,
vec3(0.0f, 0.0f, 0.0f),
vec3(0.0f, 0.0f, 0.0f),
vec3(1.0f, 1.0f, 1.0f)); // n_mune_kl
set_data(nodes[ 8].model_transform,
vec3(0.0f, 0.0f, 0.0f),
vec3(0.0f, 0.0f, 0.0f),
vec3(1.0f, 1.0f, 1.0f)); // j_mune_b_wj
set_data(nodes[ 9].model_transform,
vec3(0.0f, 0.145f, -0.044f),
vec3(-0.820574f, 0.0f, 0.24122f),
vec3(1.0f, 1.0f, 1.0f)); // j_kubi_wj
set_data(nodes[10].model_transform,
vec3(0.0f, 0.079f, 0.004f),
vec3(2.376704f, 0.175657f, -0.166183f),
vec3(1.0f, 1.0f, 1.0f)); // n_kao
set_data(nodes[11].model_transform,
vec3(0.0f, 0.0f, 0.0f),
vec3(0.0f, 0.0f, 0.0f),
vec3(1.0f, 1.0f, 1.0f)); // j_kao_wj
set_data(nodes[12].model_transform,
vec3(0.111f, 0.18f, -0.062f),
vec3(0.0f, -1.570796f, 1.221731f),
vec3(1.0f, 1.0f, 1.0f)); // j_hair_twin_l_000_wj
set_data(nodes[13].model_transform,
vec3(0.0f, -0.222f, 0.0f),
vec3(0.0f, 0.0f, 0.0f),
vec3(1.0f, 1.0f, 1.0f)); // j_hair_twin_l_001_wj
set_data(nodes[14].model_transform,
vec3(0.0f, -0.222f, 0.0f),
vec3(0.0f, 0.0f, 0.0f),
vec3(1.0f, 1.0f, 1.0f)); // j_hair_twin_l_002_wj
set_data(nodes[15].model_transform,
vec3(0.0f, -0.222f, 0.0f),
vec3(0.0f, 0.0f, 0.0f),
vec3(1.0f, 1.0f, 1.0f)); // j_hair_twin_l_003_wj
set_data(nodes[16].model_transform,
vec3(0.0f, -0.222f, 0.0f),
vec3(0.0f, 0.0f, 0.0f),
vec3(1.0f, 1.0f, 1.0f)); // j_hair_twin_l_004_wj
set_data(nodes[17].model_transform,
vec3(0.0f, -0.222f, 0.0f),
vec3(0.0f, 0.0f, 0.0f),
vec3(1.0f, 1.0f, 1.0f)); // j_hair_twin_l_005_wj
set_data(nodes[18].model_transform,
vec3(-0.111f, 0.18f, -0.062f),
vec3(0.0f, -1.570796f, -1.221731f),
vec3(1.0f, 1.0f, 1.0f)); // j_hair_twin_r_000_wj
set_data(nodes[19].model_transform,
vec3(0.0f, -0.222f, 0.0f),
vec3(0.0f, 0.0f, 0.0f),
vec3(1.0f, 1.0f, 1.0f)); // j_hair_twin_r_001_wj
set_data(nodes[20].model_transform,
vec3(0.0f, -0.222f, 0.0f),
vec3(0.0f, 0.0f, 0.0f),
vec3(1.0f, 1.0f, 1.0f)); // j_hair_twin_r_002_wj
set_data(nodes[21].model_transform,
vec3(0.0f, -0.222f, 0.0f),
vec3(0.0f, 0.0f, 0.0f),
vec3(1.0f, 1.0f, 1.0f)); // j_hair_twin_r_003_wj
set_data(nodes[22].model_transform,
vec3(0.0f, -0.222f, 0.0f),
vec3(0.0f, 0.0f, 0.0f),
vec3(1.0f, 1.0f, 1.0f)); // j_hair_twin_r_004_wj
set_data(nodes[23].model_transform,
vec3(0.0f, -0.222f, 0.0f),
vec3(0.0f, 0.0f, 0.0f),
vec3(1.0f, 1.0f, 1.0f)); // j_hair_twin_r_005_wj
/*set_data(nodes[24].model_transform,
vec3(0.0f, 0.0f, 0.0f),
vec3(0.0f, 0.0f, 0.0f),
vec3(1.0f, 1.0f, 1.0f)); // j_kao_normal_wj
set_data(nodes[25].model_transform,
vec3(0.0f, 0.0f, 0.0f),
vec3(0.0f, 0.0f, 0.0f),
vec3(1.0f, 1.0f, 1.0f)); // j_kao_close_wj
set_data(nodes[26].model_transform,
vec3(0.0f, 0.0f, 0.0f),
vec3(0.0f, 0.0f, 0.0f),
vec3(1.0f, 1.0f, 1.0f)); // j_kao_smile_wj
set_data(nodes[27].model_transform,
vec3(0.0f, 0.0f, 0.0f),
vec3(0.0f, 0.0f, 0.0f),
vec3(1.0f, 1.0f, 1.0f)); // j_kao_close_half_wj
set_data(nodes[28].model_transform,
vec3(0.0f, 0.0f, 0.0f),
vec3(0.0f, 0.0f, 0.0f),
vec3(1.0f, 1.0f, 1.0f)); // j_kao_smile_half_wj
set_data(nodes[29].model_transform,
vec3(0.0148f, -0.0018f, 0.079f),
vec3(0.0f, 0.0f, 0.0f),
vec3(1.0f, 1.0f, 1.0f)); // j_kuti_l_wj
set_data(nodes[30].model_transform,
vec3(0.0f, 0.00048f, 0.088f),
vec3(0.0f, 0.0f, 0.0f),
vec3(1.0f, 1.0f, 1.0f)); // j_kuti_u_wj
set_data(nodes[31].model_transform,
vec3(0.0f, -0.00672f, 0.082f),
vec3(0.0f, 0.0f, 0.0f),
vec3(1.0f, 1.0f, 1.0f)); // j_kuti_d_wj
set_data(nodes[32].model_transform,
vec3(-0.0148f, -0.0018f, 0.079f),
vec3(0.0f, 0.0f, 0.0f),
vec3(1.0f, 1.0f, 1.0f)); // j_kuti_r_wj
set_data(nodes[33].model_transform,
vec3(-0.027f, 0.061f, 0.015f),
vec3(-1.570796f, 0.0f, 0.0f),
vec3(1.0f, 1.0f, 1.0f)); // j_eye_r_wj
set_data(nodes[34].model_transform,
vec3(0.027f, 0.061f, 0.015f),
vec3(-1.570796f, 0.0f, 0.0f),
vec3(1.0f, 1.0f, 1.0f)); // j_eye_l_wj*/
set_data(nodes[35].model_transform,
vec3(0.02f, 0.129f, -0.053f),
vec3(1.570796f, 0.0f, 1.570796f),
vec3(1.0f, 1.0f, 1.0f)); // n_waki_l
set_data(nodes[36].model_transform,
vec3(0.0f, 0.0f, 0.0f),
vec3(0.0f, 0.0f, 0.0f),
vec3(1.0f, 1.0f, 1.0f)); // j_waki_l_wj
set_data(nodes[37].model_transform,
vec3(0.083002f, -0.009998f, 0.0f),
vec3(-0.037163f, -1.081817f, -3.108780f),
vec3(1.0f, 1.0f, 1.0f)); // n_kata_l
set_data(nodes[38].model_transform,
vec3(0.0f, 0.0f, 0.0f),
vec3(0.0f, 0.0f, 0.0f),
vec3(1.0f, 1.0f, 1.0f)); // j_kata_l_wj
set_data(nodes[39].model_transform,
vec3(0.183625f, -0.09765f, -0.003205f),
vec3(0.0f, 0.0f, 0.0f),
vec3(1.0f, 1.0f, 1.0f)); // j_ude_l_wj
set_data(nodes[40].model_transform,
vec3(0.18539f, -0.098589f, -0.003236f),
vec3(0.0f, 0.0f, 0.0f),
vec3(1.0f, 1.0f, 1.0f)); // j_te_l_wj
set_data(nodes[41].model_transform,
vec3(0.0f, 0.0f, 0.0f),
vec3(0.0f, 0.0f, 0.0f),
vec3(1.0f, 1.0f, 1.0f)); // j_te_sizen2_l_wj
set_data(nodes[42].model_transform,
vec3(0.0f, 0.0f, 0.0f),
vec3(0.0f, 0.0f, 0.0f),
vec3(1.0f, 1.0f, 1.0f)); // j_te_close_l_wj
set_data(nodes[43].model_transform,
vec3(0.0f, 0.0f, 0.0f),
vec3(0.0f, 0.0f, 0.0f),
vec3(1.0f, 1.0f, 1.0f)); // j_te_reset_l_wj
set_data(nodes[44].model_transform,
vec3(-0.02f, 0.129f, -0.053f),
vec3(1.570796f, 0.0f, 1.570796f),
vec3(1.0f, 1.0f, 1.0f)); // n_waki_r
set_data(nodes[45].model_transform,
vec3(0.0f, 0.0f, 0.0f),
vec3(0.0f, 0.0f, 0.0f),
vec3(1.0f, 1.0f, 1.0f)); // j_waki_r_wj
set_data(nodes[46].model_transform,
vec3(-0.083002f, -0.009998f, 0.0f),
vec3(0.037163f, 1.081817f, -3.108780f),
vec3(1.0f, 1.0f, 1.0f)); // n_kata_r
set_data(nodes[47].model_transform,
vec3(0.0f, 0.0f, 0.0f),
vec3(0.0f, 0.0f, 0.0f),
vec3(1.0f, 1.0f, 1.0f)); // j_kata_r_wj
set_data(nodes[48].model_transform,
vec3(-0.183625f, -0.09765f, -0.003205f),
vec3(0.0f, 0.0f, 0.0f),
vec3(1.0f, 1.0f, 1.0f)); // j_ude_r_wj
set_data(nodes[49].model_transform,
vec3(-0.18539f, -0.098589f, -0.003236f),
vec3(0.0f, 0.0f, 0.0f),
vec3(1.0f, 1.0f, 1.0f)); // j_te_r_wj
set_data(nodes[50].model_transform,
vec3(0.0f, 0.0f, 0.0f),
vec3(0.0f, 0.0f, 0.0f),
vec3(1.0f, 1.0f, 1.0f)); // j_te_sizen2_r_wj
set_data(nodes[51].model_transform,
vec3(0.0f, 0.0f, 0.0f),
vec3(0.0f, 0.0f, 0.0f),
vec3(1.0f, 1.0f, 1.0f)); // j_te_close_r_wj
set_data(nodes[52].model_transform,
vec3(0.0f, 0.0f, 0.0f),
vec3(0.0f, 0.0f, 0.0f),
vec3(1.0f, 1.0f, 1.0f)); // j_te_reset_r_wj
set_data(nodes[53].model_transform,
vec3(0.0f, 0.0f, 0.0f),
vec3(0.0f, 0.0f, 0.0f),
vec3(1.0f, 1.0f, 1.0f)); // j_te_one_r_wj
set_data(nodes[54].model_transform,
vec3(0.0f, 0.0f, 0.0f),
vec3(0.0f, 1.570796f, 0.0f),
vec3(1.0f, 1.0f, 1.0f)); // j_kosi_wj
set_data(nodes[55].model_transform,
vec3(0.065f, -0.15f, -0.046f),
vec3(0.0f, 0.0f, -1.570796f),
vec3(1.0f, 1.0f, 1.0f)); // n_momo_l
set_data(nodes[56].model_transform,
vec3(0.0f, 0.0f, 0.0f),
vec3(0.0f, 0.0f, 0.0f),
vec3(1.0f, 1.0f, 1.0f)); // j_momo_l_wj
set_data(nodes[57].model_transform,
vec3(0.0f, -0.39f, 0.0f),
vec3(0.0f, 0.0f, 0.0f),
vec3(1.0f, 1.0f, 1.0f)); // j_sune_l_wj
set_data(nodes[58].model_transform,
vec3(0.0f, -0.38f, 0.0f),
vec3(0.0f, 0.0f, 0.0f),
vec3(1.0f, 1.0f, 1.0f)); // j_asi_l_wj
set_data(nodes[59].model_transform,
vec3(-0.065f, -0.15f, -0.046f),
vec3(0.0f, 0.0f, -1.570796f),
vec3(1.0f, 1.0f, 1.0f)); // n_momo_r
set_data(nodes[60].model_transform,
vec3(0.0f, 0.0f, 0.0f),
vec3(0.0f, 0.0f, 0.0f),
vec3(1.0f, 1.0f, 1.0f)); // j_momo_r_wj
set_data(nodes[61].model_transform,
vec3(0.0f, -0.39f, 0.0f),
vec3(0.0f, 0.0f, 0.0f),
vec3(1.0f, 1.0f, 1.0f)); // j_sune_r_wj
set_data(nodes[62].model_transform,
vec3(0.0f, -0.38f, 0.0f),
vec3(0.0f, 0.0f, 0.0f),
vec3(1.0f, 1.0f, 1.0f)); // j_asi_r_wj
set_data(nodes[63].model_transform,
vec3(0.0f, -0.052047f, 0.060104f),
vec3(0.0f, 0.0f, -1.762782f),
vec3(1.0f, 1.0f, 1.0f)); // j_cloth_skirt_f_000_wj
set_data(nodes[64].model_transform,
vec3(0.05915f, -0.052048f, 0.04283f),
vec3(-0.368869f, -0.220518f, -1.784135f),
vec3(1.0f, 1.0f, 1.0f)); // j_cloth_skirt_l_02_000_wj
set_data(nodes[65].model_transform,
vec3(0.10962f, -0.052048f, -0.013f),
vec3(-1.710423f, -0.331613f, -1.588249f),
vec3(1.0f, 1.0f, 1.0f)); // j_cloth_skirt_l_04_000_wj
set_data(nodes[66].model_transform,
vec3(0.08239f, -0.052048f, -0.09275f),
vec3(-2.356194f, -0.314159f, -1.308997f),
vec3(1.0f, 1.0f, 1.0f)); // j_cloth_skirt_l_06_000_wj
set_data(nodes[67].model_transform,
vec3(-0.05915f, -0.052048f, 0.04283f),
vec3(0.368869f, 0.220518f, -1.784135f),
vec3(1.0f, 1.0f, 1.0f)); // j_cloth_skirt_r_02_000_wj
set_data(nodes[68].model_transform,
vec3(-0.10962f, -0.052048f, -0.013f),
vec3(1.710423f, 0.331613f, -1.588249f),
vec3(1.0f, 1.0f, 1.0f)); // j_cloth_skirt_r_04_000_wj
set_data(nodes[69].model_transform,
vec3(-0.08239f, -0.052048f, -0.09275f),
vec3(2.356194f, 0.314159f, -1.308997f),
vec3(1.0f, 1.0f, 1.0f)); // j_cloth_skirt_r_06_000_wj
set_data(nodes[70].model_transform,
vec3(0.0f, -0.052049f, -0.118331f),
vec3(-3.141592f, 0.0f, -1.186823f),
vec3(1.0f, 1.0f, 1.0f)); // j_cloth_skirt_b_000_wj
objhrc->interpolate(0.0f);
}
void DataEdit::Auth3D::Reset() {
auth_3d_data_unload_category(category.hash_murmurhash);
id.unload_id(rctx_ptr);
object_storage_unload_set(object_set.hash_murmurhash);
category.clear();
file.clear();
object_set.clear();
id = -1;
obj_db.clear();
tex_db.clear();
}
DataEdit::DataEdit() : state(), play(), sound_play(), frame(), frame_count() {
chara_id = -1;
mot_set_id = -1;
motion_id = -1;
}
DataEdit::~DataEdit() {
}
bool DataEdit::Init() {
Reset();
task_rob_manager_add_task();
return true;
}
bool DataEdit::Ctrl() {
data_struct* aft_data = &data_list[DATA_AFT];
bone_database* aft_bone_data = &aft_data->data_ft.bone_data;
motion_database* aft_mot_db = &aft_data->data_ft.mot_db;
data_struct* x_data = &data_list[DATA_X];
switch (state) {
case 0: {
if (!task_rob_manager_check_task_ready())
break;
state = 1;
} break;
case 1: {
if (chara_id == -1) {
rob_chara_pv_data pv_data;
pv_data.chara_size_index = chara_init_data_get_chara_size_index(CHARA_MIKU);
chara_id = rob_chara_array_init_chara_index(CHARA_MIKU, &pv_data, 0, true);
}
if (chara_id == -1 || !task_rob_manager_check_chara_loaded(chara_id))
break;
state = 2;
} break;
case 2: {
mot_set_id = aft_mot_db->get_motion_set_id("PV826");
motion_id = aft_mot_db->get_motion_id("PV826_OST_P1_00");
motion_set_load_motion(mot_set_id, 0, aft_mot_db);
state = 3;
auth_3d.category.assign("A3D_EFFCHRPV826MIK001");
auth_3d.file.assign("EFFCHRPV826MIK001");
auth_3d.object_set.assign("EFFCHRPV826MIK001");
auth_3d_data_load_category(x_data, auth_3d.category.c_str(), auth_3d.category.hash_murmurhash);
object_storage_load_set_hash(x_data, auth_3d.object_set.hash_murmurhash);
} break;
case 3: {
if (motion_storage_check_mot_file_not_ready(mot_set_id))
break;
if (!auth_3d_data_check_category_loaded(auth_3d.category.hash_murmurhash)
|| (object_storage_get_obj_set_handler(auth_3d.object_set.hash_murmurhash)
&& object_storage_load_obj_set_check_not_read(
auth_3d.object_set.hash_murmurhash, &auth_3d.obj_db, &auth_3d.tex_db)))
break;
auth_3d.id = auth_3d_data_load_hash(
auth_3d.file.hash_murmurhash, x_data, &auth_3d.obj_db, &auth_3d.tex_db);
auth_3d.id.read_file_modern();
state = 4;
} break;
case 4: {
if (!auth_3d.id.check_not_empty() || !auth_3d.id.check_loaded())
break;
auth_3d.id.set_enable(true);
auth_3d.id.set_paused(false);
auth_3d.id.set_repeat(false);
auth_3d.id.set_req_frame(0.0f);
auth_3d.id.set_visibility(true);
auth_3d.Patch();
rob_chara* rob_chr = rob_chara_array_get(chara_id);
rob_chr->set_motion_id(motion_id, 0.0f, 0.0f, true, false,
MOTION_BLEND_CROSS, aft_bone_data, aft_mot_db);
rob_chr->set_visibility(true);
rob_chr->set_mouth_mottbl_motion(0, mouth_anim_id_to_mottbl_index(8), 1.0f,
0, 0.0f, 0.0f, 1.0f, -1, 0.0f, aft_mot_db);
frame = 5000;
frame_count = (int32_t)rob_chr->get_frame_count();
ogg_path.assign("H:\\C\\Documents\\A\\pv826\\lipsync\\01_rin.ogg");
//sound_work_play_stream(0, ogg_path.c_str(), (float_t)((double_t)frame / 60.0));
state = 5;
} break;
case 5: {
const vec3 auth_trans = vec3(-0.25f, 0.0f, 0.0f);
const vec3 rob_trans = vec3( 0.25f, 0.0f, 0.0f);
mat4 auth_mat;
mat4_translate(&auth_trans, &auth_mat);
auth_3d.id.set_req_frame((float_t)frame);
auth_3d.id.set_mat(auth_mat);
rob_chara* rob_chr = rob_chara_array_get(chara_id);
rob_chr->set_frame((float_t)frame);
rob_chr->data.miku_rot.position = rob_trans;
if (!play && sound_play) {
sound_work_release_stream(0);
sound_play = false;
}
else if (play && !sound_play) {
sound_work_play_stream(0, ogg_path.c_str(), (float_t)((double_t)frame / 60.0));
sound_play = true;
}
if (play)
frame++;
if (frame >= frame_count) {
frame = 4808;
sound_work_release_stream(0);
sound_work_play_stream(0, ogg_path.c_str(), (float_t)((double_t)frame / 60.0));
}
} break;
}
return false;
}
bool DataEdit::Dest() {
rob_chara_array_free_chara_id(chara_id);
task_rob_manager_del_task();
Reset();
return true;
}
void DataEdit::Window() {
ImGuiIO& io = ImGui::GetIO();
ImGuiStyle& style = ImGui::GetStyle();
ImFont* font = ImGui::GetFont();
extern int32_t height;
extern int32_t width;
float_t w = 200.0f;
float_t h = (float_t)height;
h = min_def(h, 232.0f);
ImGui::SetNextWindowPos({ 0.0f, 0.0f }, ImGuiCond_Appearing);
ImGui::SetNextWindowSize({ w, h }, ImGuiCond_Always);
ImGuiWindowFlags window_flags = 0;
window_flags |= ImGuiWindowFlags_NoResize;
window_focus = false;
bool open = true;
if (!ImGui::Begin("Data Edit", &open, window_flags)) {
ImGui::End();
return;
}
else if (!open) {
ImGui::End();
return;
}
if (ImGui::Button(play ? "Pause" : "Play"))
play ^= true;
ImGui::Text("% 5d/% 5d", frame, frame_count);
ImGui::End();
}
void DataEdit::Reset() {
motion_set_unload_motion(mot_set_id);
chara_id = -1;
state = 0;
mot_set_id = -1;
motion_id = -1;
auth_3d.Reset();
ogg_path.clear();
ogg_path.shrink_to_fit();
play = false;
sound_play = false;
frame = 0;
frame_count = 0;
}
#endif
#endif