View Javadoc

1   package cz.cuni.amis.pogamut.udk.bot.command;
2   
3   import java.util.logging.Logger;
4   
5   import cz.cuni.amis.pogamut.udk.bot.impl.UDKBot;
6   import cz.cuni.amis.pogamut.unreal.communication.messages.UnrealId;
7   import cz.cuni.amis.pogamut.udk.communication.messages.gbcommands.SendMessage;
8   
9   /**
10   * Class providing Pogamut2 UT2004 communication commands - send message, set
11   * dialogs, text bubble...
12   * 
13   * @author Michal 'Knight' Bida
14   */
15  public class Communication extends BotCommands {
16  
17  	/**
18  	 * Sends global message to UT2004 in-game chat. Everyone will see it, bots
19  	 * will receive information too.
20  	 * 
21  	 * (issues GB MESSAGE command)
22  	 * 
23  	 * @param text
24  	 *            Text of the message to send.
25  	 * 
26  	 * @see sendTeamTextMessage(String)
27  	 * @see sendPrivateTextMessage(UnrealId, String)
28  	 */
29  	public void sendGlobalTextMessage(String text) {
30  		SendMessage message = new SendMessage();
31  
32  		message.setGlobal(true);
33  		message.setText(text);
34  		// This will cause that the text bubble won't be shown.
35  		message.setFadeOut(-1);
36  
37  		agent.getAct().act(message);
38  	}
39  
40  	/**
41  	 * Sends a message to UT2004 in-game chat. Only members of the bot current
42  	 * team will see it. If there are no teams (e.g. no team game, just simple
43  	 * deathmatch) it will be handled as global message.
44  	 * 
45  	 * (issues GB MESSAGE command)
46  	 * 
47  	 * @param text
48  	 *            Text of the message to send.
49  	 * 
50  	 * @see sendGlobalTextMessage(String)
51  	 * @see sendPrivateTextMessage(UnrealId, String)
52  	 */
53  	public void sendTeamTextMessage(String text) {
54  		SendMessage message = new SendMessage();
55  
56  		message.setGlobal(false);
57  		message.setText(text);
58  		// This will cause that the text bubble won't be shown.
59  		message.setFadeOut(-1);
60  
61  		agent.getAct().act(message);
62  	}
63  
64  	/**
65  	 * Sends a private message to desired bot (specified by Id). There will be
66  	 * added "Private:" string in front of the message. Works just for GameBots
67  	 * RemoteBots. If the id is not of RemoteBot nothing will happen - the
68  	 * message won't be sent to anyone.
69  	 * 
70  	 * @param id
71  	 *            Here we can specify Id of the bot, that will receive this
72  	 *            message privately.
73  	 * @param text
74  	 *            Text of the message to send.
75  	 * 
76  	 * @see sendGlobalTextMessage(String)
77  	 * @see sendTeamTextMessage(String)
78  	 * 
79  	 */
80  	public void sendPrivateTextMessage(UnrealId id, String text) {
81  		SendMessage message = new SendMessage();
82  
83  		message.setId(id);
84  		message.setText(text);
85  		// This will cause that the text bubble won't be shown.
86  		message.setFadeOut(-1);
87  
88  		agent.getAct().act(message);
89  	}
90  
91  	/**
92  	 * Sends a global message to UT2004 in-game chat and sets the text bubble
93  	 * visible to all human players above the bot head. Everyone will receive
94  	 * the message. The bubble will stay as long as specified in fadeOut
95  	 * variable.
96  	 * 
97  	 * @param text
98  	 *            Text of the message and bubble.
99  	 * @param fadeOut
100 	 *            Sets how long the bubble should stay visible (in seconds,
101 	 *            counted as 12 + fadeOut seconds - probably due to some UT
102 	 *            mechanics). If -1 the bubble won't be shown at all.
103 	 * 
104 	 * @see sendPrivateBubbleMessage(UnrealId, String, double)
105 	 * @see sendPrivateBubbleMessage(UnrealId, String, double)
106 	 */
107 	public void sendGlobalBubbleMessage(String text, double fadeOut) {
108 		SendMessage message = new SendMessage();
109 
110 		message.setGlobal(true);
111 		message.setText(text);
112 		message.setFadeOut(fadeOut);
113 
114 		agent.getAct().act(message);
115 	}
116 
117 	/**
118 	 * Sends a message to UT2004 in-game chat and sets the text bubble visible
119 	 * to all human players above the bot head. The message will be send just to
120 	 * players and bots from the same team (although other human players will
121 	 * still see it through text bubble). If not team game, treated as global
122 	 * message. The bubble will stay as long as specified in fadeOut variable.
123 	 * 
124 	 * @param text
125 	 *            Text of the message and bubble.
126 	 * @param fadeOut
127 	 *            Sets how long the bubble should stay visible (in seconds,
128 	 *            counted as 12 + fadeOut seconds - probably due to some UT
129 	 *            mechanics). If -1 the bubble won't be shown at all.
130 	 * 
131 	 * @see sendGlobalBubbleMessage(String, double)
132 	 * @see sendPrivateBubbleMessage(UnrealId, String, double)
133 	 */
134 	public void sendTeamBubbleMessage(String text, double fadeOut) {
135 		SendMessage message = new SendMessage();
136 
137 		message.setGlobal(false);
138 		message.setText(text);
139 		message.setFadeOut(fadeOut);
140 
141 		agent.getAct().act(message);
142 	}
143 
144 	/**
145 	 * Sends a private message to desired bot (specified by Id). There will be
146 	 * added "Private:" string in front of the message. Also sets the text
147 	 * bubble above the bot head, that will be visible to all human players. The
148 	 * message can be received just by GameBots RemoteBots (although all human
149 	 * players will see it through text bubble).
150 	 * 
151 	 * @param id
152 	 *            Here we can specify Id of the bot, that will receive this
153 	 *            message privately. Other players will see this message through
154 	 *            bubble too.
155 	 * @param text
156 	 *            Text of the message and bubble.
157 	 * @param fadeOut
158 	 *            Sets how long the bubble should stay visible (in seconds,
159 	 *            counted as 12 + fadeOut seconds - probably due to some UT
160 	 *            mechanics). If -1 the bubble won't be shown at all.
161 	 * 
162 	 * @see sendGlobalBubbleMessage(String, double)
163 	 * @see sendTeamBubbleMessage(String, double)
164 	 */
165 	public void sendPrivateBubbleMessage(UnrealId id, String text,
166 			double fadeOut) {
167 		SendMessage message = new SendMessage();
168 
169 		message.setId(id);
170 		message.setText(text);
171 		message.setFadeOut(fadeOut);
172 
173 		agent.getAct().act(message);
174 	}
175 
176 	/**
177 	 * Constructor. Setups the command module based on given agent and logger.
178 	 * 
179 	 * @param agent
180 	 *            AbstractUT2004Bot we will send commands for
181 	 * @param log
182 	 *            Logger to be used for logging runtime/debug info.
183 	 */
184 	public Communication(UDKBot agent, Logger log) {
185 		super(agent, log);
186 	}
187 
188 }