Implement avatar animation and skinning (#67)
Some checks failed
Native code generation / deterministic (push) Failing after 2m20s
Imaging and meshing gate / native (push) Failing after 1m25s
Native Rust workspace compile / compile (push) Failing after 56s

This commit is contained in:
2026-08-10 11:45:07 +00:00
parent b1f60db3d6
commit ed516a1a5d
13 changed files with 3458 additions and 423 deletions

View File

@@ -291,7 +291,15 @@ NATIVE_TYPES = {
# hand-written, while its fixed public methods remain generator-audited.
NATIVE_DECLARATIONS = {
"T:LibreMetaverse.AgentManager": "crate::agent_manager::AgentManager",
"T:LibreMetaverse.Animation": "crate::avatar_manager::Animation",
"T:LibreMetaverse.Animesh.AnimationTrack": "crate::animesh_runtime::AnimationTrack",
"T:LibreMetaverse.Animesh.AnimeshManager": "crate::animesh_runtime::AnimeshManager",
"T:LibreMetaverse.Animesh.AnimeshPlayer": "crate::animesh_runtime::AnimeshPlayer",
"T:LibreMetaverse.Animesh.JointPose": "crate::animesh_runtime::JointPose",
"T:LibreMetaverse.AnimeshSkinning": "crate::animesh_skinning::AnimeshSkinning",
"T:LibreMetaverse.AppearanceManager": "crate::appearance_manager::AppearanceManager",
"T:LibreMetaverse.AvatarManager": "crate::avatar_manager::AvatarManager",
"T:LibreMetaverse.AvatarAnimationEventArgs": "crate::avatar_manager::AvatarAnimationEventArgs",
"T:LibreMetaverse.AppearanceSetEventArgs": "crate::appearance_manager::AppearanceSetEventArgs",
"T:LibreMetaverse.Appearance.CompositeCurrentOutfitPolicy": "crate::current_outfit::CompositeCurrentOutfitPolicy",
"T:LibreMetaverse.Appearance.CurrentOutfitFolder": "crate::current_outfit::CurrentOutfitFolder",
@@ -301,10 +309,20 @@ NATIVE_DECLARATIONS = {
"T:LibreMetaverse.GridClientBakingTextureProvider": "crate::baking_texture_provider::GridClientBakingTextureProvider",
"T:LibreMetaverse.Imaging.Baker": "crate::appearance_baker::Baker",
"T:LibreMetaverse.GridClient": "crate::client_core::GridClient",
"T:LibreMetaverse.BinBVHAnimationReader": "crate::animation::BinBVHAnimationReader",
"T:LibreMetaverse.binBVHJoint": "crate::animation::BinBVHJoint",
"T:LibreMetaverse.binBVHJointKey": "crate::animation::BinBVHJointKey",
"T:LibreMetaverse.InventoryManager": "crate::inventory_manager::InventoryManager",
"T:LibreMetaverse.InventoryAISClient": "crate::inventory_ais::InventoryAISClient",
"T:LibreMetaverse.NetworkManager": "crate::network_manager::NetworkManager",
"T:LibreMetaverse.ObjectManager": "crate::object_material::ObjectManager",
"T:LibreMetaverse.Rendering.MeshSkinData": "crate::animesh_skinning::MeshSkinData",
"T:LibreMetaverse.Rendering.AttachmentRiggedSkin": "crate::avatar_rig::AttachmentRiggedSkin",
"T:LibreMetaverse.Rendering.AvatarAttachmentPoint": "crate::avatar_rig::AvatarAttachmentPoint",
"T:LibreMetaverse.Rendering.AvatarBoneMath": "crate::avatar_rig::AvatarBoneMath",
"T:LibreMetaverse.Rendering.AvatarMeshDefinition": "crate::avatar_rig::AvatarMeshDefinition",
"T:LibreMetaverse.Rendering.LindenAvatarDefinition": "crate::avatar_rig::LindenAvatarDefinition",
"T:LibreMetaverse.Rendering.RiggedSkinMath": "crate::avatar_rig::RiggedSkinMath",
"T:LibreMetaverse.RebakeAvatarTexturesEventArgs": "crate::appearance_manager::RebakeAvatarTexturesEventArgs",
"T:LibreMetaverse.Settings": "crate::client_core::Settings",
"T:LibreMetaverse.Simulator": "crate::network_manager::Simulator",
@@ -312,6 +330,162 @@ NATIVE_DECLARATIONS = {
}
NATIVE_MEMBER_BODIES = {
"M:LibreMetaverse.AvatarAnimationEventArgs.#ctor(LibreMetaverse.UUID,System.Collections.Generic.List{LibreMetaverse.Animation})":
"crate::avatar_manager::AvatarAnimationEventArgs::native_new(avatar_id, anims)",
"P:LibreMetaverse.AvatarAnimationEventArgs.Animations":
"self.native_animations()",
"P:LibreMetaverse.AvatarAnimationEventArgs.AvatarID":
"self.native_avatar_id()",
"E:LibreMetaverse.AvatarManager.AvatarAnimation": "self.native_subscribe_avatar_animation(handler)",
"E:LibreMetaverse.AvatarManager.AvatarAppearance": "self.native_subscribe_avatar_appearance(handler)",
"E:LibreMetaverse.AvatarManager.AvatarClassifiedReply": "self.native_subscribe_avatar_classified_reply(handler)",
"E:LibreMetaverse.AvatarManager.AvatarGroupsReply": "self.native_subscribe_avatar_groups_reply(handler)",
"E:LibreMetaverse.AvatarManager.AvatarInterestsReply": "self.native_subscribe_avatar_interests_reply(handler)",
"E:LibreMetaverse.AvatarManager.AvatarNotesReply": "self.native_subscribe_avatar_notes_reply(handler)",
"E:LibreMetaverse.AvatarManager.AvatarPickerReply": "self.native_subscribe_avatar_picker_reply(handler)",
"E:LibreMetaverse.AvatarManager.AvatarPicksReply": "self.native_subscribe_avatar_picks_reply(handler)",
"E:LibreMetaverse.AvatarManager.AvatarPropertiesReply": "self.native_subscribe_avatar_properties_reply(handler)",
"E:LibreMetaverse.AvatarManager.ClassifiedInfoReply": "self.native_subscribe_classified_info_reply(handler)",
"E:LibreMetaverse.AvatarManager.DisplayNameUpdate": "self.native_subscribe_display_name_update(handler)",
"E:LibreMetaverse.AvatarManager.PickInfoReply": "self.native_subscribe_pick_info_reply(handler)",
"E:LibreMetaverse.AvatarManager.UUIDNameReply": "self.native_subscribe_uuid_name_reply(handler)",
"E:LibreMetaverse.AvatarManager.ViewerEffect": "self.native_subscribe_viewer_effect(handler)",
"E:LibreMetaverse.AvatarManager.ViewerEffectLookAt": "self.native_subscribe_viewer_effect_look_at(handler)",
"E:LibreMetaverse.AvatarManager.ViewerEffectPointAt": "self.native_subscribe_viewer_effect_point_at(handler)",
"M:LibreMetaverse.Animesh.AnimationTrack.Advance(System.Single)":
"self.native_advance(dt)",
"M:LibreMetaverse.Animesh.AnimationTrack.EvaluatePose(System.Collections.Generic.Dictionary{System.String,LibreMetaverse.Animesh.JointPose})":
"self.native_evaluate_pose(pose)",
"P:LibreMetaverse.Animesh.AnimationTrack.AnimationID":
"self.native_animation_id()",
"P:LibreMetaverse.Animesh.AnimationTrack.CurrentTime":
"self.native_current_time()",
"P:LibreMetaverse.Animesh.AnimationTrack.CurrentTime#set":
"self.native_set_current_time(value)",
"P:LibreMetaverse.Animesh.AnimationTrack.Data":
"self.native_data()",
"P:LibreMetaverse.Animesh.AnimationTrack.Data#set":
"self.native_set_data(value)",
"P:LibreMetaverse.Animesh.AnimationTrack.EaseWeight":
"self.native_ease_weight()",
"P:LibreMetaverse.Animesh.AnimationTrack.IsFinished":
"self.native_is_finished()",
"P:LibreMetaverse.Animesh.AnimationTrack.IsFinished#set":
"self.native_set_is_finished(value)",
"M:LibreMetaverse.Animesh.AnimeshManager.GetPlayer(LibreMetaverse.UUID)":
"Ok(self.native_get_player(object_id))",
"M:LibreMetaverse.Animesh.AnimeshManager.RemovePlayer(LibreMetaverse.UUID)":
"self.native_remove_player(object_id); Ok(())",
"M:LibreMetaverse.Animesh.AnimeshManager.Update(System.Single)":
"self.native_update(dt)",
"P:LibreMetaverse.Animesh.AnimeshManager.AllPlayers":
"Box::new(self.native_all_players().into_iter())",
"M:LibreMetaverse.Animesh.AnimeshPlayer.EvaluatePose":
"self.native_evaluate_pose()",
"M:LibreMetaverse.Animesh.AnimeshPlayer.Update(System.Single)":
"self.native_update(dt)",
"P:LibreMetaverse.Animesh.AnimeshPlayer.ObjectID":
"self.native_object_id()",
"P:LibreMetaverse.Animesh.AnimeshPlayer.TrackCount":
"self.native_track_count()",
"M:LibreMetaverse.AnimeshSkinning.ComputeSkinningMatrices(System.Collections.Generic.Dictionary{System.String,LibreMetaverse.Animesh.JointPose},LibreMetaverse.Rendering.LindenSkeleton,LibreMetaverse.Rendering.MeshSkinData)":
"crate::animesh_skinning::AnimeshSkinning::native_compute_skinning_matrices(pose, skeleton, skin_data)",
"M:LibreMetaverse.AnimeshSkinning.DeformVertices(LibreMetaverse.Rendering.Face,LibreMetaverse.Matrix4[],LibreMetaverse.Matrix4,System.Span{LibreMetaverse.Vector3},System.Span{LibreMetaverse.Vector3})":
"crate::animesh_skinning::AnimeshSkinning::native_deform_vertices(face, skinning_matrices, bind_shape_matrix, out_positions, out_normals)",
"M:LibreMetaverse.BinBVHAnimationReader.#ctor(System.Byte[])":
"crate::animation::BinBVHAnimationReader::native_new(animationdata)",
"M:LibreMetaverse.BinBVHAnimationReader.Equals(LibreMetaverse.BinBVHAnimationReader)":
"self.native_equals(other.as_ref())",
"M:LibreMetaverse.BinBVHAnimationReader.Equals(LibreMetaverse.binBVHJoint[],LibreMetaverse.binBVHJoint[])":
"crate::animation::joints_equal(&arr1, &arr2)",
"M:LibreMetaverse.BinBVHAnimationReader.Equals(System.Object)":
"obj.as_ref().and_then(|value| value.downcast_ref::<crate::animation::BinBVHAnimationReader>()).is_some_and(|other| self.native_equals(Some(other)))",
"M:LibreMetaverse.BinBVHAnimationReader.GetHashCode":
"self.native_get_hash_code()",
"M:LibreMetaverse.BinBVHAnimationReader.ReadBytesUntilNull(System.Byte[],System.Int32@)":
"self.native_read_bytes_until_null(data, i)",
"M:LibreMetaverse.BinBVHAnimationReader.readJoint(System.Byte[],System.Int32@)":
"self.native_read_joint(data, i)",
"M:LibreMetaverse.BinBVHAnimationReader.readKeys(System.Byte[],System.Int32@,System.Int32,System.Single,System.Single)":
"self.native_read_keys(data, i, keycount, min, max)",
"M:LibreMetaverse.binBVHJoint.Equals(LibreMetaverse.binBVHJoint)":
"self.native_equals(&other)",
"M:LibreMetaverse.binBVHJoint.Equals(LibreMetaverse.binBVHJointKey,LibreMetaverse.binBVHJointKey)":
"crate::animation::key_equal(&arr1, &arr2)",
"M:LibreMetaverse.binBVHJoint.Equals(LibreMetaverse.binBVHJointKey[],LibreMetaverse.binBVHJointKey[])":
"crate::animation::keys_equal(&arr1, &arr2)",
"M:LibreMetaverse.binBVHJoint.Equals(System.Object)":
"obj.as_ref().and_then(|value| value.downcast_ref::<crate::animation::BinBVHJoint>()).is_some_and(|other| self.native_equals(other))",
"M:LibreMetaverse.binBVHJoint.GetHashCode":
"self.native_get_hash_code()",
"M:LibreMetaverse.binBVHJoint.op_Equality(LibreMetaverse.binBVHJoint,LibreMetaverse.binBVHJoint)":
"left.native_equals(&right)",
"M:LibreMetaverse.binBVHJoint.op_Inequality(LibreMetaverse.binBVHJoint,LibreMetaverse.binBVHJoint)":
"!left.native_equals(&right)",
"M:LibreMetaverse.Rendering.MeshSkinData.#ctor":
"crate::animesh_skinning::MeshSkinData::native_new()",
"M:LibreMetaverse.Rendering.AttachmentRiggedSkin.#ctor":
"crate::avatar_rig::AttachmentRiggedSkin::native_new()",
"P:LibreMetaverse.Rendering.AvatarAttachmentPoint.Group":
"self.native_group()",
"P:LibreMetaverse.Rendering.AvatarAttachmentPoint.Id":
"self.native_id()",
"P:LibreMetaverse.Rendering.AvatarAttachmentPoint.Joint":
"self.native_joint()",
"P:LibreMetaverse.Rendering.AvatarAttachmentPoint.Location":
"self.native_location()",
"P:LibreMetaverse.Rendering.AvatarAttachmentPoint.Name":
"self.native_name()",
"P:LibreMetaverse.Rendering.AvatarAttachmentPoint.Position":
"self.native_position()",
"P:LibreMetaverse.Rendering.AvatarAttachmentPoint.Rotation":
"self.native_rotation()",
"P:LibreMetaverse.Rendering.AvatarAttachmentPoint.VisibleInFirstPerson":
"self.native_visible_in_first_person()",
"M:LibreMetaverse.Rendering.AvatarBoneMath.BuildBoneWorldMatrices(LibreMetaverse.Rendering.LindenSkeleton,System.Collections.Generic.Dictionary{System.String,LibreMetaverse.Rendering.BoneTransform})":
"crate::avatar_rig::AvatarBoneMath::native_build_bone_world_matrices(skeleton, bone_transforms)",
"M:LibreMetaverse.Rendering.AvatarBoneMath.ComputeAnimatedBoneWorldMatrices(LibreMetaverse.Rendering.LindenAvatarDefinition,System.Collections.Generic.Dictionary{System.String,LibreMetaverse.Rendering.BoneTransform},System.Collections.Generic.IReadOnlyDictionary{System.String,System.Numerics.Quaternion})":
"crate::avatar_rig::AvatarBoneMath::native_compute_animated_bone_world_matrices(&avatar_def, &bone_transforms, &rot_deltas)",
"M:LibreMetaverse.Rendering.AvatarBoneMath.ComputeAnimatedBoneWorldMatrices(LibreMetaverse.Rendering.LindenAvatarDefinition,System.Collections.Generic.Dictionary{System.String,LibreMetaverse.Rendering.BoneTransform},System.Collections.Generic.IReadOnlyDictionary{System.String,System.Numerics.Quaternion},System.Collections.Generic.Dictionary{System.String,System.Numerics.Matrix4x4})":
"let computed = crate::avatar_rig::AvatarBoneMath::native_compute_animated_bone_world_matrices(&avatar_def, &bone_transforms, &rot_deltas)?; let mut result = result; result.clear(); result.extend(computed); Ok(())",
"M:LibreMetaverse.Rendering.AvatarBoneMath.ComputeAttachmentBoneWorldMatrices(LibreMetaverse.Rendering.LindenAvatarDefinition,System.Collections.Generic.Dictionary{System.String,LibreMetaverse.Rendering.BoneTransform},System.Collections.Generic.IReadOnlyDictionary{System.String,System.Numerics.Quaternion})":
"crate::avatar_rig::AvatarBoneMath::native_compute_attachment_bone_world_matrices(&avatar_def, &bone_transforms, &rot_deltas)",
"M:LibreMetaverse.Rendering.AvatarBoneMath.ComputeAttachmentBoneWorldMatrices(LibreMetaverse.Rendering.LindenAvatarDefinition,System.Collections.Generic.Dictionary{System.String,LibreMetaverse.Rendering.BoneTransform},System.Collections.Generic.IReadOnlyDictionary{System.String,System.Numerics.Quaternion},System.Collections.Generic.Dictionary{System.String,System.Numerics.Matrix4x4})":
"let computed = crate::avatar_rig::AvatarBoneMath::native_compute_attachment_bone_world_matrices(&avatar_def, &bone_transforms, &rot_deltas)?; let mut result = result; result.clear(); result.extend(computed); Ok(())",
"M:LibreMetaverse.Rendering.AvatarBoneMath.ComputeGroundAdjustment(System.Collections.Generic.Dictionary{System.String,LibreMetaverse.Rendering.BoneTransform})":
"Ok(crate::avatar_rig::AvatarBoneMath::native_compute_ground_adjustment(bone_transforms.as_ref()))",
"M:LibreMetaverse.Rendering.AvatarBoneMath.StripScale(System.Numerics.Matrix4x4)":
"Ok(crate::avatar_rig::AvatarBoneMath::native_strip_scale(m))",
"P:LibreMetaverse.Rendering.AvatarMeshDefinition.FileName":
"self.native_file_name()",
"P:LibreMetaverse.Rendering.AvatarMeshDefinition.LodLevel":
"self.native_lod_level()",
"P:LibreMetaverse.Rendering.AvatarMeshDefinition.MinPixelWidth":
"self.native_min_pixel_width()",
"P:LibreMetaverse.Rendering.AvatarMeshDefinition.Type":
"self.native_type()",
"M:LibreMetaverse.Rendering.LindenAvatarDefinition.ComputeBoneTransforms(System.Collections.Generic.IReadOnlyDictionary{System.Int32,System.Single})":
"self.native_compute_bone_transforms(&param_values)",
"M:LibreMetaverse.Rendering.LindenAvatarDefinition.GetAttachmentPoint(System.Int32)":
"Ok(self.native_get_attachment_point_by_id(id))",
"M:LibreMetaverse.Rendering.LindenAvatarDefinition.GetAttachmentPoint(System.String)":
"Ok(self.native_get_attachment_point_by_name(&name))",
"M:LibreMetaverse.Rendering.LindenAvatarDefinition.Load(System.String,System.String)":
"crate::avatar_rig::LindenAvatarDefinition::native_load(lad_file_name, skeleton_file_name)",
"P:LibreMetaverse.Rendering.LindenAvatarDefinition.AttachmentPoints":
"self.native_attachment_points()",
"P:LibreMetaverse.Rendering.LindenAvatarDefinition.MeshDefinitions":
"self.native_mesh_definitions()",
"P:LibreMetaverse.Rendering.LindenAvatarDefinition.Skeleton":
"self.native_skeleton()",
"M:LibreMetaverse.Rendering.RiggedSkinMath.BuildInvBindMatrices(LibreMetaverse.Rendering.MeshSkinData)":
"crate::avatar_rig::RiggedSkinMath::native_build_inv_bind_matrices(&skin)",
"M:LibreMetaverse.Rendering.RiggedSkinMath.ExtractJointPositionOverrides(LibreMetaverse.Rendering.MeshSkinData)":
"crate::avatar_rig::RiggedSkinMath::native_extract_joint_position_overrides(&skin)",
"M:LibreMetaverse.Rendering.RiggedSkinMath.FloatsToMatrix(System.Single[])":
"Ok(crate::avatar_rig::RiggedSkinMath::native_floats_to_matrix(&f))",
"M:LibreMetaverse.Rendering.RiggedSkinMath.NormalizeSkinWeights(System.Int32,System.Int32@,System.Single@,System.Int32@,System.Single@,System.Int32@,System.Single@,System.Int32@,System.Single@)":
"crate::avatar_rig::RiggedSkinMath::native_normalize_skin_weights(joint_count, [j0, j1, j2, j3], [w0, w1, w2, w3]); Ok(())",
"M:LibreMetaverse.NameValue.#ctor(System.String,LibreMetaverse.NameValue.ValueType,LibreMetaverse.NameValue.ClassType,LibreMetaverse.NameValue.SendtoType,System.Object)":
"Ok(crate::NameValue { class_: class_type, name, sendto: sendto_type, type_: value_type, value: Some(value) })",
"M:LibreMetaverse.Primitive.#ctor":
@@ -592,6 +766,56 @@ NATIVE_MEMBER_BODIES = {
"self.native_appearance().unwrap_or_else(|_| panic!(\"failed to construct AppearanceManager\"))",
"P:LibreMetaverse.GridClient.Appearance#set":
"self.native_set_appearance(value)",
"P:LibreMetaverse.GridClient.Animesh":
"self.native_animesh().unwrap_or_else(|_| panic!(\"failed to construct AnimeshManager\"))",
"P:LibreMetaverse.GridClient.Animesh#set":
"self.native_set_animesh(value)",
"P:LibreMetaverse.GridClient.Avatars":
"self.native_avatars().unwrap_or_else(|_| panic!(\"failed to construct AvatarManager\"))",
"P:LibreMetaverse.GridClient.Avatars#set":
"self.native_set_avatars(value)",
"M:LibreMetaverse.AvatarManager.#ctor(LibreMetaverse.GridClient)":
"crate::avatar_manager::AvatarManager::native_new(client)",
"M:LibreMetaverse.AvatarManager.AgentProfileAvailable":
"self.native_capability_available(\"AgentProfile\")",
"M:LibreMetaverse.AvatarManager.DisplayNamesAvailable":
"self.native_capability_available(\"GetDisplayNames\")",
"M:LibreMetaverse.AvatarManager.Dispose":
"self.native_dispose()",
"M:LibreMetaverse.AvatarManager.RequestOwnAvatarTextures":
"self.native_request_own_avatar_textures()",
"M:LibreMetaverse.AvatarManager.RequestTrackAgent(LibreMetaverse.UUID)":
"self.native_request_track_agent(prey_id)",
"M:LibreMetaverse.AvatarManager.RequestAvatarName(LibreMetaverse.UUID)":
"self.native_request_avatar_names(&[id])",
"M:LibreMetaverse.AvatarManager.RequestAvatarNames(System.Collections.Generic.List{LibreMetaverse.UUID})":
"self.native_request_avatar_names(&ids)",
"M:LibreMetaverse.AvatarManager.RequestAvatarProperties(LibreMetaverse.UUID)":
"self.native_request_avatar_properties(avatarid)",
"M:LibreMetaverse.AvatarManager.RequestAvatarNameSearch(System.String,LibreMetaverse.UUID)":
"self.native_request_avatar_name_search(name, query_id)",
"M:LibreMetaverse.AvatarManager.RequestAvatarNotes(LibreMetaverse.UUID)":
"self.native_request_generic(\"avatarnotesrequest\", &[avatarid])",
"M:LibreMetaverse.AvatarManager.RequestAvatarPicks(LibreMetaverse.UUID)":
"self.native_request_generic(\"avatarpicksrequest\", &[avatarid])",
"M:LibreMetaverse.AvatarManager.RequestAvatarClassified(LibreMetaverse.UUID)":
"self.native_request_generic(\"avatarclassifiedsrequest\", &[avatarid])",
"M:LibreMetaverse.AvatarManager.RequestPickInfo(LibreMetaverse.UUID,LibreMetaverse.UUID)":
"self.native_request_generic(\"pickinforequest\", &[avatarid, pickid])",
"M:LibreMetaverse.AvatarManager.RequestClassifiedInfo(LibreMetaverse.UUID)":
"self.native_request_classified_info(classifiedid)",
"M:LibreMetaverse.AvatarManager.GetDisplayNamesAsync(System.Collections.Generic.List{LibreMetaverse.UUID},System.Threading.CancellationToken)":
"self.native_get_display_names(ids, cancellation_token).await",
"M:LibreMetaverse.AvatarManager.RequestAgentProfileAsync(LibreMetaverse.UUID,System.Threading.CancellationToken)":
"self.native_request_agent_profile(avatarid, cancellation_token).await",
"M:LibreMetaverse.Messages.Linden.AgentProfileMessage.#ctor":
"Ok(crate::avatar_manager::agent_profile_defaults())",
"M:LibreMetaverse.Messages.Linden.AgentProfileMessage.Deserialize(LibreMetaverse.StructuredData.OSDMap)":
"crate::avatar_manager::deserialize_agent_profile(self, &map)",
"M:LibreMetaverse.Messages.Linden.AgentProfileMessage.Serialize":
"crate::avatar_manager::serialize_agent_profile(self)",
"M:LibreMetaverse.Messages.Linden.AgentProfileMessage.GroupData.#ctor":
"Ok(crate::avatar_manager::agent_profile_group_defaults())",
"M:LibreMetaverse.Avatar.AvatarProperties.FromOSD(LibreMetaverse.StructuredData.OSD)":
"crate::agent_messages::avatar_properties_from_osd(o)",
"M:LibreMetaverse.Avatar.AvatarProperties.GetOSD":

View File

@@ -985,12 +985,17 @@ def validate_generated_shims() -> None:
"crate::agent_manager::",
"crate::agent_messages::",
"crate::agent_movement::",
"crate::animation::",
"crate::animesh_runtime::",
"crate::animesh_skinning::",
"crate::asset_cache::",
"crate::asset_manager::",
"crate::asset_material::",
"crate::asset_models::",
"crate::appearance_baker::",
"crate::appearance_manager::",
"crate::avatar_manager::",
"crate::avatar_rig::",
"crate::baking_texture_provider::",
"crate::byte_order::",
"crate::attention_catalog::",
@@ -1021,6 +1026,7 @@ def validate_generated_shims() -> None:
"crate::xml_codec::",
"stored_visual_params",
"self.native_",
"left.native_equals(",
)
)
if uses_standardized_or_native_path: