1 package cz.cuni.amis.pogamut.ut2004.communication.translator.bot.state;
2
3 import java.util.HashSet;
4 import java.util.Set;
5
6 import cz.cuni.amis.fsm.FSMState;
7 import cz.cuni.amis.fsm.FSMTransition;
8 import cz.cuni.amis.fsm.IFSMState;
9 import cz.cuni.amis.pogamut.base.communication.messages.InfoMessage;
10 import cz.cuni.amis.pogamut.base.communication.translator.event.IWorldChangeEvent;
11 import cz.cuni.amis.pogamut.ut2004.communication.messages.gbinfomessages.BotKilled;
12 import cz.cuni.amis.pogamut.ut2004.communication.messages.gbinfomessages.PathListStart;
13 import cz.cuni.amis.pogamut.ut2004.communication.translator.TranslatorContext;
14 import cz.cuni.amis.pogamut.ut2004.communication.translator.TranslatorMessages;
15 import cz.cuni.amis.pogamut.ut2004.communication.translator.UnexpectedMessageException;
16 import cz.cuni.amis.pogamut.ut2004.communication.translator.bot.support.AbstractBotFSMState;
17 import cz.cuni.amis.pogamut.ut2004.communication.worldview.objects.IGBViewable;
18
19
20
21
22
23 @FSMState(map = {
24 @FSMTransition(
25 state = BotDeadState.class,
26 symbol = {BotKilled.class },
27 transition = {}
28 ),
29 @FSMTransition(
30 state = PathAcceptState.class,
31 symbol = {PathListStart.class },
32 transition = {}
33 )
34 }
35 )
36 public class BotAliveState extends AbstractBotFSMState<InfoMessage, TranslatorContext> {
37
38
39
40
41 private Set<IGBViewable> lastBatch = new HashSet<IGBViewable>();
42
43
44
45
46 private Set<IGBViewable> currentBatch = new HashSet<IGBViewable>();
47
48 public void stateEntering(TranslatorContext context, IFSMState<InfoMessage, TranslatorContext> arg1, InfoMessage arg2) {
49 }
50
51 public void stateSymbol(TranslatorContext context, InfoMessage obj) {
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87 context.getEventQueue().pushEvent((IWorldChangeEvent) obj);
88 }
89
90 public void stateLeaving(TranslatorContext context, IFSMState<InfoMessage, TranslatorContext> arg1, InfoMessage symbol) {
91 if (symbol instanceof BotKilled) {
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107 if (!(symbol instanceof IWorldChangeEvent)) throw new UnexpectedMessageException(TranslatorMessages.messageNotWorldEvent(this, symbol), context.getLogger(), this);
108 context.getEventQueue().pushEvent((IWorldChangeEvent) symbol);
109 }
110 }
111
112 public void init(TranslatorContext arg0) {
113 }
114
115 public void restart(TranslatorContext arg0) {
116 lastBatch.clear();
117 currentBatch.clear();
118 }
119
120 }