AI/ActionSystem/Actions/Staff/RepairRideAction.cs
namespace HC3;

public sealed class RepairRideAction : BehaviorTreeAction
{
	[Sync( SyncFlags.FromHost )]
	private BasicRide Ride { get; set; }

	private Staff Staff => Agent as Staff;

	public override float Score()
	{
		if ( !Staff.IsValid() ) return 0f;
		if ( Ride.IsValid() && Ride.IsBroken ) return 300f;

		Ride = Scene.GetAll<BasicRide>().FirstOrDefault( x => x.IsBroken && GridManager.IsWalkable( x.GetExit(), WorldPosition ) );
		return Ride.IsValid() ? 300f : 0f;
	}

	protected override Node BuildTree()
	{
		return new SequenceNode( new()
		{
			new MoveToNode( Agent, Ride.GetExit(), $"Going to repair {Ride.Title}" ),
			new RepairRideNode( Staff, Ride )
		} );
	}

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

		Staff.SetSequenceOverride( null );
	}
}