Level/SlidingDoorComponent.cs
using Sandbox;

public class SlidingDoorComponent : BaseInteract
{
	Vector3 startPos { get; set; }
	Rotation startRot { get; set; }

	[Property] public float Distance { get; set; } = 100f;
	[Property] public Angles MoveDir { get; set; }

	float currentDistance { get; set; } = 0f;

	bool IsTriggered { get; set; } = false;

	public void Trigger()
	{
		IsTriggered = true;
	}

	protected override void DrawGizmos()
	{
		base.DrawGizmos();

		var endPos = MoveDir.Normal.AsVector3() * Distance;

		if ( !Gizmo.IsSelected ) return; 
		
		Gizmo.Transform = new Transform( endPos );
		Gizmo.Draw.Color = Color.Blue.WithAlpha( 1f );
		Gizmo.Draw.LineBBox( GameObject.GetBounds() );
		Gizmo.Draw.Color = Color.Blue.WithAlpha( 0.5f );
		Gizmo.Draw.SolidBox( GameObject.GetBounds() );
	}

	protected override void OnStart()
	{
		base.OnStart();

		startPos = Transform.Position;
		startRot = Transform.Rotation;
	}
	protected override void OnUpdate()
	{
		if ( IsTriggered )
		{
			currentDistance = currentDistance.LerpTo( Distance, Time.Delta * 5f );
		}

		GameObject.Transform.Position = startPos + MoveDir.Normal.AsVector3() * currentDistance;
	}

	public float MoveTo(float distance ,float rotation)
	{
		return currentDistance = distance.Remap( 0f, rotation, 0f, Distance );
	}
}