package jalse.entities.annotations; import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; import java.util.concurrent.TimeUnit; import jalse.actions.Action; import jalse.actions.ActionScheduler; import jalse.entities.Entity; import jalse.entities.functions.ScheduleForActorFunction; import jalse.entities.methods.ScheduleForActorMethod; /** * An {@link Entity} type annotation for * {@link ActionScheduler#scheduleForActor(Action, long, long, TimeUnit)}. <br> * <br> * See {@link ScheduleForActorFunction} for acceptable method signatures. * * @author Elliot Ford * * @see ScheduleForActorMethod * */ @Target(ElementType.METHOD) @Retention(RetentionPolicy.RUNTIME) public @interface ScheduleForActor { /** * Default initial delay ({@code 0L}). */ public static final long DEFAULT_INITIAL_DELAY = 0L; /** * Default repeat period ({@code 0L}). */ public static final long DEFAULT_PERIOD = 0L; /** * Default time unit (nanoseconds). */ public static final TimeUnit DEFAULT_TIMEUNIT = TimeUnit.NANOSECONDS; /** * Action to schedule. * * @return Action type. * */ Class<? extends Action<Entity>>action(); /** * Initial delay before executing. * * @return Initial delay. * * @see ScheduleForActor#DEFAULT_INITIAL_DELAY */ long initialDelay() default DEFAULT_INITIAL_DELAY; /** * Repeat period. * * @return Period. * * @see ScheduleForActor#DEFAULT_PERIOD */ long period() default DEFAULT_PERIOD; /** * Time unit for scheduling information. * * @return Time unit. * * @see ScheduleForActor#DEFAULT_TIMEUNIT */ TimeUnit unit() default TimeUnit.NANOSECONDS; }