Skip to content

Commit

Permalink
Fix bone name overrides in unpacked prefabs. Mitigate finger end bone…
Browse files Browse the repository at this point in the history
…s being selected.
  • Loading branch information
lyuma committed Jan 21, 2024
1 parent a2d3aa5 commit 4f4f62c
Show file tree
Hide file tree
Showing 2 changed files with 23 additions and 6 deletions.
20 changes: 16 additions & 4 deletions bone_map_editor_plugin.gd
Original file line number Diff line number Diff line change
Expand Up @@ -428,7 +428,10 @@ static func auto_mapping_process_dictionary(skeleton: Skeleton3D, log_debug_func
bone_map_dict[skeleton.get_bone_name(search_path[1])] = left_fingers_map[i][1]
named_finger_is_found = true
elif search_path.size() >= 3:
search_path = search_path.slice(-3) # Eliminate the possibility of carpal bone.
if len(skeleton.get_bone_name(search_path[-1])) > len(skeleton.get_bone_name(search_path[-2])) or skeleton.get_bone_name(search_path[-2]).to_lower().contains("distal"):
search_path = search_path.slice(-4) # Eliminate the possibility of carpal bone.
else:
search_path = search_path.slice(-3) # Eliminate the possibility of carpal bone.
bone_map_dict[skeleton.get_bone_name(search_path[0])] = left_fingers_map[i][0]
bone_map_dict[skeleton.get_bone_name(search_path[1])] = left_fingers_map[i][1]
bone_map_dict[skeleton.get_bone_name(search_path[2])] = left_fingers_map[i][2]
Expand Down Expand Up @@ -469,7 +472,10 @@ static func auto_mapping_process_dictionary(skeleton: Skeleton3D, log_debug_func
bone_map_dict[skeleton.get_bone_name(search_path[0])] = left_fingers_map[i][0]
bone_map_dict[skeleton.get_bone_name(search_path[1])] = left_fingers_map[i][1]
elif search_path.size() >= 3:
search_path = search_path.slice(-3) # Eliminate the possibility of carpal bone.
if len(skeleton.get_bone_name(search_path[-1])) > len(skeleton.get_bone_name(search_path[-2])) or skeleton.get_bone_name(search_path[-2]).to_lower().contains("distal"):
search_path = search_path.slice(-4) # Eliminate the possibility of carpal bone.
else:
search_path = search_path.slice(-3) # Eliminate the possibility of carpal bone.
bone_map_dict[skeleton.get_bone_name(search_path[0])] = left_fingers_map[i][0]
bone_map_dict[skeleton.get_bone_name(search_path[1])] = left_fingers_map[i][1]
bone_map_dict[skeleton.get_bone_name(search_path[2])] = left_fingers_map[i][2]
Expand Down Expand Up @@ -514,7 +520,10 @@ static func auto_mapping_process_dictionary(skeleton: Skeleton3D, log_debug_func
bone_map_dict[skeleton.get_bone_name(search_path[1])] = right_fingers_map[i][1]
named_finger_is_found = true
elif search_path.size() >= 3:
search_path = search_path.slice(-3) # Eliminate the possibility of carpal bone.
if len(skeleton.get_bone_name(search_path[-1])) > len(skeleton.get_bone_name(search_path[-2])) or skeleton.get_bone_name(search_path[-2]).to_lower().contains("distal"):
search_path = search_path.slice(-4) # Eliminate the possibility of carpal bone.
else:
search_path = search_path.slice(-3) # Eliminate the possibility of carpal bone.
bone_map_dict[skeleton.get_bone_name(search_path[0])] = right_fingers_map[i][0]
bone_map_dict[skeleton.get_bone_name(search_path[1])] = right_fingers_map[i][1]
bone_map_dict[skeleton.get_bone_name(search_path[2])] = right_fingers_map[i][2]
Expand Down Expand Up @@ -556,7 +565,10 @@ static func auto_mapping_process_dictionary(skeleton: Skeleton3D, log_debug_func
bone_map_dict[skeleton.get_bone_name(search_path[0])] = right_fingers_map[i][0]
bone_map_dict[skeleton.get_bone_name(search_path[1])] = right_fingers_map[i][1]
elif search_path.size() >= 3:
search_path = search_path.slice(-3) # Eliminate the possibility of carpal bone.
if len(skeleton.get_bone_name(search_path[-1])) > len(skeleton.get_bone_name(search_path[-2])) or skeleton.get_bone_name(search_path[-2]).to_lower().contains("distal"):
search_path = search_path.slice(-4) # Eliminate the possibility of carpal bone.
else:
search_path = search_path.slice(-3) # Eliminate the possibility of carpal bone.
bone_map_dict[skeleton.get_bone_name(search_path[0])] = right_fingers_map[i][0]
bone_map_dict[skeleton.get_bone_name(search_path[1])] = right_fingers_map[i][1]
bone_map_dict[skeleton.get_bone_name(search_path[2])] = right_fingers_map[i][2]
Expand Down
9 changes: 7 additions & 2 deletions scene_node_state.gd
Original file line number Diff line number Diff line change
Expand Up @@ -538,14 +538,19 @@ func consume_avatar_bone(orig_bone_name: String, godot_bone_name: String, fileid
var name_to_return: String = ""
var forced_orig_name: String = prefab_state.fileID_to_forced_humanoid_orig_name.get(fileid, "")
var bone_name_forced: bool = false
if not forced_orig_name.is_empty() and forced_orig_name != orig_bone_name:
if (not forced_orig_name.is_empty() and forced_orig_name != orig_bone_name) or prefab_state.fileID_to_forced_humanoid_godot_name.get(fileid, orig_bone_name) != orig_bone_name:
godot_bone_name = prefab_state.fileID_to_forced_humanoid_godot_name.get(fileid, orig_bone_name)
meta.log_debug(fileid, "Avatar bone " + str(orig_bone_name) + " mapped to original name " + forced_orig_name + " godot name " + str(godot_bone_name))
orig_bone_name = forced_orig_name
if not forced_orig_name.is_empty():
orig_bone_name = forced_orig_name
else:
orig_bone_name = godot_bone_name
bone_name_forced = true
meta.log_debug(fileid, "consume avatar bone " + str(orig_bone_name) + " " + str(godot_bone_name) + " for skel " + str(skel) + ":" + str(skel.get_bone_name(bone_idx)))
for avatar in active_avatars:
var crc32_name := avatar.crc32.crc32(orig_bone_name)
if godot_bone_name == "Hips":
meta.log_debug(fileid, "Hips position " + str(avatar.humanoid_skeleton_hip_position) + " crc32=" + str(crc32_name) + " | " + str(avatar.humanoid_bone_map_dict.get(crc32_name)))
if avatar.humanoid_bone_map_dict.has(crc32_name):
if name_to_return.is_empty():
name_to_return = avatar.humanoid_bone_map_dict[crc32_name]
Expand Down

0 comments on commit 4f4f62c

Please sign in to comment.