View Javadoc

1   package cz.cuni.amis.pogamut.udk.communication.translator.bot.state;
2   
3   import cz.cuni.amis.fsm.FSMState;
4   import cz.cuni.amis.fsm.FSMTransition;
5   import cz.cuni.amis.fsm.IFSMState;
6   import cz.cuni.amis.pogamut.base.communication.messages.InfoMessage;
7   import cz.cuni.amis.pogamut.udk.communication.messages.gbinfomessages.PlayerJoinsGame;
8   import cz.cuni.amis.pogamut.udk.communication.messages.gbinfomessages.PlayerKilled;
9   import cz.cuni.amis.pogamut.udk.communication.messages.gbinfomessages.PlayerLeft;
10  import cz.cuni.amis.pogamut.udk.communication.messages.gbinfomessages.Spawn;
11  import cz.cuni.amis.pogamut.udk.communication.translator.TranslatorContext;
12  import cz.cuni.amis.pogamut.udk.communication.translator.bot.support.AbstractBotFSMState;
13  import cz.cuni.amis.pogamut.udk.communication.translator.shared.events.BotFirstSpawned;
14  
15  /**
16   * FSM switches into this state when PlayerList is transmitted during the handshake. It sends InitCommandRequest event
17   * and waits for Spawn message and then it sends BotFirstSpawned event. 
18   * @author Jimmy
19   */
20  @FSMState(map = { 
21  					@FSMTransition(
22  							state = BotAliveState.class, 
23  							symbol = { Spawn.class }, 
24  							transition = {}
25  					)
26  				}
27  )
28  public class FirstSpawnExpectedState extends AbstractBotFSMState<InfoMessage, TranslatorContext> {
29      
30  	@Override
31  	public void init(TranslatorContext context) {
32  	}
33  
34  	@Override
35  	public void restart(TranslatorContext context) {
36  	}
37  
38  	@Override
39  	public void stateEntering(TranslatorContext context,
40  			IFSMState<InfoMessage, TranslatorContext> fromState,
41  			InfoMessage symbol) {
42  	}
43  
44  	@Override
45  	public void stateLeaving(TranslatorContext context,
46  			IFSMState<InfoMessage, TranslatorContext> toState, InfoMessage symbol) {		
47  		context.getEventQueue().pushEvent(new BotFirstSpawned());
48  		context.getEventQueue().pushEvent((Spawn)symbol);
49  	}
50  
51  	@Override
52  	public void stateSymbol(TranslatorContext context, InfoMessage symbol) {
53  		if (symbol instanceof PlayerKilled) context.getEventQueue().pushEvent((PlayerKilled)symbol);
54  		else if (symbol instanceof PlayerLeft) context.getEventQueue().pushEvent((PlayerLeft)symbol);
55  		else context.getEventQueue().pushEvent((PlayerJoinsGame)symbol);		
56  	}
57  
58  }