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 );
}
}