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