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.67 by root, Sun Jun 11 18:36:15 2006 UTC vs.
Revision 1.78 by root, Fri Jun 23 20:28:20 2006 UTC

115our $INV; 115our $INV;
116our $INVR; 116our $INVR;
117our $INV_RIGHT_HB; 117our $INV_RIGHT_HB;
118 118
119our $BIND_EDITOR; 119our $BIND_EDITOR;
120our $BIND_UPD_CB;
120 121
121our $PICKUP_CFG; 122our $PICKUP_CFG;
122 123
123sub status { 124sub status {
124 $STATUSBOX->add (CFClient::UI::Label::escape $_[0], pri => -10, group => "status", timeout => 10, fg => [1, 1, 0, 1]); 125 $STATUSBOX->add (CFClient::UI::Label::escape $_[0], pri => -10, group => "status", timeout => 10, fg => [1, 1, 0, 1]);
155 $hbox->add (new CFClient::UI::Button 156 $hbox->add (new CFClient::UI::Button
156 text => "No", 157 text => "No",
157 on_activate => sub { 158 on_activate => sub {
158 $conn->send ("reply n"); 159 $conn->send ("reply n");
159 $dialog->destroy; 160 $dialog->destroy;
161 0
160 } 162 }
161 ); 163 );
162 $hbox->add (new CFClient::UI::Button 164 $hbox->add (new CFClient::UI::Button
163 text => "Yes", 165 text => "Yes",
164 on_activate => sub { 166 on_activate => sub {
165 $conn->send ("reply y"); 167 $conn->send ("reply y");
166 destroy_query_dialog $conn; 168 destroy_query_dialog $conn;
169 0
167 }, 170 },
168 ); 171 );
169 172
170 $dialog->focus_in; 173 $dialog->grab_focus;
171 174
172 } elsif ($flags & CS_QUERY_SINGLECHAR) { 175 } elsif ($flags & CS_QUERY_SINGLECHAR) {
173 $dialog->{tooltip} = "Press a key (click on the entry to make sure it has keyboard focus)"; 176 $dialog->{tooltip} = "Press a key (click on the entry to make sure it has keyboard focus)";
174 177
175 if ($prompt =~ /Now choose a character|Press any key for the next race/i) { 178 if ($prompt =~ /Now choose a character|Press any key for the next race/i) {
185 $table->add (0, 0, new CFClient::UI::Button 188 $table->add (0, 0, new CFClient::UI::Button
186 text => "Next Race", 189 text => "Next Race",
187 on_activate => sub { 190 on_activate => sub {
188 $conn->send ("reply n"); 191 $conn->send ("reply n");
189 destroy_query_dialog $conn; 192 destroy_query_dialog $conn;
193 0
190 }, 194 },
191 ); 195 );
192 $table->add (2, 0, new CFClient::UI::Button 196 $table->add (2, 0, new CFClient::UI::Button
193 text => "Accept", 197 text => "Accept",
194 on_activate => sub { 198 on_activate => sub {
195 $conn->send ("reply d"); 199 $conn->send ("reply d");
196 destroy_query_dialog $conn; 200 destroy_query_dialog $conn;
201 0
197 }, 202 },
198 ); 203 );
199 204
200 unshift @dialog, new CFClient::UI::Label 205 unshift @dialog, new CFClient::UI::Label
201 max_w => $::WIDTH * 0.4, 206 max_w => $::WIDTH * 0.4,
231 $table->add (0, 0, new CFClient::UI::Button 236 $table->add (0, 0, new CFClient::UI::Button
232 text => "Roll Again", 237 text => "Roll Again",
233 on_activate => sub { 238 on_activate => sub {
234 $conn->send ("reply y"); 239 $conn->send ("reply y");
235 destroy_query_dialog $conn; 240 destroy_query_dialog $conn;
241 0
236 }, 242 },
237 ); 243 );
238 244
239 # center: swap stats 245 # center: swap stats
240 my ($sw1, $sw2) = map +(new CFClient::UI::Combobox 246 my ($sw1, $sw2) = map +(new CFClient::UI::Combobox
254 text => "Swap Stats", 260 text => "Swap Stats",
255 on_activate => sub { 261 on_activate => sub {
256 $conn->{stat_change_with} = $sw2->{value}; 262 $conn->{stat_change_with} = $sw2->{value};
257 $conn->send ("reply $sw1->{value}"); 263 $conn->send ("reply $sw1->{value}");
258 destroy_query_dialog $conn; 264 destroy_query_dialog $conn;
265 0
259 }, 266 },
260 ); 267 );
261 $table->add (2, 1, new CFClient::UI::HBox children => [$sw1, $sw2]); 268 $table->add (2, 1, new CFClient::UI::HBox children => [$sw1, $sw2]);
262 269
263 # right: accept 270 # right: accept
265 text => "Accept", 272 text => "Accept",
266 on_activate => sub { 273 on_activate => sub {
267 $conn->send ("reply n"); 274 $conn->send ("reply n");
268 $STATS_WINDOW->hide; 275 $STATS_WINDOW->hide;
269 destroy_query_dialog $conn; 276 destroy_query_dialog $conn;
277 0
270 }, 278 },
271 ); 279 );
272 280
273 unshift @dialog, new CFClient::UI::Label 281 unshift @dialog, new CFClient::UI::Label
274 max_w => $::WIDTH * 0.4, 282 max_w => $::WIDTH * 0.4,
284 292
285 push @dialog, my $entry = new CFClient::UI::Entry 293 push @dialog, my $entry = new CFClient::UI::Entry
286 on_changed => sub { 294 on_changed => sub {
287 $conn->send ("reply $_[1]"); 295 $conn->send ("reply $_[1]");
288 destroy_query_dialog $conn; 296 destroy_query_dialog $conn;
297 0
289 }, 298 },
290 ; 299 ;
291 300
292 $entry->focus_in; 301 $entry->grab_focus;
293 302
294 } else { 303 } else {
295 $dialog->{tooltip} = "Enter the reply and press return (click on the entry to make sure it has keyboard focus)"; 304 $dialog->{tooltip} = "Enter the reply and press return (click on the entry to make sure it has keyboard focus)";
296 305
297 push @dialog, my $entry = new CFClient::UI::Entry 306 push @dialog, my $entry = new CFClient::UI::Entry
298 $flags & CS_QUERY_HIDEINPUT ? (hidden => "*") : (), 307 $flags & CS_QUERY_HIDEINPUT ? (hidden => "*") : (),
299 on_activate => sub { 308 on_activate => sub {
300 $conn->send ("reply $_[1]"); 309 $conn->send ("reply $_[1]");
301 destroy_query_dialog $conn; 310 destroy_query_dialog $conn;
311 0
302 }, 312 },
303 ; 313 ;
304 314
305 $entry->focus_in; 315 $entry->grab_focus;
306 } 316 }
307 317
308 $vbox->add (@dialog); 318 $vbox->add (@dialog);
309 $dialog->show; 319 $dialog->show;
310} 320}
315 $LOGIN_BUTTON->set_text ("Logout"); 325 $LOGIN_BUTTON->set_text ("Logout");
316 $SETUP_DIALOG->hide; 326 $SETUP_DIALOG->hide;
317 327
318 my $mapsize = List::Util::min 32, List::Util::max 11, int $WIDTH * $CFG->{mapsize} * 0.01 / 32; 328 my $mapsize = List::Util::min 32, List::Util::max 11, int $WIDTH * $CFG->{mapsize} * 0.01 / 32;
319 329
320 my ($host, $port) = split /:/, $CFG->{host}; 330 my ($host, $port) = split /:/, $CFG->{profile}{default}{host};
321 331
322 $MAP = new CFClient::Map $mapsize, $mapsize; 332 $MAP = new CFClient::Map $mapsize, $mapsize;
323 333
324 $CONN = eval { 334 $CONN = eval {
325 new CFClient::Protocol 335 new CFClient::Protocol
326 host => $host, 336 host => $host,
327 port => $port || 13327, 337 port => $port || 13327,
328 user => $CFG->{user}, 338 user => $CFG->{profile}{default}{user},
329 pass => $CFG->{password}, 339 pass => $CFG->{profile}{default}{password},
330 mapw => $mapsize, 340 mapw => $mapsize,
331 maph => $mapsize, 341 maph => $mapsize,
332 342
333 map_widget => $MAPWIDGET, 343 map_widget => $MAPWIDGET,
334 logview => $LOGVIEW, 344 logview => $LOGVIEW,
363sub stop_game { 373sub stop_game {
364 $LOGIN_BUTTON->set_text ("Login"); 374 $LOGIN_BUTTON->set_text ("Login");
365 $SETUP_NOTEBOOK->set_current_page ($SETUP_SERVER); 375 $SETUP_NOTEBOOK->set_current_page ($SETUP_SERVER);
366 $SETUP_DIALOG->show; 376 $SETUP_DIALOG->show;
367 $INV_WINDOW->hide; 377 $INV_WINDOW->hide;
378 $SETUP_SPELLS->clear_spells;
368 379
369 return unless $CONN; 380 return unless $CONN;
370 381
371 status "connection closed"; 382 status "connection closed";
372 383
373 destroy_query_dialog $CONN; 384 destroy_query_dialog $CONN;
374 $CONN->destroy; 385 $CONN->destroy;
375 $CONN = 0; # false, does not autovivify 386 $CONN = 0; # false, does not autovivify
387
388 undef $MAP;
376} 389}
377 390
378sub graphics_setup { 391sub graphics_setup {
379 my $vbox = new CFClient::UI::VBox; 392 my $vbox = new CFClient::UI::VBox;
380 393
398 411
399 $table->add (0, $row, new CFClient::UI::Label valign => 0, align => 1, text => "Fullscreen"); 412 $table->add (0, $row, new CFClient::UI::Label valign => 0, align => 1, text => "Fullscreen");
400 $table->add (1, $row++, new CFClient::UI::CheckBox 413 $table->add (1, $row++, new CFClient::UI::CheckBox
401 state => $CFG->{fullscreen}, 414 state => $CFG->{fullscreen},
402 tooltip => "Bring the client into fullscreen mode.", 415 tooltip => "Bring the client into fullscreen mode.",
403 on_changed => sub { 416 on_changed => sub { my ($self, $value) = @_; $CFG->{fullscreen} = $value; 0 }
404 my ($self, $value) = @_;
405 $CFG->{fullscreen} = $value;
406 }
407 ); 417 );
408 418
409 $table->add (0, $row, new CFClient::UI::Label valign => 0, align => 1, text => "Fast & Ugly"); 419 $table->add (0, $row, new CFClient::UI::Label valign => 0, align => 1, text => "Fast & Ugly");
410 $table->add (1, $row++, new CFClient::UI::CheckBox 420 $table->add (1, $row++, new CFClient::UI::CheckBox
411 state => $CFG->{fast}, 421 state => $CFG->{fast},
412 tooltip => "Lower the visual quality considerably to speed up rendering.", 422 tooltip => "Lower the visual quality considerably to speed up rendering.",
413 on_changed => sub { 423 on_changed => sub { my ($self, $value) = @_; $CFG->{fast} = $value; 0 }
414 my ($self, $value) = @_;
415 $CFG->{fast} = $value;
416 }
417 ); 424 );
418 425
419 $table->add (0, $row, new CFClient::UI::Label valign => 0, align => 1, text => "Map Scale"); 426 $table->add (0, $row, new CFClient::UI::Label valign => 0, align => 1, text => "Map Scale");
420 $table->add (1, $row++, new CFClient::UI::Slider 427 $table->add (1, $row++, new CFClient::UI::Slider
421 range => [(log $CFG->{map_scale}) / (log 2), -3, 1, 0, 1], 428 range => [(log $CFG->{map_scale}) / (log 2), -3, 1, 0, 1],
422 tooltip => "Enlarge or shrink the displayed map. Changes are instant.", 429 tooltip => "Enlarge or shrink the displayed map. Changes are instant.",
423 on_changed => sub { 430 on_changed => sub { my ($self, $value) = @_; $CFG->{map_scale} = 2 ** $value; 0 }
424 my ($self, $value) = @_;
425 $CFG->{map_scale} = 2 ** $value;
426 }
427 ); 431 );
428 432
429 $table->add (0, $row, new CFClient::UI::Label valign => 0, align => 1, text => "Fog of War"); 433 $table->add (0, $row, new CFClient::UI::Label valign => 0, align => 1, text => "Fog of War");
430 $table->add (1, $row++, new CFClient::UI::CheckBox 434 $table->add (1, $row++, new CFClient::UI::CheckBox
431 state => $CFG->{fow_enable}, 435 state => $CFG->{fow_enable},
432 tooltip => "<b>Fog-of-War</b> marks areas that cannot be seen by the player. Changes are instant.", 436 tooltip => "<b>Fog-of-War</b> marks areas that cannot be seen by the player. Changes are instant.",
433 on_changed => sub { 437 on_changed => sub { my ($self, $value) = @_; $CFG->{fow_enable} = $value; 0 }
434 my ($self, $value) = @_;
435 $CFG->{fow_enable} = $value;
436 }
437 ); 438 );
438 439
439 $table->add (0, $row, new CFClient::UI::Label valign => 0, align => 1, text => "FoW Intensity"); 440 $table->add (0, $row, new CFClient::UI::Label valign => 0, align => 1, text => "FoW Intensity");
440 $table->add (1, $row++, new CFClient::UI::Slider 441 $table->add (1, $row++, new CFClient::UI::Slider
441 range => [$CFG->{fow_intensity}, 0, 1, 0, 1 / 256], 442 range => [$CFG->{fow_intensity}, 0, 1, 0, 1 / 256],
442 tooltip => "<b>Fog of War Lightness.</b> The higher the intensity, the lighter the Fog-of-War color. Changes are instant.", 443 tooltip => "<b>Fog of War Lightness.</b> The higher the intensity, the lighter the Fog-of-War color. Changes are instant.",
443 on_changed => sub { 444 on_changed => sub { my ($self, $value) = @_; $CFG->{fow_intensity} = $value; 0 }
444 my ($self, $value) = @_;
445 $CFG->{fow_intensity} = $value;
446 }
447 ); 445 );
448 446
449 $table->add (0, $row, new CFClient::UI::Label valign => 0, align => 1, text => "FoW Smooth"); 447 $table->add (0, $row, new CFClient::UI::Label valign => 0, align => 1, text => "FoW Smooth");
450 $table->add (1, $row++, new CFClient::UI::CheckBox 448 $table->add (1, $row++, new CFClient::UI::CheckBox
451 state => $CFG->{fow_smooth}, 449 state => $CFG->{fow_smooth},
452 tooltip => "Smooth the Fog-of-War a bit to make it more realistic. Changes are instant.", 450 tooltip => "Smooth the Fog-of-War a bit to make it more realistic. Changes are instant.",
453 on_changed => sub { 451 on_changed => sub {
454 my ($self, $value) = @_; 452 my ($self, $value) = @_;
455 $CFG->{fow_smooth} = $value; 453 $CFG->{fow_smooth} = $value;
456 status "Fog of War smoothing requires OpenGL 1.2 or higher" if $CFClient::OpenGL::GL_VERSION < 1.2; 454 status "Fog of War smoothing requires OpenGL 1.2 or higher" if $CFClient::OpenGL::GL_VERSION < 1.2;
455 0
457 } 456 }
458 ); 457 );
459 458
460 $table->add (0, $row, new CFClient::UI::Label valign => 0, align => 1, text => "GUI Fontsize"); 459 $table->add (0, $row, new CFClient::UI::Label valign => 0, align => 1, text => "GUI Fontsize");
461 $table->add (1, $row++, new CFClient::UI::Slider 460 $table->add (1, $row++, new CFClient::UI::Slider
462 range => [$CFG->{gui_fontsize}, 0.5, 2, 0, 0.1], 461 range => [$CFG->{gui_fontsize}, 0.5, 2, 0, 0.1],
463 tooltip => "The base font size used by most GUI elements that do not have their own setting.", 462 tooltip => "The base font size used by most GUI elements that do not have their own setting.",
464 on_changed => sub { $CFG->{gui_fontsize} = $_[1] }, 463 on_changed => sub { $CFG->{gui_fontsize} = $_[1]; 0 },
465 ); 464 );
466 465
467 $table->add (0, $row, new CFClient::UI::Label valign => 0, align => 1, text => "Message Fontsize"); 466 $table->add (0, $row, new CFClient::UI::Label valign => 0, align => 1, text => "Message Fontsize");
468 $table->add (1, $row++, new CFClient::UI::Slider 467 $table->add (1, $row++, new CFClient::UI::Slider
469 range => [$CFG->{log_fontsize}, 0.5, 2, 0, 0.1], 468 range => [$CFG->{log_fontsize}, 0.5, 2, 0, 0.1],
470 tooltip => "The font size used by the <b>message/server log</b> window only. Changes are instant.", 469 tooltip => "The font size used by the <b>message/server log</b> window only. Changes are instant.",
471 on_changed => sub { $LOGVIEW->set_fontsize ($CFG->{log_fontsize} = $_[1]) }, 470 on_changed => sub { $LOGVIEW->set_fontsize ($CFG->{log_fontsize} = $_[1]); 0 },
472 ); 471 );
473 472
474 $table->add (0, $row, new CFClient::UI::Label valign => 0, align => 1, text => "Stats Fontsize"); 473 $table->add (0, $row, new CFClient::UI::Label valign => 0, align => 1, text => "Stats Fontsize");
475 474
476 $table->add (1, $row++, new CFClient::UI::Slider 475 $table->add (1, $row++, new CFClient::UI::Slider
477 range => [$CFG->{stat_fontsize}, 0.5, 2, 0, 0.1], 476 range => [$CFG->{stat_fontsize}, 0.5, 2, 0, 0.1],
478 tooltip => "The font size used by the <b>statistics window</b> only. Changes are instant.", 477 tooltip => "The font size used by the <b>statistics window</b> only. Changes are instant.",
479 on_changed => sub { 478 on_changed => sub {
480 $CFG->{stat_fontsize} = $_[1]; 479 $CFG->{stat_fontsize} = $_[1];
481 &set_stats_window_fontsize; 480 &set_stats_window_fontsize;
481 0
482 } 482 }
483 ); 483 );
484 484
485 $table->add (0, $row, new CFClient::UI::Label valign => 0, align => 1, text => "Gauge fontsize"); 485 $table->add (0, $row, new CFClient::UI::Label valign => 0, align => 1, text => "Gauge fontsize");
486 $table->add (1, $row++, new CFClient::UI::Slider 486 $table->add (1, $row++, new CFClient::UI::Slider
487 range => [$CFG->{gauge_fontsize}, 0.5, 2, 0, 0.1], 487 range => [$CFG->{gauge_fontsize}, 0.5, 2, 0, 0.1],
488 tooltip => "Adjusts the fontsize of the gauges at the bottom right. Changes are instant.", 488 tooltip => "Adjusts the fontsize of the gauges at the bottom right. Changes are instant.",
489 on_changed => sub { 489 on_changed => sub {
490 $CFG->{gauge_fontsize} = $_[1]; 490 $CFG->{gauge_fontsize} = $_[1];
491 &set_gauge_window_fontsize; 491 &set_gauge_window_fontsize;
492 0
492 } 493 }
493 ); 494 );
494 495
495 $table->add (0, $row, new CFClient::UI::Label valign => 0, align => 1, text => "Gauge size"); 496 $table->add (0, $row, new CFClient::UI::Label valign => 0, align => 1, text => "Gauge size");
496 $table->add (1, $row++, new CFClient::UI::Slider 497 $table->add (1, $row++, new CFClient::UI::Slider
497 range => [$CFG->{gauge_size}, 0.2, 0.8], 498 range => [$CFG->{gauge_size}, 0.2, 0.8],
498 tooltip => "Adjust the size of the stats gauges at the bottom right. Changes are instant.", 499 tooltip => "Adjust the size of the stats gauges at the bottom right. Changes are instant.",
499 on_changed => sub { 500 on_changed => sub {
500 $CFG->{gauge_size} = $_[1]; 501 $CFG->{gauge_size} = $_[1];
501 $GAUGES->{win}->set_size ($WIDTH, int $HEIGHT * $CFG->{gauge_size}); 502 $GAUGES->{win}->set_size ($WIDTH, int $HEIGHT * $CFG->{gauge_size});
503 0
502 } 504 }
503 ); 505 );
504 506
505 $table->add (1, $row++, new CFClient::UI::Button 507 $table->add (1, $row++, new CFClient::UI::Button
506 expand => 1, align => 0, text => "Apply", 508 expand => 1, align => 0, text => "Apply",
507 tooltip => "Apply the video settings", 509 tooltip => "Apply the video settings",
508 on_activate => sub { 510 on_activate => sub {
509 video_shutdown (); 511 video_shutdown ();
510 video_init (); 512 video_init ();
513 0
511 } 514 }
512 ); 515 );
513 516
514 $vbox 517 $vbox
515} 518}
523 526
524 $table->add (0, $row, new CFClient::UI::Label valign => 0, align => 1, text => "Audio Enable"); 527 $table->add (0, $row, new CFClient::UI::Label valign => 0, align => 1, text => "Audio Enable");
525 $table->add (1, $row++, new CFClient::UI::CheckBox 528 $table->add (1, $row++, new CFClient::UI::CheckBox
526 state => $CFG->{audio_enable}, 529 state => $CFG->{audio_enable},
527 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.", 530 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.",
528 on_changed => sub { 531 on_changed => sub { $CFG->{audio_enable} = $_[1]; 0 }
529 $CFG->{audio_enable} = $_[1];
530 }
531 ); 532 );
532# $table->add (0, 9, new CFClient::UI::Label valign => 0, align => 1, text => "Effects Volume"); 533# $table->add (0, 9, new CFClient::UI::Label valign => 0, align => 1, text => "Effects Volume");
533# $table->add (1, 8, new CFClient::UI::Slider range => [$CFG->{effects_volume}, 0, 128, 1], on_changed => sub { 534# $table->add (1, 8, new CFClient::UI::Slider range => [$CFG->{effects_volume}, 0, 128, 1], on_changed => sub {
534# $CFG->{effects_volume} = $_[1]; 535# $CFG->{effects_volume} = $_[1];
535# }); 536# });
536 $table->add (0, $row, new CFClient::UI::Label valign => 0, align => 1, text => "Background Music"); 537 $table->add (0, $row, new CFClient::UI::Label valign => 0, align => 1, text => "Background Music");
537 $table->add (1, $row++, my $hbox = new CFClient::UI::HBox); 538 $table->add (1, $row++, my $hbox = new CFClient::UI::HBox);
538 $hbox->add (new CFClient::UI::CheckBox 539 $hbox->add (new CFClient::UI::CheckBox
539 expand => 1, state => $CFG->{bgm_enable}, 540 expand => 1, state => $CFG->{bgm_enable},
540 tooltip => "If enabled, playing of background music is enabled. If disabled, no background music will be played.", 541 tooltip => "If enabled, playing of background music is enabled. If disabled, no background music will be played.",
541 on_changed => sub { 542 on_changed => sub { $CFG->{bgm_enable} = $_[1]; 0 }
542 $CFG->{bgm_enable} = $_[1];
543 }
544 ); 543 );
545 $hbox->add (new CFClient::UI::Slider 544 $hbox->add (new CFClient::UI::Slider
546 expand => 1, range => [$CFG->{bgm_volume}, 0, 1, 0, 1/128], 545 expand => 1, range => [$CFG->{bgm_volume}, 0, 1, 0, 1/128],
547 tooltip => "The volume of the background music. Changes are instant.", 546 tooltip => "The volume of the background music. Changes are instant.",
548 on_changed => sub { 547 on_changed => sub { $CFG->{bgm_volume} = $_[1]; CFClient::MixMusic::volume $_[1] * 128; 0 }
549 $CFG->{bgm_volume} = $_[1];
550 CFClient::MixMusic::volume $_[1] * 128;
551 }
552 ); 548 );
553 549
554 $table->add (1, $row++, new CFClient::UI::Button 550 $table->add (1, $row++, new CFClient::UI::Button
555 expand => 1, align => 0, text => "Apply", 551 expand => 1, align => 0, text => "Apply",
556 tooltip => "Apply the audio settings", 552 tooltip => "Apply the audio settings",
557 on_activate => sub { 553 on_activate => sub {
558 audio_shutdown (); 554 audio_shutdown ();
559 audio_init (); 555 audio_init ();
556 0
560 } 557 }
561 ); 558 );
562 559
563 $vbox 560 $vbox
564} 561}
630 627
631sub debug_setup { 628sub debug_setup {
632 my $table = new CFClient::UI::Table; 629 my $table = new CFClient::UI::Table;
633 630
634 $table->add (0, 0, new CFClient::UI::Label text => "Widget Borders"); 631 $table->add (0, 0, new CFClient::UI::Label text => "Widget Borders");
635 $table->add (1, 0, new CFClient::UI::CheckBox on_changed => sub { $ENV{CFPLUS_DEBUG} ^= 1 }); 632 $table->add (1, 0, new CFClient::UI::CheckBox on_changed => sub { $ENV{CFPLUS_DEBUG} ^= 1; 0 });
636 $table->add (0, 1, new CFClient::UI::Label text => "Tooltip Widget Info"); 633 $table->add (0, 1, new CFClient::UI::Label text => "Tooltip Widget Info");
637 $table->add (1, 1, new CFClient::UI::CheckBox on_changed => sub { $ENV{CFPLUS_DEBUG} ^= 2 }); 634 $table->add (1, 1, new CFClient::UI::CheckBox on_changed => sub { $ENV{CFPLUS_DEBUG} ^= 2; 0 });
638 $table->add (0, 2, new CFClient::UI::Label text => "Show FPS"); 635 $table->add (0, 2, new CFClient::UI::Label text => "Show FPS");
639 $table->add (1, 2, new CFClient::UI::CheckBox on_changed => sub { $ENV{CFPLUS_DEBUG} ^= 4 }); 636 $table->add (1, 2, new CFClient::UI::CheckBox on_changed => sub { $ENV{CFPLUS_DEBUG} ^= 4; 0 });
640 $table->add (0, 3, new CFClient::UI::Label text => "Suppress Tooltips"); 637 $table->add (0, 3, new CFClient::UI::Label text => "Suppress Tooltips");
641 $table->add (1, 3, new CFClient::UI::CheckBox on_changed => sub { $ENV{CFPLUS_DEBUG} ^= 8 }); 638 $table->add (1, 3, new CFClient::UI::CheckBox on_changed => sub { $ENV{CFPLUS_DEBUG} ^= 8; 0 });
642 639
643 my @default_smooth = (0.05, 0.13, 0.05, 0.13, 0.30, 0.13, 0.05, 0.13, 0.05); 640 my @default_smooth = (0.05, 0.13, 0.05, 0.13, 0.30, 0.13, 0.05, 0.13, 0.05);
644 641
645 for my $x (0..2) { 642 for my $x (0..2) {
646 for my $y (0 .. 2) { 643 for my $y (0 .. 2) {
659sub stats_window { 656sub stats_window {
660 my $tgw = new CFClient::UI::FancyFrame 657 my $tgw = new CFClient::UI::FancyFrame
661 y => $HEIGHT * (2/8), 658 y => $HEIGHT * (2/8),
662 x => "max", 659 x => "max",
663 title => "Stats", 660 title => "Stats",
664 name => "stats_window"; 661 name => "stats_window",
662 has_close_button => 1;
665 663
666 $tgw->add (new CFClient::UI::Window child => my $vb = new CFClient::UI::VBox); 664 $tgw->add (new CFClient::UI::Window child => my $vb = new CFClient::UI::VBox);
667 $vb->add ($STATWIDS->{title} = new CFClient::UI::Label valign => 0, align => -1, text => "Title:", expand => 1, 665 $vb->add ($STATWIDS->{title} = new CFClient::UI::Label valign => 0, align => -1, text => "Title:", expand => 1,
668 can_hover => 1, can_events => 1, 666 can_hover => 1, can_events => 1,
669 tooltip => "Your name and title. You can change your title by using the <b>title</b> command, if supported by the server."); 667 tooltip => "Your name and title. You can change your title by using the <b>title</b> command, if supported by the server.");
751 ); 749 );
752 $tbl2->add ($col + 1, $row, new CFClient::UI::Image 750 $tbl2->add ($col + 1, $row, new CFClient::UI::Image
753 font => $FONT_FIXED, 751 font => $FONT_FIXED,
754 can_hover => 1, 752 can_hover => 1,
755 can_events => 1, 753 can_events => 1,
756 image => "ui/resist/resist_$_.png", 754 path => "ui/resist/resist_$_.png",
757 tooltip => $resist_names{$_}, 755 tooltip => $resist_names{$_},
758 ); 756 );
759 757
760 $row++; 758 $row++;
761 if ($row % 6 == 0) { 759 if ($row % 6 == 0) {
815 $STATWIDS->{st_spd} ->set_text (sprintf "%.1f", $stats->{+CS_STAT_SPEED}); 813 $STATWIDS->{st_spd} ->set_text (sprintf "%.1f", $stats->{+CS_STAT_SPEED});
816 $STATWIDS->{st_wspd}->set_text (sprintf "%.1f", $stats->{+CS_STAT_WEAP_SP}); 814 $STATWIDS->{st_wspd}->set_text (sprintf "%.1f", $stats->{+CS_STAT_WEAP_SP});
817 815
818 $STATWIDS->{m_weight}->set_text (sprintf "Max weight: %.1fkg", $stats->{+CS_STAT_WEIGHT_LIM} / 1000); 816 $STATWIDS->{m_weight}->set_text (sprintf "Max weight: %.1fkg", $stats->{+CS_STAT_WEIGHT_LIM} / 1000);
819 817
820 # TODO: replace by CS_STAT_RES_xxx constants
821 my %tbl = ( 818 my %tbl = (
822 phys => 100, 819 phys => CS_STAT_RES_PHYS,
823 magic => 101, 820 magic => CS_STAT_RES_MAG,
824 fire => 102, 821 fire => CS_STAT_RES_FIRE,
825 elec => 103, 822 elec => CS_STAT_RES_ELEC,
826 cold => 104, 823 cold => CS_STAT_RES_COLD,
827 conf => 105, 824 conf => CS_STAT_RES_CONF,
828 acid => 106, 825 acid => CS_STAT_RES_ACID,
829 drain => 107, 826 drain => CS_STAT_RES_DRAIN,
830 ghit => 108, 827 ghit => CS_STAT_RES_GHOSTHIT,
831 pois => 109, 828 pois => CS_STAT_RES_POISON,
832 slow => 110, 829 slow => CS_STAT_RES_SLOW,
833 para => 111, 830 para => CS_STAT_RES_PARA,
834 tund => 112, 831 tund => CS_STAT_TURN_UNDEAD,
835 fear => 113, 832 fear => CS_STAT_RES_FEAR,
836 depl => 113, 833 depl => CS_STAT_RES_DEPLETE,
837 deat => 115, 834 deat => CS_STAT_RES_DEATH,
838 holyw => 116, 835 holyw => CS_STAT_RES_HOLYWORD,
839 blind => 117, 836 blind => CS_STAT_RES_BLIND,
840 ); 837 );
841 838
842 $STATWIDS->{"res_$_"}->set_text (sprintf "%d%", $stats->{$tbl{$_}}) 839 $STATWIDS->{"res_$_"}->set_text (sprintf "%d%", $stats->{$tbl{$_}})
843 for keys %tbl; 840 for keys %tbl;
844} 841}
918 $table->add (scalar @$m, $y, new CFClient::UI::VBox children => [ 915 $table->add (scalar @$m, $y, new CFClient::UI::VBox children => [
919 (new CFClient::UI::Button 916 (new CFClient::UI::Button
920 text => "Use", 917 text => "Use",
921 tooltip => "Put this server into the <b>Host:Port</b> field", 918 tooltip => "Put this server into the <b>Host:Port</b> field",
922 on_activate => sub { 919 on_activate => sub {
923 $HOST_ENTRY->set_text ($CFG->{host} = $host); 920 $HOST_ENTRY->set_text ($CFG->{profile}{default}{host} = $host);
924 $METASERVER->hide; 921 $METASERVER->hide;
922 0
925 }, 923 },
926 ), 924 ),
927 (new CFClient::UI::Empty expand => 1), 925 (new CFClient::UI::Empty expand => 1),
928 ]); 926 ]);
929 927
950 z => 3, 948 z => 3,
951 force_h => $::HEIGHT * 0.4, 949 force_h => $::HEIGHT * 0.4,
952 child => (my $vbox = new CFClient::UI::VBox), 950 child => (my $vbox = new CFClient::UI::VBox),
953 on_visibility_change => sub { 951 on_visibility_change => sub {
954 update_metaserver if $_[1]; 952 update_metaserver if $_[1];
953 0
955 }, 954 },
956 ; 955 ;
957 956
958 $dialog->{table} = new CFClient::UI::Table; 957 $dialog->{table} = new CFClient::UI::Table;
959 958
972 $table->add (1, 2, my $vbox = new CFClient::UI::VBox); 971 $table->add (1, 2, my $vbox = new CFClient::UI::VBox);
973 972
974 $vbox->add ( 973 $vbox->add (
975 $HOST_ENTRY = new CFClient::UI::Entry 974 $HOST_ENTRY = new CFClient::UI::Entry
976 expand => 1, 975 expand => 1,
977 text => $CFG->{host}, 976 text => $CFG->{profile}{default}{host},
978 tooltip => "The hostname or ip address of the Crossfire(+) server to connect to", 977 tooltip => "The hostname or ip address of the Crossfire(+) server to connect to",
979 on_changed => sub { 978 on_changed => sub {
980 my ($self, $value) = @_; 979 my ($self, $value) = @_;
981 $CFG->{host} = $value; 980 $CFG->{profile}{default}{host} = $value;
981 0
982 } 982 }
983 ); 983 );
984 984
985 $METASERVER = metaserver_dialog; 985 $METASERVER = metaserver_dialog;
986 986
987 $vbox->add (new CFClient::UI::Button 987 $vbox->add (new CFClient::UI::Button
988 expand => 1, 988 expand => 1,
989 text => "Server List", 989 text => "Server List",
990 other => $METASERVER, 990 other => $METASERVER,
991 tooltip => "Show a list of available crossfire servers", 991 tooltip => "Show a list of available crossfire servers",
992 on_activate => sub { $METASERVER->toggle_visibility }, 992 on_activate => sub { $METASERVER->toggle_visibility; 0 },
993 on_visibility_change => sub { $METASERVER->hide unless $_[1] }, 993 on_visibility_change => sub { $METASERVER->hide unless $_[1]; 0 },
994 ); 994 );
995 } 995 }
996 996
997 $table->add (0, 4, new CFClient::UI::Label valign => 0, align => 1, text => "Username"); 997 $table->add (0, 4, new CFClient::UI::Label valign => 0, align => 1, text => "Username");
998 $table->add (1, 4, new CFClient::UI::Entry 998 $table->add (1, 4, new CFClient::UI::Entry
999 text => $CFG->{user}, 999 text => $CFG->{profile}{default}{user},
1000 tooltip => "The name of your character on the server", 1000 tooltip => "The name of your character on the server",
1001 on_changed => sub { 1001 on_changed => sub { my ($self, $value) = @_; $CFG->{profile}{default}{user} = $value }
1002 my ($self, $value) = @_;
1003 $CFG->{user} = $value;
1004 }
1005 ); 1002 );
1006 1003
1007 $table->add (0, 5, new CFClient::UI::Label valign => 0, align => 1, text => "Password"); 1004 $table->add (0, 5, new CFClient::UI::Label valign => 0, align => 1, text => "Password");
1008 $table->add (1, 5, new CFClient::UI::Entry 1005 $table->add (1, 5, new CFClient::UI::Entry
1009 text => $CFG->{password}, 1006 text => $CFG->{profile}{default}{password},
1010 hidden => 1, 1007 hidden => 1,
1011 tooltip => "The password for your character", 1008 tooltip => "The password for your character",
1012 on_changed => sub { 1009 on_changed => sub { my ($self, $value) = @_; $CFG->{profile}{default}{password} = $value }
1013 my ($self, $value) = @_;
1014 $CFG->{password} = $value;
1015 }
1016 ); 1010 );
1017 1011
1018 $table->add (0, 7, new CFClient::UI::Label valign => 0, align => 1, text => "Map Size"); 1012 $table->add (0, 7, new CFClient::UI::Label valign => 0, align => 1, text => "Map Size");
1019 $table->add (1, 7, new CFClient::UI::Slider 1013 $table->add (1, 7, new CFClient::UI::Slider
1020 force_w => 100, 1014 force_w => 100,
1021 range => [$CFG->{mapsize}, 10, 100, 0, 1], 1015 range => [$CFG->{mapsize}, 10, 100, 0, 1],
1022 tooltip => "This is the size of the portion of the map update the server sends you. " 1016 tooltip => "This is the size of the portion of the map update the server sends you. "
1023 . "If you set this to a high value you will be able to see further, " 1017 . "If you set this to a high value you will be able to see further, "
1024 . "but you also increase bandwidth requirements and latency. " 1018 . "but you also increase bandwidth requirements and latency. "
1025 . "This option is only used once at log-in.", 1019 . "This option is only used once at log-in.",
1026 on_changed => sub { 1020 on_changed => sub { my ($self, $value) = @_; $CFG->{mapsize} = $self->{range}[0] = $value = int $value; 0 },
1027 my ($self, $value) = @_;
1028
1029 $CFG->{mapsize} = $self->{range}[0] = $value = int $value;
1030 },
1031 ); 1021 );
1032 1022
1033 $table->add (0, 8, new CFClient::UI::Label valign => 0, align => 1, text => "Face Prefetch"); 1023 $table->add (0, 8, new CFClient::UI::Label valign => 0, align => 1, text => "Face Prefetch");
1034 $table->add (1, 8, new CFClient::UI::CheckBox 1024 $table->add (1, 8, new CFClient::UI::CheckBox
1035 state => $CFG->{face_prefetch}, 1025 state => $CFG->{face_prefetch},
1038 . "This might increase or create lag, but increases the chances " 1028 . "This might increase or create lag, but increases the chances "
1039 . "of faces being ready for display when you encounter them. " 1029 . "of faces being ready for display when you encounter them. "
1040 . "It also uses up server bandwidth on every connect, " 1030 . "It also uses up server bandwidth on every connect, "
1041 . "so only set it if you really need to prefetch images. " 1031 . "so only set it if you really need to prefetch images. "
1042 . "This option can be set and unset any time.", 1032 . "This option can be set and unset any time.",
1043 on_changed => sub { $CFG->{face_prefetch} = $_[1] }, 1033 on_changed => sub { $CFG->{face_prefetch} = $_[1]; 0 },
1044 ); 1034 );
1045 1035
1046 $table->add (0, 9, new CFClient::UI::Label valign => 0, align => 1, text => "Output-Count"); 1036 $table->add (0, 9, new CFClient::UI::Label valign => 0, align => 1, text => "Output-Count");
1047 $table->add (1, 9, new CFClient::UI::Entry 1037 $table->add (1, 9, new CFClient::UI::Entry
1048 text => $CFG->{output_count}, 1038 text => $CFG->{output_count},
1049 tooltip => "Should be set to 1 unless you know what you are doing. This option is only used once at log-in.", 1039 tooltip => "Should be set to 1 unless you know what you are doing. This option is only used once at log-in.",
1050 on_changed => sub { $CFG->{output_count} = $_[1] }, 1040 on_changed => sub { $CFG->{output_count} = $_[1]; 0 },
1051 ); 1041 );
1052 1042
1053 $table->add (0, 10, new CFClient::UI::Label valign => 0, align => 1, text => "Output-Sync"); 1043 $table->add (0, 10, new CFClient::UI::Label valign => 0, align => 1, text => "Output-Sync");
1054 $table->add (1, 10, new CFClient::UI::Entry 1044 $table->add (1, 10, new CFClient::UI::Entry
1055 text => $CFG->{output_sync}, 1045 text => $CFG->{output_sync},
1056 tooltip => "Should be set to 1 unless you know what you are doing. This option is only used once at log-in.", 1046 tooltip => "Should be set to 1 unless you know what you are doing. This option is only used once at log-in.",
1057 on_changed => sub { $CFG->{output_sync} = $_[1] }, 1047 on_changed => sub { $CFG->{output_sync} = $_[1]; 0 },
1058 ); 1048 );
1059 1049
1060 $table->add (1, 11, $LOGIN_BUTTON = new CFClient::UI::Button 1050 $table->add (1, 11, $LOGIN_BUTTON = new CFClient::UI::Button
1061 expand => 1, 1051 expand => 1,
1062 align => 0, 1052 align => 0,
1063 text => "Login", 1053 text => "Login",
1064 on_activate => sub { 1054 on_activate => sub {
1065 $CONN ? stop_game 1055 $CONN ? stop_game
1066 : start_game; 1056 : start_game;
1057 0
1067 }, 1058 },
1068 ); 1059 );
1069 1060
1070 $table->add (0, 12, new CFClient::UI::Label valign => 0, align => 1, text => "Chat Command"); 1061 $table->add (0, 12, new CFClient::UI::Label valign => 0, align => 1, text => "Chat Command");
1071 $table->add (1, 12, my $saycmd = new CFClient::UI::Entry 1062 $table->add (1, 12, my $saycmd = new CFClient::UI::Entry
1074 . "Usually you want to enter something like 'say' or 'shout' or 'gsay' here. " 1065 . "Usually you want to enter something like 'say' or 'shout' or 'gsay' here. "
1075 . "But you could also set it to <b>tell <i>playername</i></b> to only chat with that user.", 1066 . "But you could also set it to <b>tell <i>playername</i></b> to only chat with that user.",
1076 on_changed => sub { 1067 on_changed => sub {
1077 my ($self, $value) = @_; 1068 my ($self, $value) = @_;
1078 $CFG->{say_command} = $value; 1069 $CFG->{say_command} = $value;
1070 0
1079 } 1071 }
1080 ); 1072 );
1081 1073
1082 $vbox->add (new CFClient::UI::Label 1074 $vbox->add (new CFClient::UI::Label
1083 text => "Server Info", 1075 text => "Server Info",
1099 bg => [0, 0, 0, 0.75], 1091 bg => [0, 0, 0, 0.75],
1100 x => "max", 1092 x => "max",
1101 y => 0, 1093 y => 0,
1102 force_w => $::WIDTH * 0.4, 1094 force_w => $::WIDTH * 0.4,
1103 force_h => $::HEIGHT * 0.5, 1095 force_h => $::HEIGHT * 0.5,
1104 child => (my $vbox = new CFClient::UI::VBox); 1096 child => (my $vbox = new CFClient::UI::VBox),
1097 has_close_button => 1;
1105 1098
1106 $vbox->add ($LOGVIEW); 1099 $vbox->add ($LOGVIEW);
1107 1100
1108 $vbox->add (my $input = new CFClient::UI::Entry 1101 $vbox->add (my $input = new CFClient::UI::Entry
1109 tooltip => "<b>Chat Box</b>. If you enter a text and press return/enter here, the current <i>communication command</i> " 1102 tooltip => "<b>Chat Box</b>. If you enter a text and press return/enter here, the current <i>communication command</i> "
1117 1110
1118 if ($prev_focus == $MAPWIDGET && $input->{auto_activated}) { 1111 if ($prev_focus == $MAPWIDGET && $input->{auto_activated}) {
1119 $input->{refocus_map} = 1; 1112 $input->{refocus_map} = 1;
1120 } 1113 }
1121 delete $input->{auto_activated}; 1114 delete $input->{auto_activated};
1115
1116 0
1122 }, 1117 },
1123 on_activate => sub { 1118 on_activate => sub {
1124 my ($input, $text) = @_; 1119 my ($input, $text) = @_;
1125 $input->set_text (''); 1120 $input->set_text ('');
1126 1121
1132 } 1127 }
1133 if ($input->{refocus_map}) { 1128 if ($input->{refocus_map}) {
1134 delete $input->{refocus_map}; 1129 delete $input->{refocus_map};
1135 $MAPWIDGET->focus_in 1130 $MAPWIDGET->focus_in
1136 } 1131 }
1132
1133 0
1137 }, 1134 },
1138 on_escape => sub { 1135 on_escape => sub {
1139 $MAPWIDGET->focus_in 1136 $MAPWIDGET->grab_focus;
1137
1138 0
1140 }, 1139 },
1141 ); 1140 );
1142 1141
1143 $CONSOLE = { 1142 $CONSOLE = {
1144 window => $window, 1143 window => $window,
1166 ); 1165 );
1167 $vb->add (my $hb = new CFClient::UI::HBox expand => 1); 1166 $vb->add (my $hb = new CFClient::UI::HBox expand => 1);
1168 $hb->add (new CFClient::UI::Button 1167 $hb->add (new CFClient::UI::Button
1169 text => "Ok", 1168 text => "Ok",
1170 expand => 1, 1169 expand => 1,
1171 on_activate => sub { $QUIT_DIALOG->hide }, 1170 on_activate => sub { $QUIT_DIALOG->hide; 0 },
1172 ); 1171 );
1173 $hb->add (new CFClient::UI::Button 1172 $hb->add (new CFClient::UI::Button
1174 text => "Quit anyway", 1173 text => "Quit anyway",
1175 expand => 1, 1174 expand => 1,
1176 on_activate => sub { exit }, 1175 on_activate => sub { exit },
1243 $::CFG->{pickup} &= ~$mask; 1242 $::CFG->{pickup} &= ~$mask;
1244 } 1243 }
1245 1244
1246 $::CONN->send_command ("pickup $::CFG->{pickup}") 1245 $::CONN->send_command ("pickup $::CFG->{pickup}")
1247 if defined $::CONN; 1246 if defined $::CONN;
1247
1248 0
1248 }); 1249 });
1249 } 1250 }
1250 } 1251 }
1251 1252
1252 $table->add (2, 18, new CFClient::UI::ValSlider 1253 $table->add (2, 18, new CFClient::UI::ValSlider
1263 $table->add (3, 18, new CFClient::UI::Button 1264 $table->add (3, 18, new CFClient::UI::Button
1264 text => "set", 1265 text => "set",
1265 on_activate => sub { 1266 on_activate => sub {
1266 $::CONN->send_command ("pickup $::CFG->{pickup}") 1267 $::CONN->send_command ("pickup $::CFG->{pickup}")
1267 if defined $::CONN; 1268 if defined $::CONN;
1268 1; 1269 0
1269 }); 1270 });
1270 1271
1271 $table 1272 $table
1272} 1273}
1273 1274
1276 x => "center", 1277 x => "center",
1277 y => "center", 1278 y => "center",
1278 force_w => $WIDTH * 9/10, 1279 force_w => $WIDTH * 9/10,
1279 force_h => $HEIGHT * 9/10, 1280 force_h => $HEIGHT * 9/10,
1280 title => "Inventory", 1281 title => "Inventory",
1282 has_close_button => 1,
1281 ; 1283 ;
1282 1284
1283 $invwin->add (my $hb = new CFClient::UI::HBox homogeneous => 1); 1285 $invwin->add (my $hb = new CFClient::UI::HBox homogeneous => 1);
1284 1286
1285 $hb->add (my $vb1 = new CFClient::UI::VBox); 1287 $hb->add (my $vb1 = new CFClient::UI::VBox);
1300 1302
1301sub spell_setup { 1303sub spell_setup {
1302 new CFClient::UI::SpellList 1304 new CFClient::UI::SpellList
1303} 1305}
1304 1306
1307sub update_bindings {
1308 $BIND_UPD_CB->() if $BIND_UPD_CB;
1309}
1310
1305sub keyboard_setup { 1311sub keyboard_setup {
1306 my $binding_list = new CFClient::UI::VBox; 1312 my $binding_list = new CFClient::UI::VBox;
1307 1313
1308 my $refresh; 1314 my $refresh;
1309 $refresh = sub { 1315 $refresh = $BIND_UPD_CB = sub {
1310 $binding_list->clear (); 1316 $binding_list->clear ();
1311 1317
1312 for my $mod (keys %{$::CFG->{bindings}}) { 1318 for my $mod (keys %{$::CFG->{profile}{default}{bindings}}) {
1313 for my $sym (keys %{$::CFG->{bindings}->{$mod}}) { 1319 for my $sym (keys %{$::CFG->{profile}{default}{bindings}{$mod}}) {
1314 my $cmds = $::CFG->{bindings}->{$mod}->{$sym}; 1320 my $cmds = $::CFG->{profile}{default}{bindings}{$mod}{$sym};
1315 next unless ref $cmds eq 'ARRAY' and @$cmds > 0; 1321 next unless ref $cmds eq 'ARRAY' and @$cmds > 0;
1316 1322
1317 my $lbl = join "; ", @$cmds; 1323 my $lbl = join "; ", @$cmds;
1318 my $nam = CFClient::Binder::keycombo_to_name ($mod, $sym); 1324 my $nam = CFClient::Binder::keycombo_to_name ($mod, $sym);
1319 $binding_list->add (my $hb = new CFClient::UI::HBox); 1325 $binding_list->add (my $hb = new CFClient::UI::HBox);
1320 $hb->add (new CFClient::UI::Button 1326 $hb->add (new CFClient::UI::Button
1321 text => "delete", 1327 text => "delete",
1322 tooltip => "Deletes the binding", 1328 tooltip => "Deletes the binding",
1323 on_activate => sub { 1329 on_activate => sub {
1324 $binding_list->remove ($hb); 1330 $binding_list->remove ($hb);
1325 delete $::CFG->{bindings}->{$mod}->{$sym}; 1331 delete $::CFG->{profile}{default}{bindings}{$mod}{$sym};
1332 0
1326 }); 1333 });
1327 1334
1328 $hb->add (new CFClient::UI::Button 1335 $hb->add (new CFClient::UI::Button
1329 text => "edit", 1336 text => "edit",
1330 tooltip => "Edits the binding", 1337 tooltip => "Edits the binding",
1331 on_activate => sub { 1338 on_activate => sub {
1332 $::BIND_EDITOR->set_binding ( 1339 $::BIND_EDITOR->set_binding (
1333 $mod, $sym, $::CFG->{bindings}->{$mod}->{$sym}, 1340 $mod, $sym, $::CFG->{profile}{default}{bindings}{$mod}{$sym},
1334 sub { 1341 sub {
1335 my ($nmod, $nsym, $ncmds) = @_; 1342 my ($nmod, $nsym, $ncmds) = @_;
1336 delete $::CFG->{bindings}->{$mod}->{$sym}; 1343 $::BIND_EDITOR->cfg_unbind ($mod, $sym);
1337 $::CFG->{bindings}->{$nmod}->{$nsym} = $ncmds; 1344 $::BIND_EDITOR->cfg_bind ($nmod, $nsym, $ncmds);
1338 $refresh->(); 1345 $refresh->();
1339 $SETUP_NOTEBOOK->set_current_page ($SETUP_KEYBOARD); 1346 $SETUP_NOTEBOOK->set_current_page ($SETUP_KEYBOARD);
1340 $SETUP_DIALOG->show; 1347 $SETUP_DIALOG->show;
1341 }, 1348 },
1342 sub { 1349 sub {
1343 $SETUP_NOTEBOOK->set_current_page ($SETUP_KEYBOARD); 1350 $SETUP_NOTEBOOK->set_current_page ($SETUP_KEYBOARD);
1344 $SETUP_DIALOG->show; 1351 $SETUP_DIALOG->show;
1345 }); 1352 });
1346 $::BIND_EDITOR->show; 1353 $::BIND_EDITOR->show;
1347 $SETUP_DIALOG->hide; 1354 $SETUP_DIALOG->hide;
1355 0
1348 }); 1356 });
1349 1357
1350 $hb->add (new CFClient::UI::Label text => "(Key: $nam)"); 1358 $hb->add (new CFClient::UI::Label text => "(Key: $nam)");
1351 $hb->add (new CFClient::UI::Label text => $lbl, expand => 1); 1359 $hb->add (new CFClient::UI::Label text => $lbl, expand => 1);
1352 } 1360 }
1353 } 1361 }
1354 }; 1362 };
1355 1363
1356 my $vb = new CFClient::UI::VBox; 1364 my $vb = new CFClient::UI::VBox;
1365 $vb->add (my $hb = new CFClient::UI::HBox);
1366 $hb->add (new CFClient::UI::Label text => "only shift-up stops fire");
1367 $hb->add (new CFClient::UI::CheckBox
1368 expand => 1,
1369 state => $CFG->{shift_fire_stop},
1370 tooltip => "If this checkbox is enabled you will stop fire only if you stop pressing shift",
1371 on_changed => sub {
1372 my ($cbox, $value) = @_;
1373 $CFG->{shift_fire_stop} = $value;
1374 0
1375 });
1376
1357 $vb->add ($binding_list); 1377 $vb->add ($binding_list);
1358 $vb->add (my $hb = new CFClient::UI::HBox); 1378 $vb->add (my $hb = new CFClient::UI::HBox);
1359 1379
1360 $hb->add (new CFClient::UI::Button 1380 $hb->add (new CFClient::UI::Button
1361 text => "record new", 1381 text => "record new",
1363 tooltip => "This button opens the binding editor with an empty binding.", 1383 tooltip => "This button opens the binding editor with an empty binding.",
1364 on_activate => sub { 1384 on_activate => sub {
1365 $::BIND_EDITOR->set_binding (undef, undef, [], 1385 $::BIND_EDITOR->set_binding (undef, undef, [],
1366 sub { 1386 sub {
1367 my ($mod, $sym, $cmds) = @_; 1387 my ($mod, $sym, $cmds) = @_;
1368 $::CFG->{bindings}->{$mod}->{$sym} = $cmds; 1388 $::BIND_EDITOR->cfg_bind ($mod, $sym, $cmds);
1369 $refresh->(); 1389 $refresh->();
1370 $SETUP_NOTEBOOK->set_current_page ($SETUP_KEYBOARD); 1390 $SETUP_NOTEBOOK->set_current_page ($SETUP_KEYBOARD);
1371 $SETUP_DIALOG->show; 1391 $SETUP_DIALOG->show;
1372 }, 1392 },
1373 sub { 1393 sub {
1375 $SETUP_DIALOG->show; 1395 $SETUP_DIALOG->show;
1376 }, 1396 },
1377 ); 1397 );
1378 $SETUP_DIALOG->hide; 1398 $SETUP_DIALOG->hide;
1379 $::BIND_EDITOR->show; 1399 $::BIND_EDITOR->show;
1400 0
1380 }, 1401 },
1381 ); 1402 );
1382 1403
1383 $hb->add (new CFClient::UI::Button 1404 $hb->add (new CFClient::UI::Button
1384 text => "close", 1405 text => "close",
1385 tooltip => "Closes the binding window", 1406 tooltip => "Closes the binding window",
1386 expand => 1, 1407 expand => 1,
1387 on_activate => sub { 1408 on_activate => sub {
1388 $SETUP_DIALOG->hide; 1409 $SETUP_DIALOG->hide;
1410 0
1389 } 1411 }
1390 ); 1412 );
1391 1413
1392 $refresh->(); 1414 $refresh->();
1393 1415
1413 $buttons->add (new CFClient::UI::Label text => "Choose a document to display: "); 1435 $buttons->add (new CFClient::UI::Label text => "Choose a document to display: ");
1414 $buttons->add (my $combo = new CFClient::UI::Combobox 1436 $buttons->add (my $combo = new CFClient::UI::Combobox
1415 value => undef, 1437 value => undef,
1416 options => [ 1438 options => [
1417 [intro => "Introduction"], 1439 [intro => "Introduction"],
1418 [manual => "Manual"], 1440 [manual => "Main Manual"],
1419 [skill_help => "Skills"], 1441 [skill_help => "Skill Reference"],
1420 [command_help => "Commands"], 1442 [command_help => "Command Reference"],
1421 [dmcommand_help => "DM Commands"], 1443 [dmcommand_help => "DM Commands"],
1422 [COPYING => "License Terms"], 1444 [COPYING => "License Terms"],
1423 ], 1445 ],
1424 on_changed => sub { 1446 on_changed => sub {
1425 my ($self, $pod) = @_; 1447 my ($self, $pod) = @_;
1426 1448
1427 my $pom = CFClient::load_pod CFClient::find_rcfile "pod/$pod.pod", 1449 my $pom = CFClient::load_pod CFClient::find_rcfile "pod/$pod.pod",
1428 doc_viewer => 1, sub { CFClient::pod_to_pango_list $_[0] }; 1450 doc_viewer => 1, sub { CFClient::pod_to_pango_list $_[0] };
1429 1451
1430 $viewer->clear; 1452 $viewer->clear;
1453
1454# $viewer->add_paragraph ([1, 1, 1, 1], ["<big>Test</big>\n\n \x{fffc}\n",
1455# (new CFClient::UI::Image path => "x.png"),
1456# ]);#d#
1431 1457
1432 $viewer->add_paragraph ([1, 1, 1, 1], $_->[1], $_->[0]) 1458 $viewer->add_paragraph ([1, 1, 1, 1], $_->[1], $_->[0])
1433 for @$pom; 1459 for @$pom;
1434 1460
1435 $viewer->set_offset (0); 1461 $viewer->set_offset (0);
1462
1463 0
1436 }, 1464 },
1437 on_visibility_change => sub { 1465 on_visibility_change => sub {
1438 my ($self, $visible) = @_; 1466 my ($self, $visible) = @_;
1439 return unless $visible; 1467 return unless $visible;
1440 return if $self->{value}; 1468 return if $self->{value};
1441 $self->set_value ("intro"); 1469 $self->set_value ("intro");
1470 0
1442 }, 1471 },
1443 ); 1472 );
1444 1473
1445 $win 1474 $win
1446} 1475}
1515 $MAPWIDGET->connect (activate_console => sub { 1544 $MAPWIDGET->connect (activate_console => sub {
1516 my ($mapwidget, $preset) = @_; 1545 my ($mapwidget, $preset) = @_;
1517 1546
1518 if ($CONSOLE) { 1547 if ($CONSOLE) {
1519 $CONSOLE->{input}->{auto_activated} = 1; 1548 $CONSOLE->{input}->{auto_activated} = 1;
1520 $CONSOLE->{input}->focus_in; 1549 $CONSOLE->{input}->grab_focus;
1521 1550
1522 if ($preset && $CONSOLE->{input}->get_text eq '') { 1551 if ($preset && $CONSOLE->{input}->get_text eq '') {
1523 $CONSOLE->{input}->set_text ($preset); 1552 $CONSOLE->{input}->set_text ($preset);
1524 } 1553 }
1525 } 1554 }
1526 }); 1555 });
1527 $MAPWIDGET->show; 1556 $MAPWIDGET->show;
1528 $MAPWIDGET->focus_in; 1557 $MAPWIDGET->grab_focus;
1529 1558
1530 $LOGVIEW = new CFClient::UI::TextScroller 1559 $LOGVIEW = new CFClient::UI::TextScroller
1531 expand => 1, 1560 expand => 1,
1532 font => $FONT_FIXED, 1561 font => $FONT_FIXED,
1533 fontsize => $::CFG->{log_fontsize}, 1562 fontsize => $::CFG->{log_fontsize},
1543 x => 'center', 1572 x => 'center',
1544 y => 'center', 1573 y => 'center',
1545 z => 2, 1574 z => 2,
1546 force_w => $::WIDTH * 0.6, 1575 force_w => $::WIDTH * 0.6,
1547 force_h => $::HEIGHT * 0.6, 1576 force_h => $::HEIGHT * 0.6,
1577 has_close_button => 1,
1548 ; 1578 ;
1549 1579
1550 $SETUP_DIALOG->add ($SETUP_NOTEBOOK = new CFClient::UI::Notebook expand => 1, debug => 1, 1580 $SETUP_DIALOG->add ($SETUP_NOTEBOOK = new CFClient::UI::Notebook expand => 1, debug => 1,
1551 filter => new CFClient::UI::ScrolledWindow expand => 1, scroll_y => 1); 1581 filter => new CFClient::UI::ScrolledWindow expand => 1, scroll_y => 1);
1552 1582
1557 $SETUP_NOTEBOOK->add (Graphics => graphics_setup, 1587 $SETUP_NOTEBOOK->add (Graphics => graphics_setup,
1558 "Configure the video mode, performance, fonts and other graphical aspects of the game."); 1588 "Configure the video mode, performance, fonts and other graphical aspects of the game.");
1559 $SETUP_NOTEBOOK->add (Audio => audio_setup, 1589 $SETUP_NOTEBOOK->add (Audio => audio_setup,
1560 "Configure the use of audio, sound effects and background music."); 1590 "Configure the use of audio, sound effects and background music.");
1561 $SETUP_NOTEBOOK->add (Keyboard => $SETUP_KEYBOARD = keyboard_setup, 1591 $SETUP_NOTEBOOK->add (Keyboard => $SETUP_KEYBOARD = keyboard_setup,
1562 "Lets you define, edit and delete bindings." 1592 "Lets you define, edit and delete key bindings."
1563 . "There is a shortcut for making bindings: <b>Left Control + Insert</b> opens the binding editor " 1593 . "There is a shortcut for making bindings: <b>Control-Insert</b> opens the binding editor "
1564 . "with nothing set and the recording started. After doing the actions you " 1594 . "with nothing set and the recording started. After doing the actions you "
1565 . "want to record press <b>Insert</b> and you will be asked to press a key-combo. " 1595 . "want to record press <b>Insert</b> and you will be asked to press a key-combo. "
1566 . "After pressing the combo the binding will be saved automatically and the " 1596 . "After pressing the combo the binding will be saved automatically and the "
1567 . "binding editor closes"); 1597 . "binding editor closes");
1568 $SETUP_NOTEBOOK->add (Spells => $SETUP_SPELLS = spell_setup, 1598 $SETUP_NOTEBOOK->add (Spells => $SETUP_SPELLS = spell_setup,
1569 "Displays all spells you have and lets you edit keyboard shortcuts for them."); 1599 "Displays all spells you have and lets you edit keyboard shortcuts for them.");
1570 $SETUP_NOTEBOOK->add (Debug => debug_setup, 1600 $SETUP_NOTEBOOK->add (Debug => debug_setup,
1571 "Some debuggign options. Do not ask."); 1601 "Some debuggin' options. Do not ask.");
1572 1602
1573 $BUTTONBAR = new CFClient::UI::Buttonbar x => 0, y => 0, z => 200; # put on top 1603 $BUTTONBAR = new CFClient::UI::Buttonbar x => 0, y => 0, z => 200; # put on top
1574 1604
1575 $BUTTONBAR->add (new CFClient::UI::Flopper text => "Setup", other => $SETUP_DIALOG, 1605 $BUTTONBAR->add (new CFClient::UI::Flopper text => "Setup", other => $SETUP_DIALOG,
1576 tooltip => "Toggles a dialog where you can configure all aspects of this client."); 1606 tooltip => "Toggles a dialog where you can configure all aspects of this client.");
1591 tooltip => "Saves the options chosen in the client setting, server settings and the window layout to be restored on later runs.", 1621 tooltip => "Saves the options chosen in the client setting, server settings and the window layout to be restored on later runs.",
1592 on_activate => sub { 1622 on_activate => sub {
1593 $::CFG->{layout} = CFClient::UI::get_layout; 1623 $::CFG->{layout} = CFClient::UI::get_layout;
1594 CFClient::write_cfg "$Crossfire::VARDIR/cfplusrc"; 1624 CFClient::write_cfg "$Crossfire::VARDIR/cfplusrc";
1595 status "Configuration Saved"; 1625 status "Configuration Saved";
1626 0
1596 }, 1627 },
1597 ); 1628 );
1598 1629
1599 $BUTTONBAR->add (new CFClient::UI::Flopper text => "Help!", other => help_window, 1630 $BUTTONBAR->add (new CFClient::UI::Flopper text => "Help!", other => help_window,
1600 tooltip => "View Documentation"); 1631 tooltip => "View Documentation");
1606 if ($CONN) { 1637 if ($CONN) {
1607 open_quit_dialog; 1638 open_quit_dialog;
1608 } else { 1639 } else {
1609 exit; 1640 exit;
1610 } 1641 }
1642 0
1611 }, 1643 },
1612 ); 1644 );
1613 1645
1614 $BUTTONBAR->show; 1646 $BUTTONBAR->show;
1615 $SETUP_DIALOG->show; 1647 $SETUP_DIALOG->show;
1617 1649
1618 $STATUSBOX->add ("Set video mode $WIDTH×$HEIGHT", timeout => 10, fg => [1, 1, 1, 0.5]); 1650 $STATUSBOX->add ("Set video mode $WIDTH×$HEIGHT", timeout => 10, fg => [1, 1, 1, 0.5]);
1619} 1651}
1620 1652
1621sub video_shutdown { 1653sub video_shutdown {
1654 CFClient::OpenGL::shutdown;
1655
1622 undef $SDL_ACTIVE; 1656 undef $SDL_ACTIVE;
1623} 1657}
1624 1658
1625my @bgmusic = qw(game1.ogg game2.ogg game3.ogg game5.ogg game6.ogg ross1.ogg ross2.ogg ross3.ogg ross4.ogg ross5.ogg); #d# 1659my @bgmusic = qw(game1.ogg game2.ogg game3.ogg game5.ogg game6.ogg ross1.ogg ross2.ogg ross3.ogg ross4.ogg ross5.ogg); #d#
1626my $bgmusic;#TODO#hack#d# 1660my $bgmusic;#TODO#hack#d#
1842 1876
1843 CFClient::read_cfg "$Crossfire::VARDIR/cfplusrc"; 1877 CFClient::read_cfg "$Crossfire::VARDIR/cfplusrc";
1844 CFClient::UI::set_layout ($::CFG->{layout}); 1878 CFClient::UI::set_layout ($::CFG->{layout});
1845 1879
1846 my %DEF_CFG = ( 1880 my %DEF_CFG = (
1847 sdl_mode => 0, 1881 sdl_mode => 0,
1848 width => 640, 1882 width => 640,
1849 height => 480, 1883 height => 480,
1850 fullscreen => 0, 1884 fullscreen => 0,
1851 fast => 0, 1885 fast => 0,
1852 map_scale => 1, 1886 map_scale => 1,
1853 fow_enable => 1, 1887 fow_enable => 1,
1854 fow_intensity => 0.45, 1888 fow_intensity => 0.45,
1855 fow_smooth => 0, 1889 fow_smooth => 0,
1856 gui_fontsize => 1, 1890 gui_fontsize => 1,
1857 log_fontsize => 0.7, 1891 log_fontsize => 0.7,
1858 gauge_fontsize=> 1, 1892 gauge_fontsize => 1,
1859 gauge_size => 0.35, 1893 gauge_size => 0.35,
1860 stat_fontsize => 0.7, 1894 stat_fontsize => 0.7,
1861 mapsize => 100, 1895 mapsize => 100,
1862 host => "crossfire.schmorp.de",
1863 say_command => 'say', 1896 say_command => 'say',
1864 audio_enable => 1, 1897 audio_enable => 1,
1865 bgm_enable => 1, 1898 bgm_enable => 1,
1866 bgm_volume => 0.25, 1899 bgm_volume => 0.25,
1867 face_prefetch => 0, 1900 face_prefetch => 0,
1868 output_sync => 1, 1901 output_sync => 1,
1869 output_count => 1, 1902 output_count => 1,
1870 pickup => 0, 1903 pickup => 0,
1904 default => "profile", # default profile
1905 );
1871 ); 1906
1872
1873 while (my ($k, $v) = each %DEF_CFG) { 1907 while (my ($k, $v) = each %DEF_CFG) {
1874 $CFG->{$k} = $v unless exists $CFG->{$k}; 1908 $CFG->{$k} = $v unless exists $CFG->{$k};
1875 } 1909 }
1910
1911 $CFG->{profile}{default}{host} ||= "crossfire.schmorp.de";
1876 1912
1877 sdl_init; 1913 sdl_init;
1878 1914
1879 @SDL_MODES = reverse 1915 @SDL_MODES = reverse
1880 grep $_->[0] >= 640 && $_->[1] >= 480, 1916 grep $_->[0] >= 640 && $_->[1] >= 480,
1922 video_init; 1958 video_init;
1923 audio_init; 1959 audio_init;
1924} 1960}
1925 1961
1926Event::loop; 1962Event::loop;
1963#CFClient::SDL_Quit;
1964#CFClient::_exit 0;
1927 1965
1928END { CFClient::SDL_Quit } 1966END { CFClient::SDL_Quit }
1929 1967
1930=head1 NAME 1968=head1 NAME
1931 1969

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines