mirror of
https://github.com/korenkonder/ReDIVA.git
synced 2026-10-08 22:50:08 +03:00
Rob: Adapted new findings
This commit is contained in:
@@ -1482,7 +1482,7 @@ const float_t* RobCloth::SetOsagePlayDataInit(const float_t* opdi_data) {
|
||||
i->delta_pos.x = *opdi_data++;
|
||||
i->delta_pos.y = *opdi_data++;
|
||||
i->delta_pos.z = *opdi_data++;
|
||||
i->prev_trans = i->pos;
|
||||
i->prev_pos = i->pos;
|
||||
}
|
||||
return opdi_data;
|
||||
}
|
||||
@@ -3296,7 +3296,7 @@ static void sub_1402187D0(RobCloth* rob_cls, bool a2) {
|
||||
v37.y -= osage_gravity;
|
||||
node->delta_pos += v37;
|
||||
|
||||
node->prev_trans = node->pos;
|
||||
node->prev_pos = node->pos;
|
||||
node->pos += node->delta_pos;
|
||||
}
|
||||
force *= rob_cls->skin_param_ptr->force_gain;
|
||||
@@ -3328,7 +3328,7 @@ static void sub_140219940(RobCloth* rob_cls) {
|
||||
mat4_transform_vector(&m, &root.normal, &root_node.normal);
|
||||
mat4_transform_vector(&m, (vec3*)&root.tangent, &root_node.tangent);
|
||||
root_node.tangent_sign = root.tangent.w;
|
||||
root_node.prev_trans = root_node.pos;
|
||||
root_node.prev_pos = root_node.pos;
|
||||
|
||||
mat4_mul_translate(&m, &root_node.fixed_pos, &m);
|
||||
root.field_D8 = m;
|
||||
@@ -3491,13 +3491,13 @@ void sub_14021AA60(RobCloth* rob_cls, float_t step, bool a3) {
|
||||
for (ssize_t j = 0; j < root_count; j++, node++) {
|
||||
float_t fric = (1.0f - rob_cls->field_44) * rob_cls->skin_param_ptr->friction;
|
||||
if (step != 1.0f) {
|
||||
vec3 delta_pos = node->pos - node->prev_trans;
|
||||
vec3 delta_pos = node->pos - node->prev_pos;
|
||||
|
||||
float_t trans_length = vec3::length(delta_pos);
|
||||
if (trans_length * step > 0.0f && trans_length != 0.0f)
|
||||
delta_pos *= 1.0f / trans_length;
|
||||
|
||||
node->pos = node->prev_trans + delta_pos * (trans_length * step);
|
||||
node->pos = node->prev_pos + delta_pos * (trans_length * step);
|
||||
}
|
||||
sub_140482F30(&node[0].pos, &node[-root_count].pos, node[0].dist_top);
|
||||
|
||||
@@ -3528,7 +3528,7 @@ void sub_14021AA60(RobCloth* rob_cls, float_t step, bool a3) {
|
||||
if (v39)
|
||||
node->delta_pos *= fric;
|
||||
|
||||
node->delta_pos = (node->pos - node->prev_trans) * v10;
|
||||
node->delta_pos = (node->pos - node->prev_pos) * v10;
|
||||
|
||||
if (!a3) {
|
||||
mat4& v49 = rob_cls->root.data()[j].field_118;
|
||||
@@ -3571,7 +3571,7 @@ static void sub_14021D480(RobCloth* rob_cls) {
|
||||
node->pos.y = floor_height;
|
||||
|
||||
node->delta_pos = 0.0f;
|
||||
node->prev_trans = node->pos;
|
||||
node->prev_pos = node->pos;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -4052,7 +4052,7 @@ static void sub_14047D620(RobOsage* rob_osg, float_t step) {
|
||||
}
|
||||
|
||||
if (coli_type != SkinParam::RootCollisionTypeEnd
|
||||
&& (coli_type != SkinParam::RootCollisionTypeBall || i != i_begin)) {
|
||||
&& (coli_type != SkinParam::RootCollisionTypeCapsule || i != i_begin)) {
|
||||
float_t v20 = (float_t)(
|
||||
OsageCollision::osage_capsule_cls(coli_ring, i[0].pos, i[-1].pos, data->skp_osg_node.coli_r)
|
||||
+ OsageCollision::osage_capsule_cls(coli, i[0].pos, i[-1].pos, data->skp_osg_node.coli_r));
|
||||
|
||||
+2
-1
@@ -1251,6 +1251,7 @@ TaskRobManager* task_rob_manager;
|
||||
|
||||
static int32_t opd_chara_data_counter = 0;
|
||||
static int32_t opd_maker_counter = 0;
|
||||
static int32_t osage_test_no_pause = 0;
|
||||
static int32_t pv_osage_manager_counter = 0;
|
||||
static int32_t rob_thread_parent_counter = 0;
|
||||
|
||||
@@ -2673,7 +2674,7 @@ static void rob_chara_item_equip_object_ctrl(rob_chara_item_equip_object* itm_eq
|
||||
}
|
||||
|
||||
static void rob_chara_item_equip_ctrl(rob_chara_item_equip* rob_itm_equip) {
|
||||
if (!rob_itm_equip->disable_update)
|
||||
if (!osage_test_no_pause && !rob_itm_equip->disable_update)
|
||||
for (int32_t i = rob_itm_equip->first_item_equip_object; i < rob_itm_equip->max_item_equip_object; i++)
|
||||
rob_chara_item_equip_object_ctrl(&rob_itm_equip->item_equip_object[i]);
|
||||
}
|
||||
|
||||
+5
-5
@@ -843,10 +843,10 @@ namespace SkinParam {
|
||||
};
|
||||
|
||||
enum RootCollisionType {
|
||||
RootCollisionTypeEnd = 0x00,
|
||||
RootCollisionTypeBall = 0x01,
|
||||
RootCollisionTypeCapsule = 0x02,
|
||||
RootCollisionTypeMax = 0x03,
|
||||
RootCollisionTypeEnd = 0x00,
|
||||
RootCollisionTypeCapsule = 0x01,
|
||||
RootCollisionTypeCapsuleWithRoot = 0x02,
|
||||
RootCollisionTypeMax = 0x03,
|
||||
};
|
||||
}
|
||||
|
||||
@@ -1805,7 +1805,7 @@ struct CLOTHNode {
|
||||
uint32_t flags;
|
||||
vec3 pos;
|
||||
vec3 fixed_pos;
|
||||
vec3 prev_trans;
|
||||
vec3 prev_pos;
|
||||
vec3 delta_pos;
|
||||
vec3 normal;
|
||||
vec3 tangent;
|
||||
|
||||
@@ -1953,7 +1953,7 @@ void RobOsageTestDw::Root::ColiType::Update(bool value) {
|
||||
|
||||
list_box = new dw::ListBox(comp, dw::MULTISELECT);
|
||||
list_box->AddItem("coli_type: End");
|
||||
list_box->AddItem("coli_type: Ball");
|
||||
list_box->AddItem("coli_type: Capsule");
|
||||
list_box->AddItem("coli_type: Capsule(+root)");
|
||||
list_box->SetItemIndex(rob_osage_test->root.coli_type);
|
||||
list_box->AddSelectionListener(new dw::SelectionListenerOnHook(
|
||||
|
||||
Reference in New Issue
Block a user