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

@@ -0,0 +1,106 @@
#!/usr/bin/env python3
"""Audit issue 60's native movement, teleport, and crossing boundary."""
from __future__ import annotations
from pathlib import Path
import re
import generate_api_shims
ROOT = Path(__file__).resolve().parents[1]
SOURCE = ROOT / "crates" / "libremetaverse" / "src" / "agent_movement.rs"
DOC = ROOT / "docs" / "agent-movement.md"
STUB_RE = re.compile(r"\b(?:not_implemented|unimplemented_api)\b|\b(?:todo|unimplemented)!\s*\(")
REQUIRED_TYPES = {
"T:LibreMetaverse.AgentManager.AgentMovement",
"T:LibreMetaverse.AgentManager.AgentMovement.AgentCamera",
"T:LibreMetaverse.AvatarSitResponseEventArgs",
"T:LibreMetaverse.CameraConstraintEventArgs",
"T:LibreMetaverse.RegionCrossedEventArgs",
"T:LibreMetaverse.RegionCrossingPredictionEventArgs",
"T:LibreMetaverse.TeleportEventArgs",
}
REQUIRED_MEMBERS = {
"E:LibreMetaverse.AgentManager.AvatarSitResponse",
"E:LibreMetaverse.AgentManager.CameraConstraint",
"E:LibreMetaverse.AgentManager.RegionCrossed",
"E:LibreMetaverse.AgentManager.RegionCrossingPredicted",
"E:LibreMetaverse.AgentManager.TeleportProgress",
"M:LibreMetaverse.AgentManager.AutoPilot(System.Double,System.Double,System.Double)",
"M:LibreMetaverse.AgentManager.CancelCrossing",
"M:LibreMetaverse.AgentManager.CompleteAgentMovement(LibreMetaverse.Simulator)",
"M:LibreMetaverse.AgentManager.Crouch(System.Boolean)",
"M:LibreMetaverse.AgentManager.Fly(System.Boolean)",
"M:LibreMetaverse.AgentManager.GetCrossingDetails",
"M:LibreMetaverse.AgentManager.GetCrossingFailureReason",
"M:LibreMetaverse.AgentManager.GetCrossingState",
"M:LibreMetaverse.AgentManager.GetSimulatorsForObject(LibreMetaverse.UUID)",
"M:LibreMetaverse.AgentManager.IsCrossing",
"M:LibreMetaverse.AgentManager.IsNearBorder(LibreMetaverse.Vector3,System.UInt32,System.UInt32,System.Single)",
"M:LibreMetaverse.AgentManager.Jump(System.Boolean)",
"M:LibreMetaverse.AgentManager.RequestSit(LibreMetaverse.UUID,LibreMetaverse.Vector3)",
"M:LibreMetaverse.AgentManager.RequestTeleport(System.UInt64,LibreMetaverse.Vector3,LibreMetaverse.Vector3,System.Boolean)",
"M:LibreMetaverse.AgentManager.Sit",
"M:LibreMetaverse.AgentManager.Stand",
"M:LibreMetaverse.AgentManager.TeleportAsync(System.UInt64,LibreMetaverse.Vector3,LibreMetaverse.Vector3,System.Threading.CancellationToken)",
"M:LibreMetaverse.AgentManager.TrackObjectInSimulator(LibreMetaverse.UUID,LibreMetaverse.Simulator)",
"M:LibreMetaverse.AgentManager.UntrackObjectInSimulator(LibreMetaverse.UUID,LibreMetaverse.Simulator)",
}
def require_markers(path: Path, markers: tuple[str, ...]) -> None:
source = path.read_text()
missing = [marker for marker in markers if marker not in source]
if missing:
raise SystemExit(f"{path.name}: audit evidence missing: " + ", ".join(missing))
def main() -> None:
missing_types = sorted(REQUIRED_TYPES - generate_api_shims.NATIVE_TYPES.keys())
if missing_types:
raise SystemExit("issue 60 native types missing: " + ", ".join(missing_types))
missing_members = sorted(
REQUIRED_MEMBERS - generate_api_shims.NATIVE_MEMBER_BODIES.keys()
)
if missing_members:
raise SystemExit("issue 60 native members missing: " + ", ".join(missing_members))
if STUB_RE.search(SOURCE.read_text()):
raise SystemExit("issue 60 owned Rust stubs remain in agent_movement.rs")
require_markers(
SOURCE,
(
"libremetaverse-agent-update",
"libremetaverse-region-crossing",
"TeleportLocal",
"AgentMovementComplete",
"fake_grid_decodes_locomotion_camera_and_autopilot_packets",
"fake_grids_complete_a_region_crossing_and_raise_the_final_event",
"multi_simulator_prediction_and_object_visibility_match_reference_rules",
"teleport_completion_timeout_and_cancellation_are_deterministic",
"camera_math_preserves_the_reference_frame_axis_mapping",
),
)
require_markers(
DOC,
(
"ResetControlFlags",
"condition variable",
"generation-tagged",
"GetCrossingFailureReason",
"loopback UDP",
),
)
print(
"issue 60 audit: native movement/camera mappings, teleport and crossing "
"state machines, deterministic tests, documentation, and fake-grid wire "
"coverage are present"
)
if __name__ == "__main__":
main()

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":

View File

@@ -984,6 +984,7 @@ def validate_generated_shims() -> None:
"NotImplemented::new(",
"crate::agent_manager::",
"crate::agent_messages::",
"crate::agent_movement::",
"crate::byte_order::",
"crate::attention_catalog::",
"crate::binary::",