namespace Sandbox.Gravity; public sealed class InteractTeleporter : Component, Component.ITriggerListener { [Property] public GameObject ToPosGameObject { get; set; } [Property, Sync] public List Players { get; set; } = new(); public void OnTriggerEnter( Collider other ) { var otherEntity = other.GameObject; if ( otherEntity.Components.TryGet( out var controller ) ) { Players.Add( controller ); } } public void OnTriggerExit( Collider other ) { var otherEntity = other.GameObject; if ( otherEntity.Components.TryGet( out var controller ) ) { Players.Remove( controller ); } } public void TeleportAll() { foreach ( var controller in Players ) { Teleport( controller ); } } [Rpc.Broadcast] public void Teleport( Dedugan controller ) { controller.OverrideGravity = WorldRotation.Down; controller.GameObject.WorldPosition = ToPosGameObject.WorldPosition; controller.EyeAngles = new Angles( 0, ToPosGameObject.WorldRotation.Yaw(), 0 ).ToRotation(); controller.Renderer.LocalRotation = new Angles( 0, ToPosGameObject.WorldRotation.Yaw(), 0 ).ToRotation(); } [Rpc.Broadcast] public void Teleport( Dedugan controller, Vector3 toPos ) { controller.OverrideGravity = WorldRotation.Down; controller.GameObject.WorldPosition = toPos; controller.EyeAngles = new Angles( 0, ToPosGameObject.WorldRotation.Yaw(), 0 ).ToRotation(); controller.Renderer.LocalRotation = new Angles( 0, ToPosGameObject.WorldRotation.Yaw(), 0 ).ToRotation(); } }