1
2
3
4
5
6 package cz.cuni.amis.pogamut.ut2004.communication.translator.observer.state;
7
8 import cz.cuni.amis.fsm.FSMState;
9 import cz.cuni.amis.fsm.FSMTransition;
10 import cz.cuni.amis.fsm.IFSMState;
11 import cz.cuni.amis.pogamut.base.communication.messages.InfoMessage;
12 import cz.cuni.amis.pogamut.base.communication.translator.event.IWorldChangeEvent;
13 import cz.cuni.amis.pogamut.ut2004.communication.messages.gbinfomessages.MapList;
14 import cz.cuni.amis.pogamut.ut2004.communication.messages.gbinfomessages.MapListEnd;
15 import cz.cuni.amis.pogamut.ut2004.communication.messages.gbinfomessages.MapListStart;
16 import cz.cuni.amis.pogamut.ut2004.communication.messages.gbinfomessages.Player;
17 import cz.cuni.amis.pogamut.ut2004.communication.translator.TranslatorContext;
18 import cz.cuni.amis.pogamut.ut2004.communication.translator.observer.support.ObserverListState;
19 import cz.cuni.amis.pogamut.ut2004.communication.translator.shared.events.MapListObtained;
20
21
22
23
24
25 @FSMState(map={@FSMTransition(
26 state=ObserverRunningState.class,
27 symbol={MapListEnd.class},
28 transition={})}
29 )
30 public class MapListState extends ObserverListState<MapList, TranslatorContext> {
31
32 public MapListState() {
33 super(MapListStart.class, MapList.class, MapListEnd.class);
34 }
35
36 @Override
37 public void stateLeaving(TranslatorContext context,
38 IFSMState<InfoMessage, TranslatorContext> toState, InfoMessage symbol) {
39 super.stateLeaving(context, toState, symbol);
40 long simTime =
41 (symbol instanceof IWorldChangeEvent ? ((IWorldChangeEvent)symbol).getSimTime() : 0);
42 context.getEventQueue().pushEvent(new MapListObtained(getList(), simTime));
43 newList();
44 }
45
46 @Override
47 protected void innerStateSymbol(TranslatorContext context,
48 InfoMessage symbol) {
49 super.innerStateSymbol(context, symbol);
50 if (symbol instanceof Player) {
51 context.getEventQueue().pushEvent((MapList)symbol);
52 }
53 }
54
55 }
56