Park/Rides/FlatRides/DropperRide.cs
using HC3;
public sealed class DropperRide : BasicRide
{
[Property] public GameObject RideSeats { get; set; }
[Property] GameObject TopPos { get; set; }
[Property] GameObject BottomPos { get; set; }
private float riseSpeed = 0.15f;
private float dropSpeed = 0.8f;
private bool isRising = true;
private bool waitingToDrop = false;
private TimeUntil waitTimer = 0f;
private float waitDuration = 1.5f;
protected override void DrawGizmos()
{
base.DrawGizmos();
Gizmo.Draw.IgnoreDepth = true;
Gizmo.Draw.LineThickness = 4;
Gizmo.Draw.Color = Color.Red;
Gizmo.Draw.Line( TopPos.WorldPosition, BottomPos.WorldPosition );
}
protected override void OnUpdate()
{
base.OnUpdate();
if ( !RideStarted || RideSeats == null ) return;
if ( isRising )
{
RideSeats.WorldPosition = Vector3.Lerp( RideSeats.WorldPosition, TopPos.WorldPosition, Time.Delta * riseSpeed );
if ( RideSeats.WorldPosition.Distance( TopPos.WorldPosition ) < 10f )
{
isRising = false;
waitingToDrop = true;
waitTimer = waitDuration;
}
}
else if ( waitingToDrop )
{
if ( waitTimer <= 0f )
{
waitingToDrop = false;
}
}
else
{
RideSeats.WorldPosition = Vector3.Lerp( RideSeats.WorldPosition, BottomPos.WorldPosition, Time.Delta * dropSpeed );
if ( RideSeats.WorldPosition.Distance( BottomPos.WorldPosition ) < 1f )
{
EndRide();
}
}
}
protected override void OnRideStarted()
{
base.OnRideStarted();
isRising = true;
waitingToDrop = false;
waitTimer = 0f;
RideSeats.WorldPosition = BottomPos.WorldPosition;
}
protected override void OnRideEnded()
{
base.OnRideEnded();
RideSeats.WorldPosition = BottomPos.WorldPosition;
}
}