mirror of
https://github.com/korenkonder/ReDIVA.git
synced 2026-10-04 20:58:03 +03:00
549 lines
18 KiB
C++
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
|