Implement native agent movement and teleportation (#60)
All checks were successful
Native code generation / deterministic (push) Successful in 12m6s
Imaging and meshing gate / native (push) Successful in 4m6s
Native Rust workspace compile / compile (push) Successful in 4m10s

This commit is contained in:
2026-08-09 23:07:30 +00:00
parent 9c9d5b91f1
commit 0791e0a69e
13 changed files with 4060 additions and 936 deletions

View File

@@ -44,7 +44,10 @@ NATIVE_TYPES = {
"T:LibreMetaverse.AgentAccessEventArgs": "crate::agent_messages::AgentAccessEventArgs",
"T:LibreMetaverse.AgentExperiencesEventArgs": "crate::agent_messages::AgentExperiencesEventArgs",
"T:LibreMetaverse.AgentPreferencesEventArgs": "crate::agent_messages::AgentPreferencesEventArgs",
"T:LibreMetaverse.AgentManager.AgentMovement": "crate::agent_movement::AgentManagerAgentMovement",
"T:LibreMetaverse.AgentManager.AgentMovement.AgentCamera": "crate::agent_movement::AgentManagerAgentMovementAgentCamera",
"T:LibreMetaverse.AnimationsChangedEventArgs": "crate::agent_messages::AnimationsChangedEventArgs",
"T:LibreMetaverse.AvatarSitResponseEventArgs": "crate::agent_movement::AvatarSitResponseEventArgs",
"T:LibreMetaverse.AvatarRenderInfoEventArgs": "crate::agent_messages::AvatarRenderInfoEventArgs",
"T:LibreMetaverse.BalanceEventArgs": "crate::agent_messages::BalanceEventArgs",
"T:LibreMetaverse.CapabilitiesReceivedEventArgs": "crate::caps::CapabilitiesReceivedEventArgs",
@@ -64,6 +67,7 @@ NATIVE_TYPES = {
"T:LibreMetaverse.ChatSessionMember": "crate::agent_messages::ChatSessionMember",
"T:LibreMetaverse.ChatSessionMemberAddedEventArgs": "crate::agent_messages::ChatSessionMemberAddedEventArgs",
"T:LibreMetaverse.ChatSessionMemberLeftEventArgs": "crate::agent_messages::ChatSessionMemberLeftEventArgs",
"T:LibreMetaverse.CameraConstraintEventArgs": "crate::agent_movement::CameraConstraintEventArgs",
"T:LibreMetaverse.Assets.AssetGesture": "crate::gesture::AssetGesture",
"T:LibreMetaverse.Assets.GestureStep": "crate::gesture::GestureStep",
"T:LibreMetaverse.Assets.GestureStepAnimation": "crate::gesture::GestureStepAnimation",
@@ -76,7 +80,10 @@ NATIVE_TYPES = {
"T:LibreMetaverse.GroupChatJoinedEventArgs": "crate::agent_messages::GroupChatJoinedEventArgs",
"T:LibreMetaverse.RegionExperiencesEventArgs": "crate::agent_messages::RegionExperiencesEventArgs",
"T:LibreMetaverse.SetDisplayNameReplyEventArgs": "crate::agent_messages::SetDisplayNameReplyEventArgs",
"T:LibreMetaverse.TeleportEventArgs": "crate::agent_movement::TeleportEventArgs",
"T:LibreMetaverse.ProductInfoEventArgs": "crate::agent_messages::ProductInfoEventArgs",
"T:LibreMetaverse.RegionCrossedEventArgs": "crate::agent_movement::RegionCrossedEventArgs",
"T:LibreMetaverse.RegionCrossingPredictionEventArgs": "crate::agent_movement::RegionCrossingPredictionEventArgs",
"T:LibreMetaverse.ViewerBenefitsEventArgs": "crate::agent_messages::ViewerBenefitsEventArgs",
"T:LibreMetaverse.Messages.Linden.ProductInfoRequestMessage": "crate::agent_manager::ProductInfoRequestMessage",
"T:LibreMetaverse.Messages.Linden.ProductInfoRequestMessage.ProductInfo": "crate::agent_manager::ProductInfoRequestMessageProductInfo",
@@ -302,6 +309,10 @@ NATIVE_MEMBER_BODIES = {
"self.native_subscribe_agent_data_reply(handler)",
"E:LibreMetaverse.AgentManager.AnimationsChanged":
"self.native_subscribe_animations_changed(handler)",
"E:LibreMetaverse.AgentManager.AvatarSitResponse":
"self.native_subscribe_avatar_sit_response(handler)",
"E:LibreMetaverse.AgentManager.CameraConstraint":
"self.native_subscribe_camera_constraint(handler)",
"E:LibreMetaverse.AgentManager.ChatFromSimulator":
"self.native_subscribe_chat_from_simulator(handler)",
"E:LibreMetaverse.AgentManager.MoneyBalance":
@@ -324,6 +335,10 @@ NATIVE_MEMBER_BODIES = {
"self.native_subscribe_viewer_benefits_updated(handler)",
"E:LibreMetaverse.AgentManager.ProductInfoUpdated":
"self.native_subscribe_product_info_updated(handler)",
"E:LibreMetaverse.AgentManager.RegionCrossed":
"self.native_subscribe_region_crossed(handler)",
"E:LibreMetaverse.AgentManager.RegionCrossingPredicted":
"self.native_subscribe_region_crossing_predicted(handler)",
"E:LibreMetaverse.AgentManager.MuteListUpdated":
"self.native_subscribe_mute_list_updated(handler)",
"E:LibreMetaverse.AgentManager.GroupChatJoined":
@@ -336,6 +351,8 @@ NATIVE_MEMBER_BODIES = {
"self.native_subscribe_set_display_name_reply(handler)",
"E:LibreMetaverse.AgentManager.NavMeshStatusUpdate":
"self.native_subscribe_nav_mesh_status_update(handler)",
"E:LibreMetaverse.AgentManager.TeleportProgress":
"self.native_subscribe_teleport_progress(handler)",
"M:LibreMetaverse.AgentManager.#ctor(LibreMetaverse.GridClient)":
"crate::agent_manager::AgentManager::native_new(client)",
"M:LibreMetaverse.AgentManager.Dispose":
@@ -348,18 +365,34 @@ NATIVE_MEMBER_BODIES = {
"self.native_animation_start(animation, reliable)",
"M:LibreMetaverse.AgentManager.AnimationStop(LibreMetaverse.UUID,System.Boolean)":
"self.native_animation_stop(animation, reliable)",
"M:LibreMetaverse.AgentManager.AutoPilot(System.Double,System.Double,System.Double)":
"self.native_autopilot_f64(global_x, global_y, z)",
"M:LibreMetaverse.AgentManager.AutoPilot(System.UInt64,System.UInt64,System.Single)":
"self.native_autopilot_u64(global_x, global_y, z)",
"M:LibreMetaverse.AgentManager.AutoPilotCancel":
"self.native_autopilot_cancel()",
"M:LibreMetaverse.AgentManager.AutoPilotLocal(System.Int32,System.Int32,System.Single)":
"self.native_autopilot_local(local_x, local_y, z)",
"M:LibreMetaverse.AgentManager.CancelCrossing":
"Ok(self.native_cancel_crossing())",
"M:LibreMetaverse.AgentManager.BeamEffect(LibreMetaverse.UUID,LibreMetaverse.UUID,LibreMetaverse.Vector3d,LibreMetaverse.Color4,System.Single,LibreMetaverse.UUID)":
"self.native_viewer_effect(source_avatar, target_object, global_offset, color, duration, effect_id, crate::EffectType::Beam, None)",
"M:LibreMetaverse.AgentManager.Chat(System.String,System.Int32,LibreMetaverse.ChatType,System.Boolean)":
"self.native_chat(message, channel, type_, split_large_messages)",
"M:LibreMetaverse.AgentManager.ChatterBoxAcceptInviteAsync(LibreMetaverse.UUID,System.Threading.CancellationToken)":
"self.native_chatter_box_accept_invite(session_id, cancellation_token).await",
"M:LibreMetaverse.AgentManager.CompleteAgentMovement(LibreMetaverse.Simulator)":
"self.native_complete_agent_movement(simulator)",
"M:LibreMetaverse.AgentManager.Crouch(System.Boolean)":
"self.native_crouch(crouching)",
"M:LibreMetaverse.AgentManager.DeactivateGesture(LibreMetaverse.UUID)":
"self.native_deactivate_gesture(inv_id)",
"M:LibreMetaverse.AgentManager.DeleteClassified(LibreMetaverse.UUID)":
"self.native_delete_classified(classified_id)",
"M:LibreMetaverse.AgentManager.FindExperienceByNameAsync(System.String,System.Int32,System.Int32,System.Threading.CancellationToken)":
"self.native_find_experience_by_name(query, page, page_size, cancellation_token).await",
"M:LibreMetaverse.AgentManager.Fly(System.Boolean)":
"self.native_fly(start)",
"M:LibreMetaverse.AgentManager.ForgetExperiencePermissionAsync(LibreMetaverse.UUID,System.Threading.CancellationToken)":
"self.native_forget_experience_permission(experience_id, cancellation_token).await",
"M:LibreMetaverse.AgentManager.GetAdminExperiencesAsync(System.Threading.CancellationToken)":
@@ -376,6 +409,14 @@ NATIVE_MEMBER_BODIES = {
"self.native_get_avatar_render_info(cancellation_token).await",
"M:LibreMetaverse.AgentManager.GetCreatorExperiencesAsync(System.Threading.CancellationToken)":
"self.native_get_creator_experiences(cancellation_token).await",
"M:LibreMetaverse.AgentManager.GetCrossingDetails":
"Ok(self.native_crossing_details())",
"M:LibreMetaverse.AgentManager.GetCrossingFailureReason":
"Ok(self.native_crossing_failure_reason())",
"M:LibreMetaverse.AgentManager.GetCrossingState":
"Ok(self.native_crossing_state())",
"M:LibreMetaverse.AgentManager.GetSimulatorsForObject(LibreMetaverse.UUID)":
"Ok(self.native_get_simulators_for_object(object_id))",
"M:LibreMetaverse.AgentManager.GetExperienceInfoAsync(System.Collections.Generic.IEnumerable{LibreMetaverse.UUID},System.Threading.CancellationToken)":
"self.native_get_experience_info(experience_ids, cancellation_token).await",
"M:LibreMetaverse.AgentManager.GetExperiencePermissionAsync(LibreMetaverse.UUID,System.Threading.CancellationToken)":
@@ -390,6 +431,12 @@ NATIVE_MEMBER_BODIES = {
"self.native_get_region_experiences(cancellation_token).await",
"M:LibreMetaverse.AgentManager.GetViewerBenefitsAsync(System.Threading.CancellationToken)":
"self.native_get_viewer_benefits(cancellation_token).await",
"M:LibreMetaverse.AgentManager.GoHomeAsync(System.Threading.CancellationToken)":
"self.native_teleport_landmark(libremetaverse_types::UUID::zero(), cancellation_token).await",
"M:LibreMetaverse.AgentManager.IsCrossing":
"Ok(self.native_is_crossing())",
"M:LibreMetaverse.AgentManager.IsNearBorder(LibreMetaverse.Vector3,System.UInt32,System.UInt32,System.Single)":
"Ok(self.native_is_near_border(position, region_size_x, region_size_y, threshold.unwrap_or(32.0)))",
"M:LibreMetaverse.AgentManager.GiveAvatarMoney(LibreMetaverse.UUID,System.Int32)":
"self.native_give_avatar_money(target, amount, String::new())",
"M:LibreMetaverse.AgentManager.GiveAvatarMoney(LibreMetaverse.UUID,System.Int32,System.String)":
@@ -422,6 +469,8 @@ NATIVE_MEMBER_BODIES = {
"self.native_is_experience_role(\"IsExperienceContributor\", experience_id, cancellation_token).await",
"M:LibreMetaverse.AgentManager.IsGroupMessage(LibreMetaverse.InstantMessage)":
"Ok(self.native_is_group_message(message))",
"M:LibreMetaverse.AgentManager.Jump(System.Boolean)":
"self.native_jump(jumping)",
"M:LibreMetaverse.AgentManager.LookAtEffect(LibreMetaverse.UUID,LibreMetaverse.UUID,LibreMetaverse.Vector3d,LibreMetaverse.LookAtType,LibreMetaverse.UUID)":
"self.native_look_at_effect(source_avatar, target_object, global_offset, type_, effect_id)",
"M:LibreMetaverse.AgentManager.ModerateChatSessions(LibreMetaverse.UUID,LibreMetaverse.UUID,System.String,System.Boolean,System.Threading.CancellationToken)":
@@ -454,6 +503,14 @@ NATIVE_MEMBER_BODIES = {
"self.native_leave_group_chat(group_id)",
"M:LibreMetaverse.AgentManager.RequestMuteList":
"self.native_request_mute_list()",
"M:LibreMetaverse.AgentManager.RequestSit(LibreMetaverse.UUID,LibreMetaverse.Vector3)":
"self.native_request_sit(target_id, offset)",
"M:LibreMetaverse.AgentManager.RequestTeleport(LibreMetaverse.UUID)":
"self.native_request_teleport_landmark(landmark)",
"M:LibreMetaverse.AgentManager.RequestTeleport(System.UInt64,LibreMetaverse.Vector3)":
"self.native_request_teleport_location(region_handle, position, libremetaverse_types::Vector3::unit_y(), Some(false))",
"M:LibreMetaverse.AgentManager.RequestTeleport(System.UInt64,LibreMetaverse.Vector3,LibreMetaverse.Vector3,System.Boolean)":
"self.native_request_teleport_location(region_handle, position, look_at, ignore_caps_status)",
"M:LibreMetaverse.AgentManager.RequestNavMeshGenerationStatusAsync(System.Threading.CancellationToken)":
"self.native_request_nav_mesh_generation_status(cancellation_token).await",
"M:LibreMetaverse.AgentManager.RequestNavMeshRebakeAsync(System.Threading.CancellationToken)":
@@ -468,6 +525,16 @@ NATIVE_MEMBER_BODIES = {
"self.native_send_postcard(jpeg_image_data, to_email, from_name, subject, message, global_position, cancellation_token).await",
"M:LibreMetaverse.AgentManager.SendViewerStatsAsync(LibreMetaverse.Messages.Linden.ViewerStatsMessage,System.Threading.CancellationToken)":
"self.native_send_viewer_stats(stats, cancellation_token).await",
"M:LibreMetaverse.AgentManager.SendTeleportLure(LibreMetaverse.UUID)":
"self.native_send_teleport_lure(target_id, None)",
"M:LibreMetaverse.AgentManager.SendTeleportLure(LibreMetaverse.UUID,System.String)":
"self.native_send_teleport_lure(target_id, Some(message))",
"M:LibreMetaverse.AgentManager.SendTeleportLureRequest(LibreMetaverse.UUID)":
"self.native_send_teleport_lure_request(target_id, target_id, \"Let me join you in your location\".into())",
"M:LibreMetaverse.AgentManager.SendTeleportLureRequest(LibreMetaverse.UUID,LibreMetaverse.UUID,System.String)":
"self.native_send_teleport_lure_request(target_id, session_id, message)",
"M:LibreMetaverse.AgentManager.SendTeleportLureRequest(LibreMetaverse.UUID,System.String)":
"self.native_send_teleport_lure_request(target_id, target_id, message)",
"M:LibreMetaverse.AgentManager.SetAgentAccessAsync(System.String,System.Threading.CancellationToken)":
"self.native_set_agent_access_async(access, cancellation_token).await",
"M:LibreMetaverse.AgentManager.SetDisplayNameAsync(System.String,System.String,System.Threading.CancellationToken)":
@@ -484,6 +551,30 @@ NATIVE_MEMBER_BODIES = {
"self.native_start_im_conference(participants, tmp_session_id, cancellation_token).await",
"M:LibreMetaverse.AgentManager.SetHoverHeightAsync(System.Double,System.Threading.CancellationToken)":
"self.native_set_hover_height_async(hover_height, cancellation_token).await",
"M:LibreMetaverse.AgentManager.Sit":
"self.native_sit()",
"M:LibreMetaverse.AgentManager.SitOnGround":
"self.native_sit_on_ground()",
"M:LibreMetaverse.AgentManager.Stand":
"self.native_stand()",
"M:LibreMetaverse.AgentManager.TeleportAsync(LibreMetaverse.UUID,System.Threading.CancellationToken)":
"self.native_teleport_landmark(landmark, cancellation_token).await",
"M:LibreMetaverse.AgentManager.TeleportAsync(System.String,LibreMetaverse.Vector3,LibreMetaverse.Vector3,System.Threading.CancellationToken)":
"self.native_teleport_name(sim_name, position, look_at, cancellation_token).await",
"M:LibreMetaverse.AgentManager.TeleportAsync(System.String,LibreMetaverse.Vector3,System.Threading.CancellationToken)":
"self.native_teleport_name(sim_name, position, libremetaverse_types::Vector3::unit_y(), cancellation_token).await",
"M:LibreMetaverse.AgentManager.TeleportAsync(System.UInt64,LibreMetaverse.Vector3,LibreMetaverse.Vector3,System.Threading.CancellationToken)":
"self.native_teleport_location(region_handle, position, look_at, cancellation_token).await",
"M:LibreMetaverse.AgentManager.TeleportAsync(System.UInt64,LibreMetaverse.Vector3,System.Threading.CancellationToken)":
"self.native_teleport_location(region_handle, position, libremetaverse_types::Vector3::unit_y(), cancellation_token).await",
"M:LibreMetaverse.AgentManager.TeleportFailedEventHandler(System.String,LibreMetaverse.Interfaces.IMessage,LibreMetaverse.Simulator)":
"self.native_movement_runtime().handle_caps_event(\"TeleportFailed\", message.as_ref(), simulator).map(|_| ())",
"M:LibreMetaverse.AgentManager.TeleportLureRespond(LibreMetaverse.UUID,LibreMetaverse.UUID,System.Boolean)":
"self.native_teleport_lure_respond(requester_id, session_id, accept)",
"M:LibreMetaverse.AgentManager.TrackObjectInSimulator(LibreMetaverse.UUID,LibreMetaverse.Simulator)":
"Ok(self.native_track_object_in_simulator(object_id, sim))",
"M:LibreMetaverse.AgentManager.UntrackObjectInSimulator(LibreMetaverse.UUID,LibreMetaverse.Simulator)":
"Ok(self.native_untrack_object_in_simulator(object_id, &sim))",
"M:LibreMetaverse.AgentManager.UpdateAgentLanguageAsync(System.String,System.Boolean,System.Threading.CancellationToken)":
"self.native_update_agent_language(language, is_public, cancellation_token).await",
"M:LibreMetaverse.AgentManager.UpdateClassifiedInfo(LibreMetaverse.UUID,LibreMetaverse.DirectoryManager.ClassifiedCategories,LibreMetaverse.UUID,System.Int32,LibreMetaverse.Vector3d,System.String,System.String,System.Boolean)":
@@ -578,6 +669,42 @@ NATIVE_MEMBER_BODIES = {
"self.native_session_id()",
"P:LibreMetaverse.AgentManager.SessionID#set":
"self.native_set_session_id(value)",
"P:LibreMetaverse.AgentManager.Acceleration":
"self.native_movement_runtime().acceleration()",
"P:LibreMetaverse.AgentManager.AngularVelocity":
"self.native_movement_runtime().angular_velocity()",
"P:LibreMetaverse.AgentManager.GlobalPosition":
"self.native_movement_runtime().global_position()",
"P:LibreMetaverse.AgentManager.HomePosition":
"self.native_movement_runtime().home_position()",
"P:LibreMetaverse.AgentManager.LastPositionUpdate":
"self.native_movement_runtime().last_position_update()",
"P:LibreMetaverse.AgentManager.LastPositionUpdate#set":
"self.native_movement_runtime().set_last_position_update(value)",
"P:LibreMetaverse.AgentManager.RelativePosition":
"self.native_movement_runtime().relative_position()",
"P:LibreMetaverse.AgentManager.RelativePosition#set":
"self.native_movement_runtime().set_relative_position(value)",
"P:LibreMetaverse.AgentManager.RelativePositionEstimate":
"self.native_movement_runtime().relative_position_estimate()",
"P:LibreMetaverse.AgentManager.RelativePositionEstimate#set":
"self.native_movement_runtime().set_relative_position(value)",
"P:LibreMetaverse.AgentManager.RelativeRotation":
"self.native_movement_runtime().relative_rotation()",
"P:LibreMetaverse.AgentManager.RelativeRotation#set":
"self.native_movement_runtime().set_relative_rotation(value)",
"P:LibreMetaverse.AgentManager.SimPosition":
"self.native_movement_runtime().sim_position()",
"P:LibreMetaverse.AgentManager.SimRotation":
"self.native_movement_runtime().sim_rotation()",
"P:LibreMetaverse.AgentManager.SittingOn":
"self.native_movement_runtime().sitting_on()",
"P:LibreMetaverse.AgentManager.TeleportMessage":
"self.native_movement_runtime().teleport_message()",
"P:LibreMetaverse.AgentManager.TeleportMessage#set":
"self.native_movement_runtime().set_teleport_message(value)",
"P:LibreMetaverse.AgentManager.Velocity":
"self.native_movement_runtime().velocity()",
"E:LibreMetaverse.NetworkManager.Disconnected":
"self.native_subscribe_disconnected(handler)",
"E:LibreMetaverse.NetworkManager.EventQueueRunning":