ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/deliantra/Deliantra-Client/bin/cfplus
(Generate patch)

Comparing deliantra/Deliantra-Client/bin/cfplus (file contents):
Revision 1.15 by root, Sat May 27 19:49:07 2006 UTC vs.
Revision 1.27 by elmex, Mon May 29 20:22:33 2006 UTC

81our $LOGVIEW; 81our $LOGVIEW;
82our $CONSOLE; 82our $CONSOLE;
83our $METASERVER; 83our $METASERVER;
84our $LOGIN_BUTTON; 84our $LOGIN_BUTTON;
85our $QUIT_DIALOG; 85our $QUIT_DIALOG;
86our $SERVER_SETUP;
86 87
87our $FLOORBOX; 88our $FLOORBOX;
88our $GAUGES; 89our $GAUGES;
89our $STATWIDS; 90our $STATWIDS;
90 91
97 98
98our $ALT_ENTER_MESSAGE; 99our $ALT_ENTER_MESSAGE;
99our $STATUSBOX; 100our $STATUSBOX;
100our $DEBUG_STATUS; 101our $DEBUG_STATUS;
101 102
103our $INV_WINDOW;
102our $INV; 104our $INV;
103our $INVR; 105our $INVR;
104our $INVR_LBL; 106our $INV_RIGHT_HB;
107
108our $BIND_WINDOW;
105 109
106sub status { 110sub status {
107 $STATUSBOX->add (CFClient::UI::Label::escape $_[0], pri => -10, group => "status", timeout => 10, fg => [1, 1, 0, 1]); 111 $STATUSBOX->add (CFClient::UI::Label::escape $_[0], pri => -10, group => "status", timeout => 10, fg => [1, 1, 0, 1]);
108} 112}
109 113
113 $DEBUG_STATUS->move ($WIDTH - $w, 0); 117 $DEBUG_STATUS->move ($WIDTH - $w, 0);
114} 118}
115 119
116sub start_game { 120sub start_game {
117 status "logging in..."; 121 status "logging in...";
122
123 $LOGIN_BUTTON->set_text ("Logout");
124 $SERVER_SETUP->hide;
118 125
119 my $mapsize = List::Util::min 32, List::Util::max 11, int $WIDTH * $CFG->{mapsize} * 0.01 / 32; 126 my $mapsize = List::Util::min 32, List::Util::max 11, int $WIDTH * $CFG->{mapsize} * 0.01 / 32;
120 127
121 my ($host, $port) = split /:/, $CFG->{host}; 128 my ($host, $port) = split /:/, $CFG->{host};
122 129
151 }; 158 };
152 159
153 if ($CONN) { 160 if ($CONN) {
154 CFClient::lowdelay fileno $CONN->{fh}; 161 CFClient::lowdelay fileno $CONN->{fh};
155 162
156 $LOGIN_BUTTON->set_text ("Logout");
157 status "login successful"; 163 status "login successful";
158
159 $BUTTONBAR->{children}[1]->emit ("activate")
160 if $BUTTONBAR->{children}[1]->{state};
161
162 } else { 164 } else {
163 status "unable to connect"; 165 status "unable to connect";
164 stop_game(); 166 stop_game();
165 } 167 }
166} 168}
167 169
168sub stop_game { 170sub stop_game {
171 $LOGIN_BUTTON->set_text ("Login");
172 $SERVER_SETUP->show;
173 $INV_WINDOW->hide;
174 $LOGVIEW->hide;
175
169 return unless $CONN; 176 return unless $CONN;
170 177
171 status "connection closed"; 178 status "connection closed";
172 $LOGIN_BUTTON->set_text ("Login"); 179
173 $CONN->destroy; 180 $CONN->destroy;
174 $CONN = 0; # false, does not autovivify 181 $CONN = 0; # false, does not autovivify
175
176 $BUTTONBAR->{children}[1]->emit ("activate")
177 unless $BUTTONBAR->{children}[1]->{state};
178} 182}
179 183
180sub client_setup { 184sub client_setup {
181 my $dialog = new CFClient::UI::FancyFrame 185 my $dialog = new CFClient::UI::FancyFrame
186 req_x => 1,
187 req_y => $HEIGHT * (1/8),
188 name => "client_setup",
182 title => "Client Setup", 189 title => "Client Setup",
183 child => (my $vbox = new CFClient::UI::VBox); 190 child => (my $vbox = new CFClient::UI::VBox);
184 $vbox->add (my $table = new CFClient::UI::Table expand => 1, col_expand => [0, 1]); 191 $vbox->add (my $table = new CFClient::UI::Table expand => 1, col_expand => [0, 1]);
185 192
186 $table->add (0, 0, new CFClient::UI::Label valign => 0, align => 1, text => "Video Mode"); 193 $table->add (0, 0, new CFClient::UI::Label valign => 0, align => 1, text => "Video Mode");
201 208
202 $table->add (0, $row, new CFClient::UI::Label valign => 0, align => 1, text => "Fullscreen"); 209 $table->add (0, $row, new CFClient::UI::Label valign => 0, align => 1, text => "Fullscreen");
203 $table->add (1, $row++, new CFClient::UI::CheckBox 210 $table->add (1, $row++, new CFClient::UI::CheckBox
204 state => $CFG->{fullscreen}, 211 state => $CFG->{fullscreen},
205 tooltip => "Bring the client into fullscreen mode.", 212 tooltip => "Bring the client into fullscreen mode.",
206 connect_changed => sub { 213 on_changed => sub {
207 my ($self, $value) = @_; 214 my ($self, $value) = @_;
208 $CFG->{fullscreen} = $value; 215 $CFG->{fullscreen} = $value;
209 } 216 }
210 ); 217 );
211 218
212 $table->add (0, $row, new CFClient::UI::Label valign => 0, align => 1, text => "Fast & Ugly"); 219 $table->add (0, $row, new CFClient::UI::Label valign => 0, align => 1, text => "Fast & Ugly");
213 $table->add (1, $row++, new CFClient::UI::CheckBox 220 $table->add (1, $row++, new CFClient::UI::CheckBox
214 state => $CFG->{fast}, 221 state => $CFG->{fast},
215 tooltip => "Lower the visual quality considerably to speed up rendering.", 222 tooltip => "Lower the visual quality considerably to speed up rendering.",
216 connect_changed => sub { 223 on_changed => sub {
217 my ($self, $value) = @_; 224 my ($self, $value) = @_;
218 $CFG->{fast} = $value; 225 $CFG->{fast} = $value;
219 } 226 }
220 ); 227 );
221 228
222 $table->add (0, $row, new CFClient::UI::Label valign => 0, align => 1, text => "Map Scale"); 229 $table->add (0, $row, new CFClient::UI::Label valign => 0, align => 1, text => "Map Scale");
223 $table->add (1, $row++, new CFClient::UI::Slider 230 $table->add (1, $row++, new CFClient::UI::Slider
224 range => [(log $CFG->{map_scale}) / (log 2), -3, 1, 0, 1], 231 range => [(log $CFG->{map_scale}) / (log 2), -3, 1, 0, 1],
225 tooltip => "Enlarge or shrink the displayed map. Changes are instant.", 232 tooltip => "Enlarge or shrink the displayed map. Changes are instant.",
226 connect_changed => sub { 233 on_changed => sub {
227 my ($self, $value) = @_; 234 my ($self, $value) = @_;
228 $CFG->{map_scale} = 2 ** $value; 235 $CFG->{map_scale} = 2 ** $value;
229 } 236 }
230 ); 237 );
231 238
232 $table->add (0, $row, new CFClient::UI::Label valign => 0, align => 1, text => "Fog of War"); 239 $table->add (0, $row, new CFClient::UI::Label valign => 0, align => 1, text => "Fog of War");
233 $table->add (1, $row++, new CFClient::UI::CheckBox 240 $table->add (1, $row++, new CFClient::UI::CheckBox
234 state => $CFG->{fow_enable}, 241 state => $CFG->{fow_enable},
235 tooltip => "<b>Fog-of-War</b> marks areas that cannot be seen by the player. Changes are instant.", 242 tooltip => "<b>Fog-of-War</b> marks areas that cannot be seen by the player. Changes are instant.",
236 connect_changed => sub { 243 on_changed => sub {
237 my ($self, $value) = @_; 244 my ($self, $value) = @_;
238 $CFG->{fow_enable} = $value; 245 $CFG->{fow_enable} = $value;
239 } 246 }
240 ); 247 );
241 248
242 $table->add (0, $row, new CFClient::UI::Label valign => 0, align => 1, text => "FoW Intensity"); 249 $table->add (0, $row, new CFClient::UI::Label valign => 0, align => 1, text => "FoW Intensity");
243 $table->add (1, $row++, new CFClient::UI::Slider 250 $table->add (1, $row++, new CFClient::UI::Slider
244 range => [$CFG->{fow_intensity}, 0, 1, 0, 1 / 256], 251 range => [$CFG->{fow_intensity}, 0, 1, 0, 1 / 256],
245 tooltip => "<b>Fog of War Lightness.</b> The higher the intensity, the lighter the Fog-of-War color. Changes are instant.", 252 tooltip => "<b>Fog of War Lightness.</b> The higher the intensity, the lighter the Fog-of-War color. Changes are instant.",
246 connect_changed => sub { 253 on_changed => sub {
247 my ($self, $value) = @_; 254 my ($self, $value) = @_;
248 $CFG->{fow_intensity} = $value; 255 $CFG->{fow_intensity} = $value;
249 } 256 }
250 ); 257 );
251 258
252 $table->add (0, $row, new CFClient::UI::Label valign => 0, align => 1, text => "FoW Smooth"); 259 $table->add (0, $row, new CFClient::UI::Label valign => 0, align => 1, text => "FoW Smooth");
253 $table->add (1, $row++, new CFClient::UI::CheckBox 260 $table->add (1, $row++, new CFClient::UI::CheckBox
254 state => $CFG->{fow_smooth}, 261 state => $CFG->{fow_smooth},
255 tooltip => "Smooth the Fog-of-War a bit to make it more realistic. Changes are instant.", 262 tooltip => "Smooth the Fog-of-War a bit to make it more realistic. Changes are instant.",
256 connect_changed => sub { 263 on_changed => sub {
257 my ($self, $value) = @_; 264 my ($self, $value) = @_;
258 $CFG->{fow_smooth} = $value; 265 $CFG->{fow_smooth} = $value;
259 status "Fog of War smoothing requires OpenGL 1.2 or higher" if $CFClient::OpenGL::GL_VERSION < 1.2; 266 status "Fog of War smoothing requires OpenGL 1.2 or higher" if $CFClient::OpenGL::GL_VERSION < 1.2;
260 } 267 }
261 ); 268 );
262 269
263 $table->add (0, $row, new CFClient::UI::Label valign => 0, align => 1, text => "GUI Fontsize"); 270 $table->add (0, $row, new CFClient::UI::Label valign => 0, align => 1, text => "GUI Fontsize");
264 $table->add (1, $row++, new CFClient::UI::Slider 271 $table->add (1, $row++, new CFClient::UI::Slider
265 range => [$CFG->{gui_fontsize}, 0.5, 2, 0, 0.1], 272 range => [$CFG->{gui_fontsize}, 0.5, 2, 0, 0.1],
266 tooltip => "The base font size used by most GUI elements that do not have their own setting.", 273 tooltip => "The base font size used by most GUI elements that do not have their own setting.",
267 connect_changed => sub { $CFG->{gui_fontsize} = $_[1] }, 274 on_changed => sub { $CFG->{gui_fontsize} = $_[1] },
268 ); 275 );
269 276
270 $table->add (0, $row, new CFClient::UI::Label valign => 0, align => 1, text => "Message Fontsize"); 277 $table->add (0, $row, new CFClient::UI::Label valign => 0, align => 1, text => "Message Fontsize");
271 $table->add (1, $row++, new CFClient::UI::Slider 278 $table->add (1, $row++, new CFClient::UI::Slider
272 range => [$CFG->{log_fontsize}, 0.5, 2, 0, 0.1], 279 range => [$CFG->{log_fontsize}, 0.5, 2, 0, 0.1],
273 tooltip => "The font size used by the <b>message/server log</b> window only. Changes are instant.", 280 tooltip => "The font size used by the <b>message/server log</b> window only. Changes are instant.",
274 connect_changed => sub { $LOGVIEW->set_fontsize ($CFG->{log_fontsize} = $_[1]) }, 281 on_changed => sub { $LOGVIEW->set_fontsize ($CFG->{log_fontsize} = $_[1]) },
275 ); 282 );
276 283
277 $table->add (0, $row, new CFClient::UI::Label valign => 0, align => 1, text => "Stats Fontsize"); 284 $table->add (0, $row, new CFClient::UI::Label valign => 0, align => 1, text => "Stats Fontsize");
278 285
279 $table->add (1, $row++, new CFClient::UI::Slider 286 $table->add (1, $row++, new CFClient::UI::Slider
280 range => [$CFG->{stat_fontsize}, 0.5, 2, 0, 0.1], 287 range => [$CFG->{stat_fontsize}, 0.5, 2, 0, 0.1],
281 tooltip => "The font size used by the <b>statistics window</b> only. Changes are instant.", 288 tooltip => "The font size used by the <b>statistics window</b> only. Changes are instant.",
282 connect_changed => sub { 289 on_changed => sub {
283 $CFG->{stat_fontsize} = $_[1]; 290 $CFG->{stat_fontsize} = $_[1];
284 &set_stats_window_fontsize; 291 &set_stats_window_fontsize;
285 } 292 }
286 ); 293 );
287 294
288 $table->add (0, $row, new CFClient::UI::Label valign => 0, align => 1, text => "Gauge fontsize"); 295 $table->add (0, $row, new CFClient::UI::Label valign => 0, align => 1, text => "Gauge fontsize");
289 $table->add (1, $row++, new CFClient::UI::Slider 296 $table->add (1, $row++, new CFClient::UI::Slider
290 range => [$CFG->{gauge_fontsize}, 0.5, 2, 0, 0.1], 297 range => [$CFG->{gauge_fontsize}, 0.5, 2, 0, 0.1],
291 tooltip => "Adjusts the fontsize of the gauges at the bottom right. Changes are instant.", 298 tooltip => "Adjusts the fontsize of the gauges at the bottom right. Changes are instant.",
292 connect_changed => sub { 299 on_changed => sub {
293 $CFG->{gauge_fontsize} = $_[1]; 300 $CFG->{gauge_fontsize} = $_[1];
294 &set_gauge_window_fontsize; 301 &set_gauge_window_fontsize;
295 } 302 }
296 ); 303 );
297 304
298 $table->add (0, $row, new CFClient::UI::Label valign => 0, align => 1, text => "Gauge size"); 305 $table->add (0, $row, new CFClient::UI::Label valign => 0, align => 1, text => "Gauge size");
299 $table->add (1, $row++, new CFClient::UI::Slider 306 $table->add (1, $row++, new CFClient::UI::Slider
300 range => [$CFG->{gauge_size}, 0.2, 0.8], 307 range => [$CFG->{gauge_size}, 0.2, 0.8],
301 tooltip => "Adjust the size of the stats gauges at the bottom right. Changes are instant.", 308 tooltip => "Adjust the size of the stats gauges at the bottom right. Changes are instant.",
302 connect_changed => sub { 309 on_changed => sub {
303 $CFG->{gauge_size} = $_[1]; 310 $CFG->{gauge_size} = $_[1];
304 $GAUGES->{win}->set_size ($WIDTH, int $HEIGHT * $CFG->{gauge_size}); 311 $GAUGES->{win}->set_size ($WIDTH, int $HEIGHT * $CFG->{gauge_size});
305 } 312 }
306 ); 313 );
307 314
308 $table->add (1, $row++, new CFClient::UI::Button 315 $table->add (1, $row++, new CFClient::UI::Button
309 expand => 1, align => 0, text => "Apply", 316 expand => 1, align => 0, text => "Apply",
310 tooltip => "Apply the video settings", 317 tooltip => "Apply the video settings",
311 connect_activate => sub { 318 on_activate => sub {
312 video_shutdown (); 319 video_shutdown ();
313 video_init (); 320 video_init ();
314 } 321 }
315 ); 322 );
316 323
317 $table->add (0, $row, new CFClient::UI::Label valign => 0, align => 1, text => "Audio Enable"); 324 $table->add (0, $row, new CFClient::UI::Label valign => 0, align => 1, text => "Audio Enable");
318 $table->add (1, $row++, new CFClient::UI::CheckBox 325 $table->add (1, $row++, new CFClient::UI::CheckBox
319 state => $CFG->{audio_enable}, 326 state => $CFG->{audio_enable},
320 tooltip => "<b>Master Audio Enable.</b> If enabled, sound effects and music will be played. If disabled, no audio will be used and the soundcard will not be opened.", 327 tooltip => "<b>Master Audio Enable.</b> If enabled, sound effects and music will be played. If disabled, no audio will be used and the soundcard will not be opened.",
321 connect_changed => sub { 328 on_changed => sub {
322 $CFG->{audio_enable} = $_[1]; 329 $CFG->{audio_enable} = $_[1];
323 } 330 }
324 ); 331 );
325# $table->add (0, 9, new CFClient::UI::Label valign => 0, align => 1, text => "Effects Volume"); 332# $table->add (0, 9, new CFClient::UI::Label valign => 0, align => 1, text => "Effects Volume");
326# $table->add (1, 8, new CFClient::UI::Slider range => [$CFG->{effects_volume}, 0, 128, 1], connect_changed => sub { 333# $table->add (1, 8, new CFClient::UI::Slider range => [$CFG->{effects_volume}, 0, 128, 1], on_changed => sub {
327# $CFG->{effects_volume} = $_[1]; 334# $CFG->{effects_volume} = $_[1];
328# }); 335# });
329 $table->add (0, $row, new CFClient::UI::Label valign => 0, align => 1, text => "Background Music"); 336 $table->add (0, $row, new CFClient::UI::Label valign => 0, align => 1, text => "Background Music");
330 $table->add (1, $row++, my $hbox = new CFClient::UI::HBox); 337 $table->add (1, $row++, my $hbox = new CFClient::UI::HBox);
331 $hbox->add (new CFClient::UI::CheckBox 338 $hbox->add (new CFClient::UI::CheckBox
332 expand => 1, state => $CFG->{bgm_enable}, 339 expand => 1, state => $CFG->{bgm_enable},
333 tooltip => "If enabled, playing of background music is enabled. If disabled, no background music will be played.", 340 tooltip => "If enabled, playing of background music is enabled. If disabled, no background music will be played.",
334 connect_changed => sub { 341 on_changed => sub {
335 $CFG->{bgm_enable} = $_[1]; 342 $CFG->{bgm_enable} = $_[1];
336 } 343 }
337 ); 344 );
338 $hbox->add (new CFClient::UI::Slider 345 $hbox->add (new CFClient::UI::Slider
339 expand => 1, range => [$CFG->{bgm_volume}, 0, 1, 0, 1/128], 346 expand => 1, range => [$CFG->{bgm_volume}, 0, 1, 0, 1/128],
340 tooltip => "The volume of the background music. Changes are instant.", 347 tooltip => "The volume of the background music. Changes are instant.",
341 connect_changed => sub { 348 on_changed => sub {
342 $CFG->{bgm_volume} = $_[1]; 349 $CFG->{bgm_volume} = $_[1];
343 CFClient::MixMusic::volume $_[1] * 128; 350 CFClient::MixMusic::volume $_[1] * 128;
344 } 351 }
345 ); 352 );
346 353
347 $table->add (1, $row++, new CFClient::UI::Button 354 $table->add (1, $row++, new CFClient::UI::Button
348 expand => 1, align => 0, text => "Apply", 355 expand => 1, align => 0, text => "Apply",
349 tooltip => "Apply the audio settings", 356 tooltip => "Apply the audio settings",
350 connect_activate => sub { 357 on_activate => sub {
351 audio_shutdown (); 358 audio_shutdown ();
352 audio_init (); 359 audio_init ();
353 } 360 }
354 ); 361 );
355 362
357 $table->add (1, $row++, my $saycmd = new CFClient::UI::Entry 364 $table->add (1, $row++, my $saycmd = new CFClient::UI::Entry
358 text => $CFG->{say_command}, 365 text => $CFG->{say_command},
359 tooltip => "This is the command that will be used if you write a line in the message window entry or press <b>\"</b> in the map window. " 366 tooltip => "This is the command that will be used if you write a line in the message window entry or press <b>\"</b> in the map window. "
360 . "Usually you want to enter something like 'say' or 'shout' or 'gsay' here. " 367 . "Usually you want to enter something like 'say' or 'shout' or 'gsay' here. "
361 . "But you could also set it to <b>tell <i>playername</i></b> to only chat with that user.", 368 . "But you could also set it to <b>tell <i>playername</i></b> to only chat with that user.",
362 connect_changed => sub { 369 on_changed => sub {
363 my ($self, $value) = @_; 370 my ($self, $value) = @_;
364 $CFG->{say_command} = $value; 371 $CFG->{say_command} = $value;
365 } 372 }
366 ); 373 );
367 374
382 389
383sub make_gauge_window { 390sub make_gauge_window {
384 my $gh = int $HEIGHT * $CFG->{gauge_size}; 391 my $gh = int $HEIGHT * $CFG->{gauge_size};
385 392
386 my $win = new CFClient::UI::Frame ( 393 my $win = new CFClient::UI::Frame (
394 req_x => 0,
387 req_y => -1, 395 req_y => -1,
388 user_w => $WIDTH, 396 def_w => $WIDTH,
389 user_h => $gh, 397 def_h => $gh,
390 ); 398 );
391 399
392 $win->add (my $hbox = new CFClient::UI::HBox 400 $win->add (my $hbox = new CFClient::UI::HBox
393 children => [ 401 children => [
394 (new CFClient::UI::HBox expand => 1), 402 (new CFClient::UI::HBox expand => 1),
430 &set_gauge_window_fontsize; 438 &set_gauge_window_fontsize;
431 439
432 $win 440 $win
433} 441}
434 442
443
435sub make_stats_window { 444sub make_stats_window {
436 my $tgw = new CFClient::UI::FancyFrame title => "Stats"; 445 my $tgw = new CFClient::UI::FancyFrame
446 req_y => $HEIGHT * (2/8),
447 req_x => -1,
448 title => "Stats",
449 name => "stats_window";
437 450
438 $tgw->add (new CFClient::UI::Window child => my $vb = new CFClient::UI::VBox); 451 $tgw->add (new CFClient::UI::Window child => my $vb = new CFClient::UI::VBox);
439 $vb->add ($STATWIDS->{title} = new CFClient::UI::Label valign => 0, align => -1, text => "Title:", expand => 1, 452 $vb->add ($STATWIDS->{title} = new CFClient::UI::Label valign => 0, align => -1, text => "Title:", expand => 1,
440 can_hover => 1, can_events => 1, 453 can_hover => 1, can_events => 1,
441 tooltip => "Your name and title. You can change your title by using the <b>title</b> command, if supported by the server."); 454 tooltip => "Your name and title. You can change your title by using the <b>title</b> command, if supported by the server.");
688 $m = [$users, $host, $uptime, $version, $desc]; 701 $m = [$users, $host, $uptime, $version, $desc];
689 702
690 $y++; 703 $y++;
691 704
692 $table->add (0, $y, new CFClient::UI::VBox children => [ 705 $table->add (0, $y, new CFClient::UI::VBox children => [
693 (new CFClient::UI::Button text => "Use", connect_activate => sub { 706 (new CFClient::UI::Button text => "Use", on_activate => sub {
694 $HOST->set_text ($CFG->{host} = $host); 707 $HOST->set_text ($CFG->{host} = $host);
695 }), 708 }),
696 (new CFClient::UI::Empty expand => 1), 709 (new CFClient::UI::Empty expand => 1),
697 ]); 710 ]);
698 711
703 } 716 }
704 }); 717 });
705} 718}
706 719
707sub server_setup { 720sub server_setup {
708 my $dialog = new CFClient::UI::FancyFrame 721 my $dialog = $SERVER_SETUP = new CFClient::UI::FancyFrame
722 x => $WIDTH * (1/3),
723 y => $HEIGHT * (1/8),
724 name => "server_setup",
709 title => "Server Setup", 725 title => "Server Setup",
710 child => (my $vbox = new CFClient::UI::VBox); 726 child => (my $vbox = new CFClient::UI::VBox),
727 on_visibility_change => sub {
728 my ($self, $visible) = @_;
729 $self->center if $visible;
730 },
711 731 ;
732
712 $vbox->add (my $table = new CFClient::UI::Table expand => 1, col_expand => [0, 1]); 733 $vbox->add (my $table = new CFClient::UI::Table expand => 1, col_expand => [0, 1]);
713 $table->add (0, 2, new CFClient::UI::Label valign => 0, align => 1, text => "Host:Port"); 734 $table->add (0, 2, new CFClient::UI::Label valign => 0, align => 1, text => "Host:Port");
714 735
715 { 736 {
716 $table->add (1, 2, my $vbox = new CFClient::UI::VBox); 737 $table->add (1, 2, my $vbox = new CFClient::UI::VBox);
718 $vbox->add ( 739 $vbox->add (
719 my $HOST = new CFClient::UI::Entry 740 my $HOST = new CFClient::UI::Entry
720 expand => 1, 741 expand => 1,
721 text => $CFG->{host}, 742 text => $CFG->{host},
722 tooltip => "The hostname or ip address of the Crossfire(+) server to connect to", 743 tooltip => "The hostname or ip address of the Crossfire(+) server to connect to",
723 connect_changed => sub { 744 on_changed => sub {
724 my ($self, $value) = @_; 745 my ($self, $value) = @_;
725 $CFG->{host} = $value; 746 $CFG->{host} = $value;
726 } 747 }
727 ); 748 );
728 749
731 $vbox->add (new CFClient::UI::Flopper 752 $vbox->add (new CFClient::UI::Flopper
732 expand => 1, 753 expand => 1,
733 text => "Server List", 754 text => "Server List",
734 other => $METASERVER, 755 other => $METASERVER,
735 tooltip => "Show a list of available crossfire servers", 756 tooltip => "Show a list of available crossfire servers",
736 connect_open => sub { 757 on_open => sub {
737 update_metaserver $HOST; 758 update_metaserver $HOST;
738 } 759 }
739 ); 760 );
740 } 761 }
741 762
742 $table->add (0, 4, new CFClient::UI::Label valign => 0, align => 1, text => "Username"); 763 $table->add (0, 4, new CFClient::UI::Label valign => 0, align => 1, text => "Username");
743 $table->add (1, 4, new CFClient::UI::Entry 764 $table->add (1, 4, new CFClient::UI::Entry
744 text => $CFG->{user}, 765 text => $CFG->{user},
745 tooltip => "The name of your character on the server", 766 tooltip => "The name of your character on the server",
746 connect_changed => sub { 767 on_changed => sub {
747 my ($self, $value) = @_; 768 my ($self, $value) = @_;
748 $CFG->{user} = $value; 769 $CFG->{user} = $value;
749 } 770 }
750 ); 771 );
751 772
752 $table->add (0, 5, new CFClient::UI::Label valign => 0, align => 1, text => "Password"); 773 $table->add (0, 5, new CFClient::UI::Label valign => 0, align => 1, text => "Password");
753 $table->add (1, 5, new CFClient::UI::Entry 774 $table->add (1, 5, new CFClient::UI::Entry
754 text => $CFG->{password}, 775 text => $CFG->{password},
755 hidden => 1, 776 hidden => 1,
756 tooltip => "The password for your character", 777 tooltip => "The password for your character",
757 connect_changed => sub { 778 on_changed => sub {
758 my ($self, $value) = @_; 779 my ($self, $value) = @_;
759 $CFG->{password} = $value; 780 $CFG->{password} = $value;
760 } 781 }
761 ); 782 );
762 783
766 range => [$CFG->{mapsize}, 10, 100, 0, 1], 787 range => [$CFG->{mapsize}, 10, 100, 0, 1],
767 tooltip => "This is the size of the portion of the map update the server sends you. " 788 tooltip => "This is the size of the portion of the map update the server sends you. "
768 . "If you set this to a high value you will be able to see further, " 789 . "If you set this to a high value you will be able to see further, "
769 . "but you also increase bandwidth requirements and latency. " 790 . "but you also increase bandwidth requirements and latency. "
770 . "This option is only used once at log-in.", 791 . "This option is only used once at log-in.",
771 connect_changed => sub { 792 on_changed => sub {
772 my ($self, $value) = @_; 793 my ($self, $value) = @_;
773 794
774 $CFG->{mapsize} = $self->{range}[0] = $value = int $value; 795 $CFG->{mapsize} = $self->{range}[0] = $value = int $value;
775 }, 796 },
776 ); 797 );
783 . "This might increase or create lag, but increases the chances " 804 . "This might increase or create lag, but increases the chances "
784 . "of faces being ready for display when you encounter them. " 805 . "of faces being ready for display when you encounter them. "
785 . "It also uses up server bandwidth on every connect, " 806 . "It also uses up server bandwidth on every connect, "
786 . "so only set it if you really need to prefetch images. " 807 . "so only set it if you really need to prefetch images. "
787 . "This option can be set and unset any time.", 808 . "This option can be set and unset any time.",
788 connect_changed => sub { $CFG->{face_prefetch} = $_[1] }, 809 on_changed => sub { $CFG->{face_prefetch} = $_[1] },
789 ); 810 );
790 811
791 $table->add (0, 9, new CFClient::UI::Label valign => 0, align => 1, text => "Output-Count"); 812 $table->add (0, 9, new CFClient::UI::Label valign => 0, align => 1, text => "Output-Count");
792 $table->add (1, 9, new CFClient::UI::Entry 813 $table->add (1, 9, new CFClient::UI::Entry
793 text => $CFG->{output_count}, 814 text => $CFG->{output_count},
794 tooltip => "Should be set to 1 unless you know what you are doing. This option is only used once at log-in.", 815 tooltip => "Should be set to 1 unless you know what you are doing. This option is only used once at log-in.",
795 connect_changed => sub { $CFG->{output_count} = $_[1] }, 816 on_changed => sub { $CFG->{output_count} = $_[1] },
796 ); 817 );
797 818
798 $table->add (0, 10, new CFClient::UI::Label valign => 0, align => 1, text => "Output-Sync"); 819 $table->add (0, 10, new CFClient::UI::Label valign => 0, align => 1, text => "Output-Sync");
799 $table->add (1, 10, new CFClient::UI::Entry 820 $table->add (1, 10, new CFClient::UI::Entry
800 text => $CFG->{output_sync}, 821 text => $CFG->{output_sync},
801 tooltip => "Should be set to 1 unless you know what you are doing. This option is only used once at log-in.", 822 tooltip => "Should be set to 1 unless you know what you are doing. This option is only used once at log-in.",
802 connect_changed => sub { $CFG->{output_sync} = $_[1] }, 823 on_changed => sub { $CFG->{output_sync} = $_[1] },
803 ); 824 );
804 825
805 $table->add (1, 11, $LOGIN_BUTTON = new CFClient::UI::Button 826 $table->add (1, 11, $LOGIN_BUTTON = new CFClient::UI::Button
806 expand => 1, 827 expand => 1,
807 align => 0, 828 align => 0,
808 text => "Login", 829 text => "Login",
809 connect_activate => sub { 830 on_activate => sub {
810 $CONN ? stop_game 831 $CONN ? stop_game
811 : start_game; 832 : start_game;
812 }, 833 },
813 ); 834 );
814 835
815 $dialog 836 $dialog
816} 837}
817 838
818sub message_window { 839sub message_window {
819 my $window = new CFClient::UI::FancyFrame 840 my $window = new CFClient::UI::FancyFrame
841 name => "message_window",
820 title => "Messages", 842 title => "Messages",
821 border_bg => [1, 1, 1, 1], 843 border_bg => [1, 1, 1, 1],
822 bg => [0, 0, 0, 0.75], 844 bg => [0, 0, 0, 0.75],
845 req_x => -1,
846 req_y => 0,
823 user_w => int $::WIDTH / 3, 847 def_w => int $::WIDTH / 3,
824 user_h => int $::HEIGHT / 5, 848 def_h => int $::HEIGHT / 5,
825 child => (my $vbox = new CFClient::UI::VBox); 849 child => (my $vbox = new CFClient::UI::VBox);
826 850
827 $vbox->add ($LOGVIEW); 851 $vbox->add ($LOGVIEW);
828 852
829 $vbox->add (my $input = new CFClient::UI::Entry 853 $vbox->add (my $input = new CFClient::UI::Entry
830 tooltip => "<b>Chat Box</b>. If you enter a text and press return/enter here, the current <i>communication command</i> " 854 tooltip => "<b>Chat Box</b>. If you enter a text and press return/enter here, the current <i>communication command</i> "
831 . "from the client setup will be prepended (e.g. <b>shout</b>, <b>chat</b>...). " 855 . "from the client setup will be prepended (e.g. <b>shout</b>, <b>chat</b>...). "
832 . "If you prepend a slash (/), you will submit a command instead (similar to IRC). " 856 . "If you prepend a slash (/), you will submit a command instead (similar to IRC). "
833 . "A better way to submit commands (and the occasional chat command) is often the map command completer.", 857 . "A better way to submit commands (and the occasional chat command) is often the map command completer.",
834 connect_focus_in => sub { 858 on_focus_in => sub {
835 my ($input, $prev_focus) = @_; 859 my ($input, $prev_focus) = @_;
836 860
837 delete $input->{refocus_map}; 861 delete $input->{refocus_map};
838 862
839 if ($prev_focus == $MAPWIDGET && $input->{auto_activated}) { 863 if ($prev_focus == $MAPWIDGET && $input->{auto_activated}) {
840 $input->{refocus_map} = 1; 864 $input->{refocus_map} = 1;
841 } 865 }
842 delete $input->{auto_activated}; 866 delete $input->{auto_activated};
843 }, 867 },
844 connect_activate => sub { 868 on_activate => sub {
845 my ($input, $text) = @_; 869 my ($input, $text) = @_;
846 $input->set_text (''); 870 $input->set_text ('');
847 871
872 if ($text =~ /^\/bind\s+(.*)$/) {
873 CFClient::Recorder::open_binding_dialog ([$1]);
848 if ($text =~ /^\/(.*)/) { 874 } elsif ($text =~ /^\/(.*)/) {
849 $::CONN->user_send ($1); 875 $::CONN->user_send ($1);
850 } else { 876 } else {
851 my $say_cmd = $::CFG->{say_command} || 'say'; 877 my $say_cmd = $::CFG->{say_command} || 'say';
852 $::CONN->user_send ("$say_cmd $text"); 878 $::CONN->user_send ("$say_cmd $text");
853 } 879 }
854 if ($input->{refocus_map}) { 880 if ($input->{refocus_map}) {
855 delete $input->{refocus_map}; 881 delete $input->{refocus_map};
856 $MAPWIDGET->focus_in 882 $MAPWIDGET->focus_in
857 } 883 }
858 }, 884 },
859 connect_escape => sub { 885 on_escape => sub {
860 $MAPWIDGET->focus_in 886 $MAPWIDGET->focus_in
861 }, 887 },
862 ); 888 );
863 889
864 $CONSOLE = { 890 $CONSOLE = {
869 $window 895 $window
870} 896}
871 897
872sub open_quit_dialog { 898sub open_quit_dialog {
873 unless ($QUIT_DIALOG) { 899 unless ($QUIT_DIALOG) {
874
875 $QUIT_DIALOG = new CFClient::UI::FancyFrame title => "Really Quit?"; 900 $QUIT_DIALOG = new CFClient::UI::FancyFrame title => "Really Quit?";
876 901
877 $QUIT_DIALOG->add (my $vb = new CFClient::UI::VBox expand => 1); 902 $QUIT_DIALOG->add (my $vb = new CFClient::UI::VBox expand => 1);
878 903
879 $vb->add (new CFClient::UI::Label 904 $vb->add (new CFClient::UI::Label
883 ); 908 );
884 $vb->add (my $hb = new CFClient::UI::HBox expand => 1); 909 $vb->add (my $hb = new CFClient::UI::HBox expand => 1);
885 $hb->add (new CFClient::UI::Button 910 $hb->add (new CFClient::UI::Button
886 text => "Ok", 911 text => "Ok",
887 expand => 1, 912 expand => 1,
888 connect_activate => sub { $QUIT_DIALOG->hide }, 913 on_activate => sub { $QUIT_DIALOG->hide },
889 ); 914 );
890 $hb->add (new CFClient::UI::Button 915 $hb->add (new CFClient::UI::Button
891 text => "Quit anyway", 916 text => "Quit anyway",
892 expand => 1, 917 expand => 1,
893 connect_activate => sub { exit }, 918 on_activate => sub { exit },
894 ); 919 );
920 }
895 921
922 $QUIT_DIALOG->show;
896 $QUIT_DIALOG->show_centered; 923 $QUIT_DIALOG->center;
897 } else {
898 $QUIT_DIALOG->show_centered;
899 }
900} 924}
901 925
902sub make_inventory_window { 926sub make_inventory_window {
903 my $invwin = new CFClient::UI::FancyFrame 927 my $invwin = $INV_WINDOW = new CFClient::UI::FancyFrame
904 user_w => $WIDTH * (7/8), user_h => $HEIGHT * (7/8), title => "Inventory"; 928 def_w => $WIDTH * 7/8,
905 929 def_h => $HEIGHT * 7/8,
906 $invwin->add (my $hb = new CFClient::UI::HBox expand => 1); 930 title => "Inventory",
907 931 name => "inventory_window",
908 $hb->add (my $vb1 = new CFClient::UI::VBox expand => 1); 932 on_visibility_change => sub {
909 $vb1->add (my $lbl = new CFClient::UI::Label align => 0); 933 my ($self, $visible) = @_;
910 $lbl->set_text ("Player"); 934 $self->center if $visible;
911 $vb1->add ($INV = new CFClient::UI::Inventory expand => 1);
912
913 $hb->add (my $vb2 = new CFClient::UI::VBox expand => 1);
914 $vb2->add (my $hb2 = new CFClient::UI::HBox);
915 $hb2->add (new CFClient::UI::Button
916 text => "Close",
917 tooltip => "Close the currently open container (if one is open)",
918 connect_activate => sub {
919 $CONN->send ("apply $CONN->{open_container}")
920 if $CONN->{open_container} != 0;
921 }, 935 },
922 ); 936 ;
923 $hb2->add ($INVR_LBL = new CFClient::UI::Label align => 0);
924 937
925 $INVR_LBL->set_text ("Floor"); 938 $invwin->add (my $hb = new CFClient::UI::HBox homogeneous => 1);
939
940 $hb->add (my $vb1 = new CFClient::UI::VBox);
941 $vb1->add (new CFClient::UI::Label align => 0, text => "Player");
942 $vb1->add ($INV = new CFClient::UI::Inventory expand => 1);
943
944 $hb->add (my $vb2 = new CFClient::UI::VBox);
945
946 $vb2->add ($INV_RIGHT_HB = new CFClient::UI::HBox);
947
926 $vb2->add ($INVR = new CFClient::UI::Inventory expand => 1); 948 $vb2->add ($INVR = new CFClient::UI::Inventory expand => 1);
927 949
950 # XXX: Call after $INVR = ... because set_opencont sets the items
951 CFClient::Protocol::set_opencont ($::CONN, 0, "Floor");
952
928 $invwin 953 $invwin
954}
955
956sub make_binding_window {
957 my $binding_list = new CFClient::UI::VBox;
958
959 my $refresh = sub {
960 $binding_list->clear ();
961
962 for my $mod (keys %{$::CFG->{bindings}}) {
963 for my $sym (keys %{$::CFG->{bindings}->{$mod}}) {
964 my $cmds = $::CFG->{bindings}->{$mod}->{$sym};
965 next unless ref $cmds eq 'ARRAY' and @$cmds > 0;
966
967 my $lbl = join "; ", @$cmds;
968 my $nam = CFClient::Recorder::keycombo_to_name ($mod, $sym);
969 $binding_list->add (my $hb = new CFClient::UI::HBox);
970 $hb->add (new CFClient::UI::Button
971 text => "delete",
972 on_activate => sub {
973 $binding_list->remove ($hb);
974 delete $::CFG->{bindings}->{$mod}->{$sym};
975 });
976 $hb->add (new CFClient::UI::Label text => "($nam)");
977 $hb->add (new CFClient::UI::Label text => $lbl, expand => 1);
978 }
979 }
980 };
981
982 $BIND_WINDOW = new CFClient::UI::FancyFrame
983 title => "Bindings",
984 def_w => int $WIDTH * 7/8,
985 def_h => int $HEIGHT * 7/8,
986 on_visibility_change => sub {
987 my ($self, $visible) = @_;
988 if ($visible) {
989 $self->center;
990 $refresh->()
991 }
992 };
993
994 $BIND_WINDOW->add ($binding_list);
995 $refresh->();
996 $BIND_WINDOW
929} 997}
930 998
931sub make_help_window { 999sub make_help_window {
932 my $win = new CFClient::UI::FancyFrame 1000 my $win = new CFClient::UI::FancyFrame
933 user_w => $WIDTH * (7/8), user_h => $HEIGHT * (7/8), title => "Documentation"; 1001 def_w => int $WIDTH * 7/8,
1002 def_h => int $HEIGHT * 7/8,
1003 title => "Documentation";
934 1004
935 $win->add (my $vbox = new CFClient::UI::VBox); 1005 $win->add (my $vbox = new CFClient::UI::VBox);
936 1006
937 $vbox->add (my $buttons = new CFClient::UI::HBox); 1007 $vbox->add (my $buttons = new CFClient::UI::HBox);
938 $vbox->add (my $viewer = new CFClient::UI::TextView expand => 1, fontsize => 0.8); 1008 $vbox->add (my $viewer = new CFClient::UI::TextView expand => 1, fontsize => 0.8);
945 ) { 1015 ) {
946 my ($pod, $label) = @$_; 1016 my ($pod, $label) = @$_;
947 1017
948 $buttons->add (new CFClient::UI::Button 1018 $buttons->add (new CFClient::UI::Button
949 text => $label, 1019 text => $label,
950 connect_activate => sub { 1020 on_activate => sub {
951 my $parser = new Pod::POM; 1021 my $parser = new Pod::POM;
952 my $pom = $parser->parse_file (CFClient::find_rcfile "pod/$pod.pod"); 1022 my $pom = $parser->parse_file (CFClient::find_rcfile "pod/$pod.pod");
953 1023
954 $viewer->clear; 1024 $viewer->clear;
955 1025
1063 tooltip => "Toggles the inventory window, where you can manage your loot (or treaures :)."); 1133 tooltip => "Toggles the inventory window, where you can manage your loot (or treaures :).");
1064 1134
1065 $BUTTONBAR->add (new CFClient::UI::Button 1135 $BUTTONBAR->add (new CFClient::UI::Button
1066 text => "Save Config", 1136 text => "Save Config",
1067 tooltip => "Saves the options chosen in the client setting, server settings and the window layout to be restored on later runs.", 1137 tooltip => "Saves the options chosen in the client setting, server settings and the window layout to be restored on later runs.",
1068 connect_activate => sub { 1138 on_activate => sub {
1139 $::CFG->{layout} = CFClient::UI::get_layout;
1069 CFClient::write_cfg "$Crossfire::VARDIR/pclientrc"; 1140 CFClient::write_cfg "$Crossfire::VARDIR/pclientrc";
1070 status "Configuration Saved"; 1141 status "Configuration Saved";
1071 }, 1142 },
1072 ); 1143 );
1073 1144
1074 $BUTTONBAR->add (new CFClient::UI::Flopper text => "Help!", other => make_help_window, 1145 $BUTTONBAR->add (new CFClient::UI::Flopper text => "Help!", other => make_help_window,
1075 tooltip => "View Documentation"); 1146 tooltip => "View Documentation");
1076 1147
1148 $BUTTONBAR->add (new CFClient::UI::Flopper
1149 text => "Bindings",
1150 other => make_binding_window,
1151 tooltip => "Lets you delete bindings you have made with the recorder"
1152 );
1153 $BUTTONBAR->add (new CFClient::UI::Flopper text => "[Rec]", other => CFClient::Recorder::make_window,
1154 tooltip => "This feature lets you record a series of actions (eg. walking a path or ready a skill) and bind them to keys");
1155
1077 $BUTTONBAR->add (new CFClient::UI::Button 1156 $BUTTONBAR->add (new CFClient::UI::Button
1078 text => "Quit", 1157 text => "Quit",
1079 tooltip => "Terminates the program", 1158 tooltip => "Terminates the program",
1080 connect_activate => sub { 1159 on_activate => sub {
1081 if ($CONN) { 1160 if ($CONN) {
1082 open_quit_dialog; 1161 open_quit_dialog;
1083 } else { 1162 } else {
1084 exit; 1163 exit;
1085 } 1164 }
1088 1167
1089 $BUTTONBAR->show; 1168 $BUTTONBAR->show;
1090 1169
1091 $STATUSBOX->add ("Set video mode $WIDTH×$HEIGHT", timeout => 10, fg => [1, 1, 1, 0.5]); 1170 $STATUSBOX->add ("Set video mode $WIDTH×$HEIGHT", timeout => 10, fg => [1, 1, 1, 0.5]);
1092 1171
1093 # delay till geometry is constant 1172 $SERVER_SETUP->show;
1094 $CFClient::UI::ROOT->on_post_alloc (startup => sub {
1095 $BUTTONBAR->{children}[1]->emit ("activate"); # pop up server setup
1096 my $widget = $GAUGES->{win};
1097 $widget->move (0, $HEIGHT - $widget->{h});#d# to in toplevel
1098 });
1099 force_refresh ();
1100 } 1173 }
1101} 1174}
1102 1175
1103sub video_shutdown { 1176sub video_shutdown {
1104 undef $SDL_ACTIVE; 1177 undef $SDL_ACTIVE;
1317 1390
1318{ 1391{
1319 local $SIG{__DIE__} = sub { CFClient::fatal $_[0] }; 1392 local $SIG{__DIE__} = sub { CFClient::fatal $_[0] };
1320 1393
1321 CFClient::read_cfg "$Crossfire::VARDIR/pclientrc"; 1394 CFClient::read_cfg "$Crossfire::VARDIR/pclientrc";
1395 CFClient::UI::set_layout ($::CFG->{layout});
1322 1396
1323 my %DEF_CFG = ( 1397 my %DEF_CFG = (
1324 sdl_mode => 0, 1398 sdl_mode => 0,
1325 width => 640, 1399 width => 640,
1326 height => 480, 1400 height => 480,

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines