using MfGames.Gallium;
namespace MfGames.Nitride.Temporal.Schedules;
///
/// A schedule is a specific schedule that can be applied to an entity to make
/// changes based on components.
///
public interface ISchedule
{
///
/// Applies the schedule changes to the entity and returns the results.
///
/// The entity to update.
/// The service to use for time.
///
/// The modified entity, if the changes can be applied, otherwise the same
/// entity.
///
Entity Apply(
Entity entity,
TimeService timeService);
///
/// Determines if a schedule applies to a given entity.
///
/// The entity to test.
/// True if the schedule applies to the given entity, otherwise false.
bool CanApply(Entity entity);
}