RobOsageTest: Implemented Line display

This commit is contained in:
korenkonder
2024-07-15 10:51:58 +03:00
parent fe8422b0aa
commit 270dcd00c7
2 changed files with 303 additions and 122 deletions
+283 -108
View File
@@ -9,6 +9,7 @@
#include "../../CRE/data.hpp"
#include "../../CRE/render_context.hpp"
#include "../../CRE/resolution_mode.hpp"
#include "../../CRE/sprite.hpp"
#include "../../KKdLib/io/file_stream.hpp"
#include "../../KKdLib/io/path.hpp"
#include "../../KKdLib/prj/algorithm.hpp"
@@ -408,7 +409,7 @@ public:
virtual void Hide() override;
};
const char* collision_type_name_list[] = {
static const char* collision_type_name_list[] = {
"END",
"BALL",
"CYLINDER",
@@ -426,6 +427,8 @@ 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;
@@ -446,10 +449,21 @@ bool RobOsageTest::init() {
}
bool RobOsageTest::ctrl() {
if (chara_id != -1) {
rob_chara* rob_chr = rob_chara_array_get(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();
@@ -459,7 +473,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(chara_id);
rob_chara* rob_chr = rob_chara_array_get(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;
@@ -469,7 +490,7 @@ bool RobOsageTest::ctrl() {
for (int32_t i = 0; i < ITEM_MAX; i++) {
rob_chara_item_equip_object* itm_eq_obj = rob_itm_equip->get_item_equip_object((::item_id)i);
obj* obj = objset_info_storage_get_obj(itm_eq_obj->obj_info);
::obj* obj = objset_info_storage_get_obj(itm_eq_obj->obj_info);
if (!obj || !itm_eq_obj->osage_blocks.size() && !itm_eq_obj->cloth_blocks.size())
continue;
@@ -480,7 +501,7 @@ bool RobOsageTest::ctrl() {
"ext_skp_%s.txt", aft_obj_db->get_object_name(itm_eq_obj->obj_info)));
std::string path("ram/skin_param/");
path.assign(buf);
path.append(buf);
key_val kv;
if (path_check_file_exists(path.c_str()))
@@ -624,7 +645,7 @@ bool RobOsageTest::ctrl() {
for (int32_t i = 0; i < ITEM_MAX; i++) {
rob_chara_item_equip_object* itm_eq_obj = rob_itm_equip->get_item_equip_object((::item_id)i);
obj* obj = objset_info_storage_get_obj(itm_eq_obj->obj_info);
::obj* obj = objset_info_storage_get_obj(itm_eq_obj->obj_info);
if (!obj || !itm_eq_obj->osage_blocks.size() && !itm_eq_obj->cloth_blocks.size())
continue;
@@ -919,40 +940,98 @@ 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;
rctx_ptr->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_transform_point(&itm_eq_obj->item_equip->mat, &j->pos, &pos);
mat4 mat;
mat4_translate(&pos, &mat);
rctx_ptr->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;
std::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;
@@ -969,20 +1048,21 @@ 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;
etc.data.capsule.slices = 16;
etc.data.capsule.stacks = 16;
etc.data.capsule.wire = false;
mat4_transform_point(&transform[i.node_idx[0]], &i.pos[0], &etc.data.capsule.pos[0]);
mat4_transform_point(&transform[i.node_idx[1]], &i.pos[1], &etc.data.capsule.pos[1]);
rctx_ptr->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;
@@ -1008,7 +1088,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;
@@ -1042,7 +1122,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;
@@ -1056,45 +1136,6 @@ void RobOsageTest::disp_coli() {
rctx_ptr->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;
rctx_ptr->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_transform_point(&itm_eq_obj->item_equip->mat, &i->pos, &pos);
mat4 mat;
mat4_translate(&pos, &mat);
rctx_ptr->disp_manager->entry_obj_etc(&mat, &etc);
}
}
}
@@ -1102,6 +1143,131 @@ 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_scale_rot(i->rob.nodes.data()[0].bone_node_mat, 0.05f, &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_scale_rot(i->rob.end_node.bone_node_mat, 0.05f, &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);
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_scale_rot(&transform, 0.1f, &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 {
@@ -1111,6 +1277,24 @@ inline ExClothBlock* RobOsageTest::get_cloth_block(rob_chara_item_equip_object*
return 0;
}
inline std::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(
std::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;
@@ -1121,31 +1305,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 std::vector<SkinParam::CollisionParam>* RobOsageTest::get_cls_list(ExClothBlock* cls) const {
if (cls)
return &cls->rob.skin_param_ptr->coli;
return 0;
}
inline std::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(
std::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;
@@ -1395,7 +1570,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() {
@@ -1452,7 +1627,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() {
@@ -1509,7 +1684,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() {
@@ -1567,7 +1742,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() {
@@ -1625,7 +1800,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() {
@@ -1682,7 +1857,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() {
@@ -1739,7 +1914,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() {
@@ -1855,7 +2030,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() {
@@ -1913,7 +2088,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) {
@@ -2063,7 +2238,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++)
@@ -2162,7 +2337,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++)
@@ -2177,7 +2352,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++)
@@ -2192,7 +2367,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++)
@@ -2207,7 +2382,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++)
@@ -2266,7 +2441,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++)
@@ -2325,7 +2500,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++)
@@ -2640,7 +2815,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();
}
}
}
@@ -2652,7 +2827,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();
}
}
}
@@ -2664,7 +2839,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();
}
}
}
@@ -2716,7 +2891,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();
}
}
}
+20 -14
View File
@@ -72,6 +72,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;
@@ -101,21 +103,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;
std::vector<SkinParam::CollisionParam>* get_cls_list(ExClothBlock* cls) const;
std::vector<SkinParam::CollisionParam>* get_cls_list(ExOsageBlock* osg) const;
std::vector<SkinParam::CollisionParam>* get_cls_list(ExNodeBlock* cls) const;
SkinParam::CollisionParam* get_cls_param(std::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 std::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 {
@@ -124,14 +130,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;
}