1 package cz.cuni.amis.pogamut.base.component.bus.event;
2
3 import cz.cuni.amis.pogamut.base.component.IComponent;
4 import cz.cuni.amis.pogamut.base.component.bus.IComponentEvent;
5
6 /**
7 * This event is similar to {@link IStartingEvent}, it marks that the component is going to start.
8 * In contrast to starting event, it is additionally telling that after the start, the component is going to be paused,
9 * i.e., it won't broadcast {@link IStartedEvent} but it will broadcast {@link IPausedEvent}.
10 * <p><p>
11 * Such event is needed if we need to synchronize the start of the multi-agent simulation where we have to
12 * <ol>
13 * <li>construct all agent instances</li>
14 * <li>start all agent instances in paused state</li>
15 * <li>resume all agent instances at once</li>
16 * </ol>
17 * Otherwise we're facing the trouble that some agent will become effective in the environment before others crippling the plausibility of
18 * such simulation and violating agent's assumptions (that there are comrades / enemies present in the environment from the beginning of the simulation).
19 *
20 * @author Jimmy
21 *
22 * @param <SOURCE>
23 */
24 public interface IStartingPausedEvent<SOURCE extends IComponent> extends IComponentEvent<SOURCE> {
25
26 /**
27 * Provides human readable information why the component is starting.
28 * @return
29 */
30 public String getMessage();
31
32 }