Park/Rides/Queues/QueueSign.cs
using HC3;
using HC3.UI;

/// <summary>
/// A sign that is placed at the entrance of a queue to display the ride's name and open/closed status.
/// </summary>
public sealed class QueueSign : Component, IInspectable
{
	[Property] private SignPanel Panel { get; set; }

	public BasicRide Ride { get; private set; }

	public void SetRide( BasicRide ride )
	{
		Ride = ride;

		Ride.OnTitleChanged += OnTitleChanged;
		Ride.OnOpenStateChanged += OnOpenStateChanged;

		UpdateText();
	}

	private void OnTitleChanged( string s ) => UpdateText();
	private void OnOpenStateChanged( OpenState state ) => UpdateText();

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

		if ( Ride.IsValid() )
		{
			Ride.OnTitleChanged -= OnTitleChanged;
			Ride.OnOpenStateChanged -= OnOpenStateChanged;
		}
	}

	public void UpdateText()
	{
		if ( !Panel.IsValid() ) return;

		if ( !Ride.IsAvailable() )
		{
			Panel.Text = "CLOSED";
			Panel.Color = Color.Red;
		}
		else
		{
			Panel.Text = Ride.Title;
			Panel.Color = Color.White;
		}
	}

	Window IInspectable.Select()
	{
		if ( !Ride.IsValid() ) return null;

		var inspector = new BuildingInspector();
		inspector.Building = Ride;

		return inspector;
	}
}