RobOsageTest: Implemented Line display
This commit is contained in:
@@ -410,7 +410,7 @@ public:
|
||||
virtual void Hide() override;
|
||||
};
|
||||
|
||||
const char* collision_type_name_list[] = {
|
||||
static const char* collision_type_name_list[] = {
|
||||
"END",
|
||||
"BALL",
|
||||
"CYLINDER",
|
||||
@@ -422,12 +422,12 @@ const char* collision_type_name_list[] = {
|
||||
RobOsageTest* rob_osage_test;
|
||||
RobOsageTestDw* rob_osage_test_dw;
|
||||
|
||||
extern render_context* rctx_ptr;
|
||||
|
||||
RobOsageTest::RobOsageTest() : load(), save(), coli(), line(),
|
||||
osage_index(), collision_index(), collision_update() {
|
||||
chara_id = -1;
|
||||
load_chara_id = 0;
|
||||
chara_index = CHARA_NONE;
|
||||
cos_id = -1;
|
||||
item_id = ITEM_NONE;
|
||||
osage_index = -1;
|
||||
collision_index = -1;
|
||||
@@ -448,10 +448,21 @@ bool RobOsageTest::init() {
|
||||
}
|
||||
|
||||
bool RobOsageTest::ctrl() {
|
||||
if (chara_id != -1) {
|
||||
rob_chara* rob_chr = rob_chara_array_get(get_rob_chara_smth(), chara_id);
|
||||
if (!rob_chr)
|
||||
return false;
|
||||
|
||||
if (chara_index != rob_chr->chara_index || cos_id != rob_chr->cos_id)
|
||||
load = true;
|
||||
}
|
||||
|
||||
if (load) {
|
||||
load = false;
|
||||
|
||||
chara_id = load_chara_id;
|
||||
chara_index = CHARA_NONE;
|
||||
cos_id = -1;
|
||||
|
||||
objects.clear();
|
||||
bocs.clear();
|
||||
@@ -461,7 +472,14 @@ bool RobOsageTest::ctrl() {
|
||||
rob_osage_test_dw->rob.object_list_box->ClearItems();
|
||||
rob_osage_test_dw->rob.object_list_box->SetItemIndex(-1);
|
||||
|
||||
rob_chara_item_equip* rob_itm_equip = rob_chara_array_get_item_equip(get_rob_chara_smth(), chara_id);
|
||||
rob_chara* rob_chr = rob_chara_array_get(get_rob_chara_smth(), chara_id);
|
||||
if (!rob_chr)
|
||||
return false;
|
||||
|
||||
chara_index = rob_chr->chara_index;
|
||||
cos_id = rob_chr->cos_id;
|
||||
|
||||
rob_chara_item_equip* rob_itm_equip = rob_chr->item_equip;
|
||||
if (!rob_itm_equip)
|
||||
return false;
|
||||
|
||||
@@ -942,40 +960,100 @@ void RobOsageTest::disp_coli() {
|
||||
return;
|
||||
|
||||
rob_chara_item_equip_object* itm_eq_obj = get_item_equip_object();
|
||||
if (!itm_eq_obj)
|
||||
if (!itm_eq_obj || itm_eq_obj->obj_info != obj_info)
|
||||
return;
|
||||
|
||||
ExNodeBlock* ex_node = get_node_block(itm_eq_obj);
|
||||
if (!ex_node)
|
||||
return;
|
||||
|
||||
ExOsageBlock* osg = 0;
|
||||
ExClothBlock* cls = 0;
|
||||
SkinParam::CollisionParam* cls_param = 0;
|
||||
if (ex_node->type == EX_OSAGE) {
|
||||
osg = (ExOsageBlock*)ex_node;
|
||||
cls_param = get_cls_param(&osg->rob.skin_param_ptr->coli);
|
||||
}
|
||||
else if (ex_node->type == EX_CLOTH) {
|
||||
cls = (ExClothBlock*)ex_node;
|
||||
cls_param = get_cls_param(&cls->rob.skin_param_ptr->coli);
|
||||
}
|
||||
else
|
||||
return;
|
||||
|
||||
disp_coli_cls_list(ex_node, cls_param);
|
||||
|
||||
if (osg && osg->rob.nodes.size() >= 1) {
|
||||
RobOsageNode* j_begin = osg->rob.nodes.data() + 1;
|
||||
RobOsageNode* j_end = osg->rob.nodes.data() + osg->rob.nodes.size();
|
||||
for (RobOsageNode* j = j_begin; j != j_end; j++) {
|
||||
mdl::EtcObj etc(mdl::ETC_OBJ_CAPSULE);
|
||||
etc.color = color_cyan;
|
||||
etc.color.a = 0xCF;
|
||||
etc.constant = true;
|
||||
|
||||
etc.data.capsule.radius = j->data_ptr->skp_osg_node.coli_r;
|
||||
etc.data.capsule.slices = 16;
|
||||
etc.data.capsule.stacks = 16;
|
||||
etc.data.capsule.wire = false;
|
||||
etc.data.capsule.pos[0] = j[-1].pos;
|
||||
etc.data.capsule.pos[1] = j[ 0].pos;
|
||||
disp_manager->entry_obj_etc(&mat4_identity, &etc);
|
||||
}
|
||||
}
|
||||
else if (cls && cls->rob.nodes.size() >= cls->rob.root_count) {
|
||||
CLOTHNode* j_begin = cls->rob.nodes.data() + cls->rob.root_count;
|
||||
CLOTHNode* j_end = cls->rob.nodes.data() + cls->rob.nodes.size();
|
||||
for (CLOTHNode* j = j_begin; j != j_end; j++) {
|
||||
mdl::EtcObj etc(mdl::ETC_OBJ_SPHERE);
|
||||
etc.color = color_cyan;
|
||||
etc.color.a = 0xCF;
|
||||
etc.constant = true;
|
||||
|
||||
etc.data.sphere.radius = max_def(cls->rob.skin_param_ptr->coli_r, 0.005f);
|
||||
etc.data.sphere.slices = 16;
|
||||
etc.data.sphere.stacks = 16;
|
||||
etc.data.sphere.wire = false;
|
||||
|
||||
vec3 pos;
|
||||
mat4 mat;
|
||||
mat4_transpose(&itm_eq_obj->item_equip->mat, &mat);
|
||||
mat4_transform_point(&mat, &j->pos, &pos);
|
||||
|
||||
mat4_translate(&pos, &mat);
|
||||
mat4_transpose(&mat, &mat);
|
||||
disp_manager->entry_obj_etc(&mat, &etc);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void RobOsageTest::disp_coli_cls_list(ExNodeBlock* ex_node, SkinParam::CollisionParam* selected_cls_param) {
|
||||
if (!ex_node)
|
||||
return;
|
||||
|
||||
prj::vector<SkinParam::CollisionParam>* cls_list = 0;
|
||||
mat4* transform = 0;
|
||||
|
||||
ExOsageBlock* osg = get_osage_block(itm_eq_obj);
|
||||
ExClothBlock* cls = 0;
|
||||
if (osg) {
|
||||
cls_list = get_cls_list(osg);
|
||||
if (ex_node->type == EX_OSAGE) {
|
||||
ExOsageBlock* osg = (ExOsageBlock*)ex_node;
|
||||
cls_list = &osg->rob.skin_param_ptr->coli;
|
||||
transform = osg->mats;
|
||||
}
|
||||
else {
|
||||
cls = get_cloth_block(itm_eq_obj);
|
||||
if (cls) {
|
||||
cls_list = get_cls_list(cls);
|
||||
transform = cls->mats;
|
||||
}
|
||||
else if (ex_node->type == EX_CLOTH) {
|
||||
ExClothBlock* cls = (ExClothBlock*)ex_node;
|
||||
cls_list = &cls->rob.skin_param_ptr->coli;
|
||||
transform = cls->mats;
|
||||
}
|
||||
|
||||
if (!cls_list || !transform)
|
||||
else
|
||||
return;
|
||||
|
||||
static const color4u8 selected_color = 0xCF00EF00;
|
||||
static const color4u8 cls_node_color = 0xCFEFEF00;
|
||||
static const color4u8 osg_node_color = 0xCFEFEF00;
|
||||
static const color4u8 default_color = 0xCFFFFFFF;
|
||||
for (const SkinParam::CollisionParam& i : *cls_list) {
|
||||
color4u8 color = selected_cls_param && &i == selected_cls_param ? color_green : color_white;
|
||||
color.a = 0xCF;
|
||||
|
||||
SkinParam::CollisionParam* cls_param = get_cls_param(cls_list);
|
||||
for (const SkinParam::CollisionParam& i : *cls_list)
|
||||
switch (i.type) {
|
||||
case SkinParam::CollisionTypeBall: {
|
||||
mdl::EtcObj etc(mdl::ETC_OBJ_SPHERE);
|
||||
etc.color = cls_param && &i == cls_param ? selected_color : default_color;
|
||||
etc.color = color;
|
||||
etc.constant = true;
|
||||
|
||||
etc.data.sphere.radius = i.radius;
|
||||
@@ -994,7 +1072,7 @@ void RobOsageTest::disp_coli() {
|
||||
} break;
|
||||
case SkinParam::CollisionTypeCapsule: {
|
||||
mdl::EtcObj etc(mdl::ETC_OBJ_CAPSULE);
|
||||
etc.color = cls_param && &i == cls_param ? selected_color : default_color;
|
||||
etc.color = color;
|
||||
etc.constant = true;
|
||||
|
||||
etc.data.capsule.radius = i.radius;
|
||||
@@ -1007,11 +1085,12 @@ void RobOsageTest::disp_coli() {
|
||||
mat4_transform_point(&mat, &i.pos[0], &etc.data.capsule.pos[0]);
|
||||
mat4_transpose(&transform[i.node_idx[1]], &mat);
|
||||
mat4_transform_point(&mat, &i.pos[1], &etc.data.capsule.pos[1]);
|
||||
mat4_transpose(&mat, &mat);
|
||||
disp_manager->entry_obj_etc(&mat4_identity, &etc);
|
||||
} break;
|
||||
case SkinParam::CollisionTypePlane: {
|
||||
mdl::EtcObj etc(mdl::ETC_OBJ_PLANE);
|
||||
etc.color = cls_param && &i == cls_param ? selected_color : default_color;
|
||||
etc.color = color;
|
||||
etc.constant = true;
|
||||
|
||||
etc.data.plane.w = 2;
|
||||
@@ -1039,7 +1118,7 @@ void RobOsageTest::disp_coli() {
|
||||
} break;
|
||||
case SkinParam::CollisionTypeEllipse: {
|
||||
mdl::EtcObj etc(mdl::ETC_OBJ_SPHERE);
|
||||
etc.color = cls_param && &i == cls_param ? selected_color : default_color;
|
||||
etc.color = color;
|
||||
etc.constant = true;
|
||||
|
||||
etc.data.sphere.radius = 1.0f;
|
||||
@@ -1076,7 +1155,7 @@ void RobOsageTest::disp_coli() {
|
||||
} break;
|
||||
case SkinParam::CollisionTypeAABB: {
|
||||
mdl::EtcObj etc(mdl::ETC_OBJ_CUBE);
|
||||
etc.color = cls_param && &i == cls_param ? selected_color : default_color;
|
||||
etc.color = color;
|
||||
etc.constant = true;
|
||||
|
||||
vec3 pos;
|
||||
@@ -1092,47 +1171,6 @@ void RobOsageTest::disp_coli() {
|
||||
disp_manager->entry_obj_etc(&mat, &etc);
|
||||
} break;
|
||||
}
|
||||
|
||||
if (osg && osg->rob.nodes.size() > 1) {
|
||||
RobOsageNode* i_begin = osg->rob.nodes.data() + 1;
|
||||
RobOsageNode* i_end = osg->rob.nodes.data() + osg->rob.nodes.size();
|
||||
for (RobOsageNode* i = i_begin; i != i_end; i++) {
|
||||
mdl::EtcObj etc(mdl::ETC_OBJ_CAPSULE);
|
||||
etc.color = osg_node_color;
|
||||
etc.constant = true;
|
||||
|
||||
etc.data.capsule.radius = i->data_ptr->skp_osg_node.coli_r;
|
||||
etc.data.capsule.slices = 16;
|
||||
etc.data.capsule.stacks = 16;
|
||||
etc.data.capsule.wire = false;
|
||||
etc.data.capsule.pos[0] = i[-1].pos;
|
||||
etc.data.capsule.pos[1] = i[ 0].pos;
|
||||
disp_manager->entry_obj_etc(&mat4_identity, &etc);
|
||||
}
|
||||
}
|
||||
|
||||
if (cls && cls->rob.nodes.size() > 1) {
|
||||
CLOTHNode* i_begin = cls->rob.nodes.data() + cls->rob.root_count;
|
||||
CLOTHNode* i_end = cls->rob.nodes.data() + cls->rob.nodes.size();
|
||||
for (CLOTHNode* i = i_begin; i != i_end; i++) {
|
||||
mdl::EtcObj etc(mdl::ETC_OBJ_SPHERE);
|
||||
etc.color = cls_node_color;
|
||||
etc.constant = true;
|
||||
|
||||
etc.data.sphere.radius = max_def(cls->rob.skin_param_ptr->coli_r, 0.005f);
|
||||
etc.data.sphere.slices = 16;
|
||||
etc.data.sphere.stacks = 16;
|
||||
etc.data.sphere.wire = false;
|
||||
|
||||
vec3 pos;
|
||||
mat4 mat;
|
||||
mat4_transpose(&itm_eq_obj->item_equip->mat, &mat);
|
||||
mat4_transform_point(&mat, &i->pos, &pos);
|
||||
|
||||
mat4_translate(&pos, &mat);
|
||||
mat4_transpose(&mat, &mat);
|
||||
disp_manager->entry_obj_etc(&mat, &etc);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1140,6 +1178,139 @@ void RobOsageTest::disp_line() {
|
||||
if (!line)
|
||||
return;
|
||||
|
||||
rob_chara_item_equip_object* itm_eq_obj = get_item_equip_object();
|
||||
if (!itm_eq_obj || itm_eq_obj->obj_info != obj_info)
|
||||
return;
|
||||
|
||||
ExNodeBlock* ex_node = get_node_block(itm_eq_obj);
|
||||
|
||||
for (ExOsageBlock*& i : itm_eq_obj->osage_blocks) {
|
||||
if (!i || i->rob.nodes.size() < 1)
|
||||
continue;
|
||||
|
||||
mat4 mat;
|
||||
mat4_transpose(i->rob.nodes.data()[0].bone_node_mat, &mat);
|
||||
mat4_scale_rot(&mat, 0.05f, &mat);
|
||||
mat4_transpose(&mat, &mat);
|
||||
if (i == ex_node)
|
||||
spr::put_cross(&mat, color_red, color_green, color_blue);
|
||||
else
|
||||
spr::put_cross(&mat, color_dark_red, color_dark_green, color_dark_blue);
|
||||
|
||||
const color4u8 line_color = i == ex_node ? color_white : color_dark_cyan;
|
||||
const color4u8 rect_color = i == ex_node ? color_red : color_dark_red;
|
||||
|
||||
RobOsageNode* j_begin = i->rob.nodes.data() + 1;
|
||||
RobOsageNode* j_end = i->rob.nodes.data() + i->rob.nodes.size();
|
||||
for (RobOsageNode* j = j_begin; j != j_end; j++)
|
||||
spr::put_sprite_3d_line(j[-1].pos, j[0].pos, line_color);
|
||||
|
||||
for (RobOsageNode* j = j_begin; j != j_end; j++)
|
||||
spr::put_sprite_rect({ spr::proj_sprite_3d_line(j->pos, true) - 2.0f, 4.0f },
|
||||
RESOLUTION_MODE_MAX, spr::SPR_PRIO_DEBUG, rect_color, 0);
|
||||
|
||||
mat4_transpose(i->rob.nodes.data()[0].bone_node_mat, &mat);
|
||||
mat4_scale_rot(&mat, 0.05f, &mat);
|
||||
mat4_transpose(&mat, &mat);
|
||||
spr::put_cross(&mat, color_dark_red, color_dark_green, color_dark_blue);
|
||||
}
|
||||
|
||||
for (ExClothBlock*& i : itm_eq_obj->cloth_blocks) {
|
||||
if (!i || i->rob.nodes.size() < i->rob.root_count)
|
||||
continue;
|
||||
|
||||
|
||||
int64_t root_count = i->rob.root_count;
|
||||
CLOTHNode* j_begin = i->rob.nodes.data() + root_count;
|
||||
CLOTHNode* j_end = i->rob.nodes.data() + i->rob.nodes.size();
|
||||
|
||||
const color4u8 color_line = i == ex_node ? color_red : color_dark_red;
|
||||
|
||||
const color4u8 color_x = i == ex_node ? color_white : color_grey;
|
||||
const color4u8 color_y = i == ex_node ? color_cyan : color_dark_cyan;
|
||||
const color4u8 color_z = i == ex_node ? color_green : color_dark_green;
|
||||
|
||||
for (CLOTHNode* j = j_begin; j != j_end; j++) {
|
||||
spr::put_sprite_3d_line(j[-root_count].pos, j[0].pos, color_line);
|
||||
if ((j - j_begin) % root_count)
|
||||
spr::put_sprite_3d_line(j[-1].pos, j[0].pos, color_line);
|
||||
}
|
||||
|
||||
for (CLOTHNode* j = j_begin; j != j_end; j++) {
|
||||
const vec3 dir = vec3::normalize(j[0].pos - j[-root_count].pos);
|
||||
const vec3 up = { 0.0f, 1.0f, 0.0f };
|
||||
vec3 axis;
|
||||
float_t angle;
|
||||
Glitter::axis_angle_from_vectors(&axis, &angle, &up, &dir);
|
||||
|
||||
mat4 mat = mat4_identity;
|
||||
mat4_mul_rotation(&mat, &axis, angle, &mat);
|
||||
mat4_scale_rot(&mat, 0.025f, &mat);
|
||||
mat4_set_translation(&mat, &j->pos);
|
||||
mat4_transpose(&mat, &mat);
|
||||
|
||||
spr::put_cross(&mat, color_x, color_y, color_z);
|
||||
}
|
||||
}
|
||||
|
||||
if (!ex_node)
|
||||
return;
|
||||
|
||||
const ExOsageBlock* osg = 0;
|
||||
const ExClothBlock* cls = 0;
|
||||
const SkinParam::CollisionParam* cls_param = 0;
|
||||
const mat4* transform = 0;
|
||||
if (ex_node->type == EX_OSAGE) {
|
||||
osg = (ExOsageBlock*)ex_node;
|
||||
cls_param = get_cls_param(&osg->rob.skin_param_ptr->coli);
|
||||
transform = osg->mats;
|
||||
}
|
||||
else if (ex_node->type == EX_CLOTH) {
|
||||
cls = (ExClothBlock*)ex_node;
|
||||
cls_param = get_cls_param(&cls->rob.skin_param_ptr->coli);
|
||||
transform = cls->mats;
|
||||
}
|
||||
else
|
||||
return;
|
||||
|
||||
if (cls_param)
|
||||
switch (cls_param->type) {
|
||||
case SkinParam::CollisionTypeBall:
|
||||
disp_line_cls_param(transform[cls_param->node_idx[0]], cls_param->pos[0]);
|
||||
break;
|
||||
case SkinParam::CollisionTypeCapsule:
|
||||
disp_line_cls_param(transform[cls_param->node_idx[0]], cls_param->pos[0]);
|
||||
disp_line_cls_param(transform[cls_param->node_idx[1]], cls_param->pos[1]);
|
||||
break;
|
||||
case SkinParam::CollisionTypePlane:
|
||||
disp_line_cls_param(transform[cls_param->node_idx[0]], cls_param->pos[0]);
|
||||
break;
|
||||
case SkinParam::CollisionTypeEllipse:
|
||||
disp_line_cls_param(transform[cls_param->node_idx[0]], cls_param->pos[0]);
|
||||
disp_line_cls_param(transform[cls_param->node_idx[1]], cls_param->pos[1]);
|
||||
break;
|
||||
case SkinParam::CollisionTypeAABB:
|
||||
disp_line_cls_param(transform[cls_param->node_idx[0]], cls_param->pos[0]);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
void RobOsageTest::disp_line_cls_param(const mat4& transform, const vec3& pos) {
|
||||
mat4 mat;
|
||||
mat4_transpose(&transform, &mat);
|
||||
mat4_scale_rot(&mat, 0.1f, &mat);
|
||||
mat4_transpose(&mat, &mat);
|
||||
spr::put_cross(&mat, color_red, color_green, color_blue);
|
||||
|
||||
vec3 p;
|
||||
mat4_transform_point(&transform, &pos, &p);
|
||||
|
||||
vec3 p_node;
|
||||
mat4_get_translation(&transform, &p_node);
|
||||
spr::put_sprite_3d_line(p, p_node, color_grey);
|
||||
|
||||
spr::put_sprite_rect({ spr::proj_sprite_3d_line(p, true) - 1.0f, 2.0f },
|
||||
RESOLUTION_MODE_MAX, spr::SPR_PRIO_DEBUG, color_yellow, 0);
|
||||
}
|
||||
|
||||
inline ExClothBlock* RobOsageTest::get_cloth_block(rob_chara_item_equip_object* itm_eq_obj) const {
|
||||
@@ -1149,6 +1320,24 @@ inline ExClothBlock* RobOsageTest::get_cloth_block(rob_chara_item_equip_object*
|
||||
return 0;
|
||||
}
|
||||
|
||||
inline prj::vector<SkinParam::CollisionParam>* RobOsageTest::get_cls_list(ExNodeBlock* ex_node) const {
|
||||
if (!ex_node)
|
||||
return 0;
|
||||
|
||||
if (ex_node->type == EX_OSAGE)
|
||||
return &((ExOsageBlock*)ex_node)->rob.skin_param_ptr->coli;
|
||||
else if (ex_node->type == EX_CLOTH)
|
||||
return &((ExClothBlock*)ex_node)->rob.skin_param_ptr->coli;
|
||||
return 0;
|
||||
}
|
||||
|
||||
inline SkinParam::CollisionParam* RobOsageTest::get_cls_param(
|
||||
prj::vector<SkinParam::CollisionParam>* cls_list) const {
|
||||
if (cls_list && collision_index < cls_list->size())
|
||||
return &cls_list->data()[collision_index];
|
||||
return 0;
|
||||
}
|
||||
|
||||
inline rob_chara_item_equip_object* RobOsageTest::get_item_equip_object() const {
|
||||
if (chara_id < 0 || chara_id >= ROB_CHARA_COUNT)
|
||||
return 0;
|
||||
@@ -1159,31 +1348,22 @@ inline rob_chara_item_equip_object* RobOsageTest::get_item_equip_object() const
|
||||
return 0;
|
||||
}
|
||||
|
||||
inline ExNodeBlock* RobOsageTest::get_node_block(rob_chara_item_equip_object* itm_eq_obj) const {
|
||||
if (itm_eq_obj && itm_eq_obj->obj_info == obj_info)
|
||||
if (osage_index < itm_eq_obj->osage_blocks.size())
|
||||
return itm_eq_obj->osage_blocks[osage_index];
|
||||
else if (osage_index >= itm_eq_obj->osage_blocks.size()
|
||||
&& osage_index - itm_eq_obj->osage_blocks.size() < itm_eq_obj->cloth_blocks.size())
|
||||
return itm_eq_obj->cloth_blocks[osage_index - itm_eq_obj->osage_blocks.size()];
|
||||
return 0;
|
||||
}
|
||||
|
||||
inline ExOsageBlock* RobOsageTest::get_osage_block(rob_chara_item_equip_object* itm_eq_obj) const {
|
||||
if (itm_eq_obj && itm_eq_obj->obj_info == obj_info && osage_index < itm_eq_obj->osage_blocks.size())
|
||||
return itm_eq_obj->osage_blocks[osage_index];
|
||||
return 0;
|
||||
}
|
||||
|
||||
inline prj::vector<SkinParam::CollisionParam>* RobOsageTest::get_cls_list(ExClothBlock* cls) const {
|
||||
if (cls)
|
||||
return &cls->rob.skin_param_ptr->coli;
|
||||
return 0;
|
||||
}
|
||||
|
||||
inline prj::vector<SkinParam::CollisionParam>* RobOsageTest::get_cls_list(ExOsageBlock* osg) const {
|
||||
if (osg)
|
||||
return &osg->rob.skin_param_ptr->coli;
|
||||
return 0;
|
||||
}
|
||||
|
||||
inline SkinParam::CollisionParam* RobOsageTest::get_cls_param(
|
||||
prj::vector<SkinParam::CollisionParam>* cls_list) const {
|
||||
if (cls_list && collision_index < cls_list->size())
|
||||
return &cls_list->data()[collision_index];
|
||||
return 0;
|
||||
}
|
||||
|
||||
void RobOsageTest::set_node(skin_param_osage_node* skp_osg_node) {
|
||||
if (!skp_osg_node)
|
||||
return;
|
||||
@@ -1446,7 +1626,7 @@ void RobOsageTestDw::Root::Force::Update(bool value) {
|
||||
void RobOsageTestDw::Root::Force::Callback(dw::Widget* data) {
|
||||
dw::Slider* slider = dynamic_cast<dw::Slider*>(data);
|
||||
if (slider)
|
||||
rob_osage_test->root.force = slider->scroll_bar->value;
|
||||
rob_osage_test->root.force = slider->GetValue();
|
||||
}
|
||||
|
||||
RobOsageTestDw::Root::Gain::Gain(dw::Composite* parent) : slider() {
|
||||
@@ -1503,7 +1683,7 @@ void RobOsageTestDw::Root::Gain::Update(bool value) {
|
||||
void RobOsageTestDw::Root::Gain::Callback(dw::Widget* data) {
|
||||
dw::Slider* slider = dynamic_cast<dw::Slider*>(data);
|
||||
if (slider)
|
||||
rob_osage_test->root.gain = slider->scroll_bar->value;
|
||||
rob_osage_test->root.gain = slider->GetValue();
|
||||
}
|
||||
|
||||
RobOsageTestDw::Root::AirRes::AirRes(dw::Composite* parent) : slider() {
|
||||
@@ -1560,7 +1740,7 @@ void RobOsageTestDw::Root::AirRes::Update(bool value) {
|
||||
void RobOsageTestDw::Root::AirRes::Callback(dw::Widget* data) {
|
||||
dw::Slider* slider = dynamic_cast<dw::Slider*>(data);
|
||||
if (slider)
|
||||
rob_osage_test->root.air_res = slider->scroll_bar->value;
|
||||
rob_osage_test->root.air_res = slider->GetValue();
|
||||
}
|
||||
|
||||
RobOsageTestDw::Root::RootYRot::RootYRot(dw::Composite* parent) : slider() {
|
||||
@@ -1618,7 +1798,7 @@ void RobOsageTestDw::Root::RootYRot::Update(bool value) {
|
||||
void RobOsageTestDw::Root::RootYRot::Callback(dw::Widget* data) {
|
||||
dw::Slider* slider = dynamic_cast<dw::Slider*>(data);
|
||||
if (slider)
|
||||
rob_osage_test->root.root_y_rot = slider->scroll_bar->value;
|
||||
rob_osage_test->root.root_y_rot = slider->GetValue();
|
||||
}
|
||||
|
||||
RobOsageTestDw::Root::RootZRot::RootZRot(dw::Composite* parent) : slider() {
|
||||
@@ -1676,7 +1856,7 @@ void RobOsageTestDw::Root::RootZRot::Update(bool value) {
|
||||
void RobOsageTestDw::Root::RootZRot::Callback(dw::Widget* data) {
|
||||
dw::Slider* slider = dynamic_cast<dw::Slider*>(data);
|
||||
if (slider)
|
||||
rob_osage_test->root.root_z_rot = slider->scroll_bar->value;
|
||||
rob_osage_test->root.root_z_rot = slider->GetValue();
|
||||
}
|
||||
|
||||
RobOsageTestDw::Root::Fric::Fric(dw::Composite* parent) : slider() {
|
||||
@@ -1733,7 +1913,7 @@ void RobOsageTestDw::Root::Fric::Update(bool value) {
|
||||
void RobOsageTestDw::Root::Fric::Callback(dw::Widget* data) {
|
||||
dw::Slider* slider = dynamic_cast<dw::Slider*>(data);
|
||||
if (slider)
|
||||
rob_osage_test->root.fric = slider->scroll_bar->value;
|
||||
rob_osage_test->root.fric = slider->GetValue();
|
||||
}
|
||||
|
||||
RobOsageTestDw::Root::WindAfc::WindAfc(dw::Composite* parent) : slider() {
|
||||
@@ -1790,7 +1970,7 @@ void RobOsageTestDw::Root::WindAfc::Update(bool value) {
|
||||
void RobOsageTestDw::Root::WindAfc::Callback(dw::Widget* data) {
|
||||
dw::Slider* slider = dynamic_cast<dw::Slider*>(data);
|
||||
if (slider)
|
||||
rob_osage_test->root.wind_afc = slider->scroll_bar->value;
|
||||
rob_osage_test->root.wind_afc = slider->GetValue();
|
||||
}
|
||||
|
||||
RobOsageTestDw::Root::ColiType::ColiType(dw::Composite* parent) : list_box() {
|
||||
@@ -1906,7 +2086,7 @@ void RobOsageTestDw::Root::InitYRot::Update(bool value) {
|
||||
void RobOsageTestDw::Root::InitYRot::Callback(dw::Widget* data) {
|
||||
dw::Slider* slider = dynamic_cast<dw::Slider*>(data);
|
||||
if (slider)
|
||||
rob_osage_test->root.init_y_rot = slider->scroll_bar->value;
|
||||
rob_osage_test->root.init_y_rot = slider->GetValue();
|
||||
}
|
||||
|
||||
RobOsageTestDw::Root::InitZRot::InitZRot(dw::Composite* parent) : slider() {
|
||||
@@ -1964,7 +2144,7 @@ void RobOsageTestDw::Root::InitZRot::Update(bool value) {
|
||||
void RobOsageTestDw::Root::InitZRot::Callback(dw::Widget* data) {
|
||||
dw::Slider* slider = dynamic_cast<dw::Slider*>(data);
|
||||
if (slider)
|
||||
rob_osage_test->root.init_z_rot = slider->scroll_bar->value;
|
||||
rob_osage_test->root.init_z_rot = slider->GetValue();
|
||||
}
|
||||
|
||||
void RobOsageTestDw::Root::Init(dw::Composite* parent) {
|
||||
@@ -2114,7 +2294,7 @@ void RobOsageTestDw::Node::CollisionRadius::Callback(dw::Widget* data) {
|
||||
rob_chara_item_equip_object* itm_eq_obj = rob_osage_test->get_item_equip_object();
|
||||
ExOsageBlock* osg = rob_osage_test->get_osage_block(itm_eq_obj);
|
||||
if (osg) {
|
||||
float_t value = slider->scroll_bar->value;
|
||||
float_t value = slider->GetValue();
|
||||
RobOsageNode* i_begin = osg->rob.nodes.data() + 1;
|
||||
RobOsageNode* i_end = osg->rob.nodes.data() + osg->rob.nodes.size();
|
||||
for (RobOsageNode* i = i_begin; i != i_end; i++)
|
||||
@@ -2213,7 +2393,7 @@ void RobOsageTestDw::Node::Hinge::YMinCallback(dw::Widget* data) {
|
||||
rob_chara_item_equip_object* itm_eq_obj = rob_osage_test->get_item_equip_object();
|
||||
ExOsageBlock* osg = rob_osage_test->get_osage_block(itm_eq_obj);
|
||||
if (osg) {
|
||||
float_t value = slider->scroll_bar->value * DEG_TO_RAD_FLOAT;
|
||||
float_t value = slider->GetValue() * DEG_TO_RAD_FLOAT;
|
||||
RobOsageNode* i_begin = osg->rob.nodes.data() + 1;
|
||||
RobOsageNode* i_end = osg->rob.nodes.data() + osg->rob.nodes.size();
|
||||
for (RobOsageNode* i = i_begin; i != i_end; i++)
|
||||
@@ -2228,7 +2408,7 @@ void RobOsageTestDw::Node::Hinge::YMaxCallback(dw::Widget* data) {
|
||||
rob_chara_item_equip_object* itm_eq_obj = rob_osage_test->get_item_equip_object();
|
||||
ExOsageBlock* osg = rob_osage_test->get_osage_block(itm_eq_obj);
|
||||
if (osg) {
|
||||
float_t value = slider->scroll_bar->value * DEG_TO_RAD_FLOAT;
|
||||
float_t value = slider->GetValue() * DEG_TO_RAD_FLOAT;
|
||||
RobOsageNode* i_begin = osg->rob.nodes.data() + 1;
|
||||
RobOsageNode* i_end = osg->rob.nodes.data() + osg->rob.nodes.size();
|
||||
for (RobOsageNode* i = i_begin; i != i_end; i++)
|
||||
@@ -2243,7 +2423,7 @@ void RobOsageTestDw::Node::Hinge::ZMinCallback(dw::Widget* data) {
|
||||
rob_chara_item_equip_object* itm_eq_obj = rob_osage_test->get_item_equip_object();
|
||||
ExOsageBlock* osg = rob_osage_test->get_osage_block(itm_eq_obj);
|
||||
if (osg) {
|
||||
float_t value = slider->scroll_bar->value * DEG_TO_RAD_FLOAT;
|
||||
float_t value = slider->GetValue() * DEG_TO_RAD_FLOAT;
|
||||
RobOsageNode* i_begin = osg->rob.nodes.data() + 1;
|
||||
RobOsageNode* i_end = osg->rob.nodes.data() + osg->rob.nodes.size();
|
||||
for (RobOsageNode* i = i_begin; i != i_end; i++)
|
||||
@@ -2258,7 +2438,7 @@ void RobOsageTestDw::Node::Hinge::ZMaxCallback(dw::Widget* data) {
|
||||
rob_chara_item_equip_object* itm_eq_obj = rob_osage_test->get_item_equip_object();
|
||||
ExOsageBlock* osg = rob_osage_test->get_osage_block(itm_eq_obj);
|
||||
if (osg) {
|
||||
float_t value = slider->scroll_bar->value * DEG_TO_RAD_FLOAT;
|
||||
float_t value = slider->GetValue() * DEG_TO_RAD_FLOAT;
|
||||
RobOsageNode* i_begin = osg->rob.nodes.data() + 1;
|
||||
RobOsageNode* i_end = osg->rob.nodes.data() + osg->rob.nodes.size();
|
||||
for (RobOsageNode* i = i_begin; i != i_end; i++)
|
||||
@@ -2317,7 +2497,7 @@ void RobOsageTestDw::Node::InertialCancel::Callback(dw::Widget* data) {
|
||||
rob_chara_item_equip_object* itm_eq_obj = rob_osage_test->get_item_equip_object();
|
||||
ExOsageBlock* osg = rob_osage_test->get_osage_block(itm_eq_obj);
|
||||
if (osg) {
|
||||
float_t value = slider->scroll_bar->value;
|
||||
float_t value = slider->GetValue();
|
||||
RobOsageNode* i_begin = osg->rob.nodes.data() + 1;
|
||||
RobOsageNode* i_end = osg->rob.nodes.data() + osg->rob.nodes.size();
|
||||
for (RobOsageNode* i = i_begin; i != i_end; i++)
|
||||
@@ -2376,7 +2556,7 @@ void RobOsageTestDw::Node::Weight::Callback(dw::Widget* data) {
|
||||
rob_chara_item_equip_object* itm_eq_obj = rob_osage_test->get_item_equip_object();
|
||||
ExOsageBlock* osg = rob_osage_test->get_osage_block(itm_eq_obj);
|
||||
if (osg) {
|
||||
float_t value = slider->scroll_bar->value;
|
||||
float_t value = slider->GetValue();
|
||||
RobOsageNode* i_begin = osg->rob.nodes.data() + 1;
|
||||
RobOsageNode* i_end = osg->rob.nodes.data() + osg->rob.nodes.size();
|
||||
for (RobOsageNode* i = i_begin; i != i_end; i++)
|
||||
@@ -2685,7 +2865,7 @@ void RobOsageTestDw::ColliElement::BonePosXCallback(dw::Widget* data) {
|
||||
if (cls_param) {
|
||||
cls_param->type = (SkinParam::CollisionType)(int32_t)rob_osage_test_dw->
|
||||
colli_element.type_list_box->list->selected_item;
|
||||
cls_param->pos[slider->callback_data.i32].x = slider->scroll_bar->value;
|
||||
cls_param->pos[slider->callback_data.i32].x = slider->GetValue();
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -2697,7 +2877,7 @@ void RobOsageTestDw::ColliElement::BonePosYCallback(dw::Widget* data) {
|
||||
if (cls_param) {
|
||||
cls_param->type = (SkinParam::CollisionType)(int32_t)rob_osage_test_dw->
|
||||
colli_element.type_list_box->list->selected_item;
|
||||
cls_param->pos[slider->callback_data.i32].y = slider->scroll_bar->value;
|
||||
cls_param->pos[slider->callback_data.i32].y = slider->GetValue();
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -2709,7 +2889,7 @@ void RobOsageTestDw::ColliElement::BonePosZCallback(dw::Widget* data) {
|
||||
if (cls_param) {
|
||||
cls_param->type = (SkinParam::CollisionType)(int32_t)rob_osage_test_dw->
|
||||
colli_element.type_list_box->list->selected_item;
|
||||
cls_param->pos[slider->callback_data.i32].z = slider->scroll_bar->value;
|
||||
cls_param->pos[slider->callback_data.i32].z = slider->GetValue();
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -2761,7 +2941,7 @@ void RobOsageTestDw::ColliElement::RadiusCallback(dw::Widget* data) {
|
||||
if (cls_param) {
|
||||
cls_param->type = (SkinParam::CollisionType)(int32_t)rob_osage_test_dw->
|
||||
colli_element.type_list_box->list->selected_item;
|
||||
cls_param->radius = slider->scroll_bar->value;
|
||||
cls_param->radius = slider->GetValue();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -73,6 +73,8 @@ public:
|
||||
|
||||
int32_t chara_id;
|
||||
int32_t load_chara_id;
|
||||
chara_index chara_index;
|
||||
int32_t cos_id;
|
||||
::item_id item_id;
|
||||
object_info obj_info;
|
||||
size_t osage_index;
|
||||
@@ -102,21 +104,25 @@ public:
|
||||
virtual void basic() override;
|
||||
|
||||
void disp_coli();
|
||||
void disp_coli_cls_list(ExNodeBlock* ex_node, SkinParam::CollisionParam* selected_cls_param);
|
||||
void disp_line();
|
||||
void disp_line_cls_param(const mat4& transform, const vec3& pos);
|
||||
|
||||
ExClothBlock* get_cloth_block(rob_chara_item_equip_object* itm_eq_obj) const;
|
||||
rob_chara_item_equip_object* get_item_equip_object() const;
|
||||
ExOsageBlock* get_osage_block(rob_chara_item_equip_object* itm_eq_obj) const;
|
||||
prj::vector<SkinParam::CollisionParam>* get_cls_list(ExClothBlock* cls) const;
|
||||
prj::vector<SkinParam::CollisionParam>* get_cls_list(ExOsageBlock* osg) const;
|
||||
prj::vector<SkinParam::CollisionParam>* get_cls_list(ExNodeBlock* cls) const;
|
||||
SkinParam::CollisionParam* get_cls_param(prj::vector<SkinParam::CollisionParam>* cls_list) const;
|
||||
rob_chara_item_equip_object* get_item_equip_object() const;
|
||||
ExNodeBlock* get_node_block(rob_chara_item_equip_object* itm_eq_obj) const;
|
||||
ExOsageBlock* get_osage_block(rob_chara_item_equip_object* itm_eq_obj) const;
|
||||
void set_node(skin_param_osage_node* skp_osg_node);
|
||||
void set_root(skin_param* skp);
|
||||
|
||||
inline prj::vector<SkinParam::CollisionParam>* get_cls_list() const {
|
||||
rob_chara_item_equip_object* itm_eq_obj = get_item_equip_object();
|
||||
ExOsageBlock* osg = get_osage_block(itm_eq_obj);
|
||||
return osg ? get_cls_list(osg) : get_cls_list(get_cloth_block(itm_eq_obj));
|
||||
if (!itm_eq_obj)
|
||||
return 0;
|
||||
|
||||
return get_cls_list(get_node_block(itm_eq_obj));
|
||||
}
|
||||
|
||||
inline SkinParam::CollisionParam* get_cls_param() const {
|
||||
@@ -125,14 +131,14 @@ public:
|
||||
|
||||
inline skin_param* get_skin_param() const {
|
||||
rob_chara_item_equip_object* itm_eq_obj = get_item_equip_object();
|
||||
ExOsageBlock* osg = get_osage_block(itm_eq_obj);
|
||||
if (osg)
|
||||
return osg->rob.skin_param_ptr;
|
||||
else {
|
||||
ExClothBlock* cls = get_cloth_block(itm_eq_obj);
|
||||
if (cls)
|
||||
return cls->rob.skin_param_ptr;
|
||||
}
|
||||
ExNodeBlock* ex_node = get_node_block(itm_eq_obj);
|
||||
if (!ex_node)
|
||||
return 0;
|
||||
|
||||
if (ex_node->type == EX_OSAGE)
|
||||
return ((ExOsageBlock*)ex_node)->rob.skin_param_ptr;
|
||||
else if (ex_node->type == EX_CLOTH)
|
||||
return ((ExClothBlock*)ex_node)->rob.skin_param_ptr;
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
@@ -812,6 +812,10 @@ namespace dw {
|
||||
SelectionListener::CallbackData sub_1402E5380(const Widget::MouseCallbackData& mouse_callback_data);
|
||||
|
||||
static void sub_1402E6CC0(SelectionListener::CallbackData callback_data);
|
||||
|
||||
inline float_t GetValue() const {
|
||||
return value;
|
||||
}
|
||||
};
|
||||
|
||||
static_assert(sizeof(dw::ScrollBar) == 0x168, "\"dw::ScrollBar\" struct should have a size of 0x168");
|
||||
@@ -859,6 +863,10 @@ namespace dw {
|
||||
float_t pos_x = 0.0f, float_t pos_y = 0.0f,
|
||||
float_t width = 128.0f, float_t height = 20.0f, const char* text = "slider");
|
||||
|
||||
inline float_t GetValue() const {
|
||||
return scroll_bar->GetValue();
|
||||
}
|
||||
|
||||
inline void SetGrab(float_t value) {
|
||||
scroll_bar->SetGrab(value);
|
||||
}
|
||||
|
||||
+50
-4
@@ -880,7 +880,7 @@ static_assert(sizeof(rob_chara_pv_data) == 0xC4, "\"rob_chara_pv_data\" struct s
|
||||
|
||||
struct rob_chara_item_equip_object;
|
||||
|
||||
struct ExNodeBlock;
|
||||
class ExNodeBlock;
|
||||
|
||||
struct ExNodeBlock_vtbl {
|
||||
ExNodeBlock* (FASTCALL* Dispose)(ExNodeBlock* _this, uint8_t);
|
||||
@@ -899,7 +899,8 @@ struct ExNodeBlock_vtbl {
|
||||
|
||||
static_assert(sizeof(ExNodeBlock_vtbl) == 0x60, "\"ExNodeBlock_vtbl\" struct should have a size of 0x60");
|
||||
|
||||
struct ExNodeBlock {
|
||||
class ExNodeBlock {
|
||||
public:
|
||||
ExNodeBlock_vtbl* __vftable;
|
||||
bone_node* bone_node_ptr;
|
||||
ExNodeType type;
|
||||
@@ -1169,7 +1170,28 @@ struct struc_341 {
|
||||
|
||||
static_assert(sizeof(struc_341) == 0x18, "\"struc_341\" struct should have a size of 0x18");
|
||||
|
||||
struct CLOTH {
|
||||
class CLOTH;
|
||||
|
||||
struct CLOTH_vtbl {
|
||||
CLOTH* (FASTCALL* Dispose)(CLOTH* _this, uint8_t);
|
||||
void(FASTCALL* Field_8)(CLOTH* _this);
|
||||
void(FASTCALL* Field_10)(CLOTH* _this);
|
||||
void(FASTCALL* Field_18)(CLOTH* _this, int32_t stage, bool disable_external_force);
|
||||
void(FASTCALL* Field_20)(CLOTH* _this);
|
||||
void(FASTCALL* SetOsagePlayData)(CLOTH* _this);
|
||||
void(FASTCALL* Disp)(CLOTH* _this);
|
||||
void(FASTCALL* Reset)(CLOTH* _this);
|
||||
void(FASTCALL* Field_40)(CLOTH* _this);
|
||||
void(FASTCALL* Field_48)(CLOTH* _this);
|
||||
void(FASTCALL* Field_50)(CLOTH* _this);
|
||||
void(FASTCALL* Field_58)(CLOTH* _this);
|
||||
};
|
||||
|
||||
static_assert(sizeof(CLOTH_vtbl) == 0x60, "\"CLOTH_vtbl\" struct should have a size of 0x60");
|
||||
|
||||
class CLOTH {
|
||||
public:
|
||||
CLOTH_vtbl* __vftable;
|
||||
int32_t field_8;
|
||||
size_t root_count;
|
||||
size_t nodes_count;
|
||||
@@ -1187,6 +1209,8 @@ struct CLOTH {
|
||||
mat4* mats;
|
||||
};
|
||||
|
||||
static_assert(sizeof(CLOTH) == 0x1D40, "\"CLOTH\" struct should have a size of 0x1D40");
|
||||
|
||||
struct RobClothRoot {
|
||||
vec3 pos;
|
||||
vec3 normal;
|
||||
@@ -1200,11 +1224,16 @@ struct RobClothRoot {
|
||||
mat4 field_118;
|
||||
};
|
||||
|
||||
static_assert(sizeof(RobClothRoot) == 0x158, "\"RobClothRoot\" struct should have a size of 0x158");
|
||||
|
||||
struct RobClothSubMeshArray {
|
||||
obj_sub_mesh arr[4];
|
||||
};
|
||||
|
||||
struct RobCloth : public CLOTH {
|
||||
static_assert(sizeof(RobClothSubMeshArray) == 0x1C0, "\"RobClothSubMeshArray\" struct should have a size of 0x1C0");
|
||||
|
||||
class RobCloth : public CLOTH {
|
||||
public:
|
||||
prj::vector<RobClothRoot> root;
|
||||
rob_chara_item_equip_object* itm_eq_obj;
|
||||
struct obj_skin_block_cloth_root* cls_root;
|
||||
@@ -1213,12 +1242,19 @@ struct RobCloth : public CLOTH {
|
||||
bool osage_reset;
|
||||
obj_mesh mesh[2];
|
||||
RobClothSubMeshArray submesh[2];
|
||||
obj_axis_aligned_bounding_box axis_aligned_bounding_box;
|
||||
#if SHARED_OBJECT_BUFFER
|
||||
obj_mesh_vertex_buffer_aft vertex_buffer[2];
|
||||
#else
|
||||
obj_mesh_vertex_buffer vertex_buffer[2];
|
||||
#endif
|
||||
obj_mesh_index_buffer index_buffer[2];
|
||||
prj::map<prj::pair<int32_t, int32_t>, prj::list<RobOsageNodeResetData>> motion_reset_data;
|
||||
prj::list<RobOsageNodeResetData>* reset_data_list;
|
||||
};
|
||||
|
||||
static_assert(sizeof(RobCloth) == 0x23C0, "\"RobCloth\" struct should have a size of 0x23C0");
|
||||
|
||||
class ExClothBlock : public ExNodeBlock {
|
||||
public:
|
||||
RobCloth rob;
|
||||
@@ -1227,17 +1263,23 @@ public:
|
||||
size_t index;
|
||||
};
|
||||
|
||||
static_assert(sizeof(ExClothBlock) == 0x2438, "\"ExClothBlock\" struct should have a size of 0x2438");
|
||||
|
||||
struct skin_param_file_data {
|
||||
skin_param skin_param;
|
||||
prj::vector<RobOsageNodeData> nodes_data;
|
||||
bool field_88;
|
||||
};
|
||||
|
||||
static_assert(sizeof(skin_param_file_data) == 0x90, "\"skin_param_file_data\" struct should have a size of 0x90");
|
||||
|
||||
struct osage_setting_osg_cat {
|
||||
rob_osage_parts parts;
|
||||
size_t exf;
|
||||
};
|
||||
|
||||
static_assert(sizeof(osage_setting_osg_cat) == 0x10, "\"osage_setting_osg_cat\" struct should have a size of 0x10");
|
||||
|
||||
struct RobOsage {
|
||||
skin_param* skin_param_ptr;
|
||||
bone_node_expression_data exp_data;
|
||||
@@ -1278,6 +1320,8 @@ struct RobOsage {
|
||||
void SetRot(float_t rot_y, float_t rot_z);
|
||||
};
|
||||
|
||||
static_assert(sizeof(RobOsage) == 0x1F88, "\"RobOsage\" struct should have a size of 0x1F88");
|
||||
|
||||
class ExOsageBlock : public ExNodeBlock {
|
||||
public:
|
||||
size_t index;
|
||||
@@ -1287,6 +1331,8 @@ public:
|
||||
float_t step;
|
||||
};
|
||||
|
||||
static_assert(sizeof(ExOsageBlock) == 0x2000, "\"ExOsageBlock\" struct should have a size of 0x2000");
|
||||
|
||||
struct rob_chara_item_equip;
|
||||
|
||||
struct rob_chara_item_equip_object {
|
||||
|
||||
Reference in New Issue
Block a user