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.40 by root, Fri Jun 2 02:12:04 2006 UTC vs.
Revision 1.52 by root, Mon Jun 5 00:17:47 2006 UTC

41use CFClient::UI; 41use CFClient::UI;
42use CFClient::MapWidget; 42use CFClient::MapWidget;
43 43
44$Event::DIED = sub { 44$Event::DIED = sub {
45 # TODO: display dialog box or so 45 # TODO: display dialog box or so
46 Carp::confess $_[1];#d#TODO: remove when stable
46 CFClient::error $_[1]; 47 CFClient::error $_[1];
47}; 48};
48 49
49#$SIG{__WARN__} = sub { Carp::cluck $_[0] };#d# 50#$SIG{__WARN__} = sub { Carp::cluck $_[0] };#d#
50 51
82our $CONSOLE; 83our $CONSOLE;
83our $METASERVER; 84our $METASERVER;
84our $LOGIN_BUTTON; 85our $LOGIN_BUTTON;
85our $QUIT_DIALOG; 86our $QUIT_DIALOG;
86our $HOST_ENTRY; 87our $HOST_ENTRY;
87our $SERVER_SETUP; 88
89our $SETUP_DIALOG;
90our $SETUP_NOTEBOOK;
91our $SETUP_SERVER;
92our $SETUP_KEYBOARD;
93our $SETUP_SPELLS;
88 94
89our $FLOORBOX; 95our $FLOORBOX;
90our $GAUGES; 96our $GAUGES;
91our $STATWIDS; 97our $STATWIDS;
92 98
104our $INV_WINDOW; 110our $INV_WINDOW;
105our $INV; 111our $INV;
106our $INVR; 112our $INVR;
107our $INV_RIGHT_HB; 113our $INV_RIGHT_HB;
108 114
109our $BIND_WINDOW;
110our $BIND_EDITOR; 115our $BIND_EDITOR;
111 116
112our $SPELL_LIST; 117our $PICKUP_CFG;
113 118
114sub status { 119sub status {
115 $STATUSBOX->add (CFClient::UI::Label::escape $_[0], pri => -10, group => "status", timeout => 10, fg => [1, 1, 0, 1]); 120 $STATUSBOX->add (CFClient::UI::Label::escape $_[0], pri => -10, group => "status", timeout => 10, fg => [1, 1, 0, 1]);
116} 121}
117 122
121 126
122sub start_game { 127sub start_game {
123 status "logging in..."; 128 status "logging in...";
124 129
125 $LOGIN_BUTTON->set_text ("Logout"); 130 $LOGIN_BUTTON->set_text ("Logout");
126 $SERVER_SETUP->hide; 131 $SETUP_DIALOG->hide;
127 132
128 my $mapsize = List::Util::min 32, List::Util::max 11, int $WIDTH * $CFG->{mapsize} * 0.01 / 32; 133 my $mapsize = List::Util::min 32, List::Util::max 11, int $WIDTH * $CFG->{mapsize} * 0.01 / 32;
129 134
130 my ($host, $port) = split /:/, $CFG->{host}; 135 my ($host, $port) = split /:/, $CFG->{host};
131 136
169 } 174 }
170} 175}
171 176
172sub stop_game { 177sub stop_game {
173 $LOGIN_BUTTON->set_text ("Login"); 178 $LOGIN_BUTTON->set_text ("Login");
174 $SERVER_SETUP->show; 179 $SETUP_DIALOG->show;
175 $INV_WINDOW->hide; 180 $INV_WINDOW->hide;
176 $LOGVIEW->hide; 181 $LOGVIEW->hide;
177 182
178 return unless $CONN; 183 return unless $CONN;
179 184
181 186
182 $CONN->destroy; 187 $CONN->destroy;
183 $CONN = 0; # false, does not autovivify 188 $CONN = 0; # false, does not autovivify
184} 189}
185 190
186sub client_setup { 191sub graphics_setup {
187 my $dialog = new CFClient::UI::FancyFrame
188 x => 1,
189 y => $HEIGHT * (1/8),
190 name => "client_setup",
191 title => "Client Setup",
192 child => (my $vbox = new CFClient::UI::VBox); 192 my $vbox = new CFClient::UI::VBox;
193 193
194 $vbox->add (my $table = new CFClient::UI::Table expand => 1, col_expand => [0, 1]); 194 $vbox->add (my $table = new CFClient::UI::Table expand => 1, col_expand => [0, 1]);
195 195
196 $table->add (0, 0, new CFClient::UI::Label valign => 0, align => 1, text => "Video Mode"); 196 $table->add (0, 0, new CFClient::UI::Label valign => 0, align => 1, text => "Video Mode");
197 $table->add (1, 0, my $hbox = new CFClient::UI::HBox); 197 $table->add (1, 0, my $hbox = new CFClient::UI::HBox);
321 on_activate => sub { 321 on_activate => sub {
322 video_shutdown (); 322 video_shutdown ();
323 video_init (); 323 video_init ();
324 } 324 }
325 ); 325 );
326
327 $vbox
328}
329
330sub audio_setup {
331 my $vbox = new CFClient::UI::VBox;
332
333 $vbox->add (my $table = new CFClient::UI::Table expand => 1, col_expand => [0, 1]);
334
335 my $row = 0;
326 336
327 $table->add (0, $row, new CFClient::UI::Label valign => 0, align => 1, text => "Audio Enable"); 337 $table->add (0, $row, new CFClient::UI::Label valign => 0, align => 1, text => "Audio Enable");
328 $table->add (1, $row++, new CFClient::UI::CheckBox 338 $table->add (1, $row++, new CFClient::UI::CheckBox
329 state => $CFG->{audio_enable}, 339 state => $CFG->{audio_enable},
330 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.", 340 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.",
361 audio_shutdown (); 371 audio_shutdown ();
362 audio_init (); 372 audio_init ();
363 } 373 }
364 ); 374 );
365 375
366 $table->add (0, $row, new CFClient::UI::Label valign => 0, align => 1, text => "Chat Command"); 376 $vbox
367 $table->add (1, $row++, my $saycmd = new CFClient::UI::Entry
368 text => $CFG->{say_command},
369 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. "
370 . "Usually you want to enter something like 'say' or 'shout' or 'gsay' here. "
371 . "But you could also set it to <b>tell <i>playername</i></b> to only chat with that user.",
372 on_changed => sub {
373 my ($self, $value) = @_;
374 $CFG->{say_command} = $value;
375 }
376 );
377
378 $dialog
379} 377}
380 378
381sub set_stats_window_fontsize { 379sub set_stats_window_fontsize {
382 for (values %{$STATWIDS}) { 380 for (values %{$STATWIDS}) {
383 $_->set_fontsize ($::CFG->{stat_fontsize}); 381 $_->set_fontsize ($::CFG->{stat_fontsize});
556 update_stats_window ({}); 554 update_stats_window ({});
557 555
558 $tgw 556 $tgw
559} 557}
560 558
561sub formsep { 559sub formsep($) {
562 reverse join ",", grep length, split /(...)/, reverse $_[0] * 1 560 scalar reverse join ",", unpack "(A3)*", reverse $_[0] * 1
563} 561}
564 562
565sub update_stats_window { 563sub update_stats_window {
566 my ($stats) = @_; 564 my ($stats) = @_;
567 565
710} 708}
711 709
712sub metaserver_dialog { 710sub metaserver_dialog {
713 my $dialog = new CFClient::UI::FancyFrame 711 my $dialog = new CFClient::UI::FancyFrame
714 title => "Server List", 712 title => "Server List",
713 name => 'metaserver_dialog',
715 x => 'center', 714 x => 'center',
716 y => 'center', 715 y => 'center',
717 child => (my $vbox = new CFClient::UI::VBox), 716 child => (my $vbox = new CFClient::UI::VBox),
718 on_visibility_change => sub { 717 on_visibility_change => sub {
719 update_metaserver if $_[1]; 718 update_metaserver if $_[1];
724 723
725 $dialog 724 $dialog
726} 725}
727 726
728sub server_setup { 727sub server_setup {
729 my $dialog = $SERVER_SETUP = new CFClient::UI::FancyFrame
730 x => "center",
731 y => "center",
732 name => "server_setup",
733 title => "Server Setup",
734 child => (my $vbox = new CFClient::UI::VBox), 728 my $vbox = new CFClient::UI::VBox;
735 ;
736 729
737 $vbox->add (my $table = new CFClient::UI::Table expand => 1, col_expand => [0, 1]); 730 $vbox->add (my $table = new CFClient::UI::Table expand => 1, col_expand => [0, 1]);
738 $table->add (0, 2, new CFClient::UI::Label valign => 0, align => 1, text => "Host:Port"); 731 $table->add (0, 2, new CFClient::UI::Label valign => 0, align => 1, text => "Host:Port");
739 732
740 { 733 {
833 $CONN ? stop_game 826 $CONN ? stop_game
834 : start_game; 827 : start_game;
835 }, 828 },
836 ); 829 );
837 830
838 $dialog 831 $table->add (0, 12, new CFClient::UI::Label valign => 0, align => 1, text => "Chat Command");
832 $table->add (1, 12, my $saycmd = new CFClient::UI::Entry
833 text => $CFG->{say_command},
834 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. "
835 . "Usually you want to enter something like 'say' or 'shout' or 'gsay' here. "
836 . "But you could also set it to <b>tell <i>playername</i></b> to only chat with that user.",
837 on_changed => sub {
838 my ($self, $value) = @_;
839 $CFG->{say_command} = $value;
840 }
841 );
842
843 $vbox
839} 844}
840 845
841sub message_window { 846sub message_window {
842 my $window = new CFClient::UI::FancyFrame 847 my $window = new CFClient::UI::FancyFrame
843 name => "message_window", 848 name => "message_window",
869 }, 874 },
870 on_activate => sub { 875 on_activate => sub {
871 my ($input, $text) = @_; 876 my ($input, $text) = @_;
872 $input->set_text (''); 877 $input->set_text ('');
873 878
874 if ($text =~ /^\/bind\s+(.*)$/) {
875 CFClient::Binder::open_binding_dialog (sub {
876 my ($mod, $sym) = @_;
877 $::CFG->{bindings}->{$mod}->{$sym} = [$1];
878 });
879 } elsif ($text =~ /^\/(.*)/) { 879 if ($text =~ /^\/(.*)/) {
880 $::CONN->user_send ($1); 880 $::CONN->user_send ($1);
881 } else { 881 } else {
882 my $say_cmd = $::CFG->{say_command} || 'say'; 882 my $say_cmd = $::CFG->{say_command} || 'say';
883 $::CONN->user_send ("$say_cmd $text"); 883 $::CONN->user_send ("$say_cmd $text");
884 } 884 }
929 } 929 }
930 930
931 $QUIT_DIALOG->show; 931 $QUIT_DIALOG->show;
932} 932}
933 933
934sub autopickup_setup {
935 my $table = new CFClient::UI::Table;
936
937 for (
938 ["General", 0, 0,
939 ["Enable autopickup" => CFClient::Pickup::PU_NEWMODE],
940 ["Inhibit autopickup" => CFClient::Pickup::PU_INHIBIT],
941 ["Stop before pickup" => CFClient::Pickup::PU_STOP],
942 ["Debug autopickup" => CFClient::Pickup::PU_DEBUG],
943 ],
944 ["Weapons", 0, 6,
945 ["All weapons" => CFClient::Pickup::PU_ALLWEAPON],
946 ["Missile weapons" => CFClient::Pickup::PU_MISSILEWEAPON],
947 ["Bows" => CFClient::Pickup::PU_BOW],
948 ["Arrows" => CFClient::Pickup::PU_ARROW],
949 ],
950 ["Armour", 0, 12,
951 ["Helmets" => CFClient::Pickup::PU_HELMET],
952 ["Shields" => CFClient::Pickup::PU_SHIELD],
953 ["Body Armour" => CFClient::Pickup::PU_ARMOUR],
954 ["Boots" => CFClient::Pickup::PU_BOOTS],
955 ["Gloves" => CFClient::Pickup::PU_GLOVES],
956 ["Cloaks" => CFClient::Pickup::PU_CLOAK],
957 ],
958
959 ["Readables", 2, 2,
960 ["Spellbooks" => CFClient::Pickup::PU_SPELLBOOK],
961 ["Skillscrolls" => CFClient::Pickup::PU_SKILLSCROLL],
962 ["Normal Books/Scrolls" => CFClient::Pickup::PU_READABLES],
963 ],
964 ["Misc", 2, 7,
965 ["Food" => CFClient::Pickup::PU_FOOD],
966 ["Drinks" => CFClient::Pickup::PU_DRINK],
967 ["Valuables (Money, Gems)" => CFClient::Pickup::PU_VALUABLES],
968 ["Keys" => CFClient::Pickup::PU_KEY],
969 ["Magical Items" => CFClient::Pickup::PU_MAGICAL],
970 ["Potions" => CFClient::Pickup::PU_POTION],
971 ["Magic Devices" => CFClient::Pickup::PU_MAGIC_DEVICE],
972 ["Ignore cursed" => CFClient::Pickup::PU_NOT_CURSED],
973 ["Jewelery" => CFClient::Pickup::PU_JEWELS],
974 ],
975 )
976 {
977 my ($title, $x, $y, @bits) = @$_;
978 $table->add ($x, $y, new CFClient::UI::Label text => $title, align => 1, fg => [1, 1, 0]);
979
980 for (@bits) {
981 ++$y;
982
983 my $mask = $_->[1];
984 $table->add ($x , $y, new CFClient::UI::Label text => $_->[0], align => 1, expand => 1);
985 $table->add ($x+1, $y, new CFClient::UI::CheckBox
986 state => $CFG->{pickup} & $mask,
987 on_changed => sub {
988 my ($box, $value) = @_;
989 if ($value) {
990 $::CFG->{pickup} |= $mask;
991 } else {
992 $::CFG->{pickup} = $::CFG->{pickup} & ~$mask;
993 }
994 $::CONN->send (sprintf "command pickup %u", $::CFG->{pickup})
995 if defined $::CONN;
996 });
997 }
998 }
999
1000 $table
1001}
1002
934sub make_inventory_window { 1003sub make_inventory_window {
935 my $invwin = $INV_WINDOW = new CFClient::UI::FancyFrame 1004 my $invwin = $INV_WINDOW = new CFClient::UI::FancyFrame
936 x => "center", 1005 x => "center",
937 y => "center", 1006 y => "center",
938 force_w => $WIDTH * 9/10, 1007 force_w => $WIDTH * 9/10,
956 CFClient::Protocol::set_opencont ($::CONN, 0, "Floor"); 1025 CFClient::Protocol::set_opencont ($::CONN, 0, "Floor");
957 1026
958 $invwin 1027 $invwin
959} 1028}
960 1029
961sub make_spell_list { 1030sub spell_setup {
962 $SPELL_LIST = new CFClient::UI::SpellList 1031 new CFClient::UI::SpellList
963 force_w => $WIDTH * (9/10),
964 force_h => $HEIGHT * (9/10);
965 $SPELL_LIST
966} 1032}
967 1033
968sub make_binding_window { 1034sub keyboard_setup {
969 my $binding_list = new CFClient::UI::VBox; 1035 my $binding_list = new CFClient::UI::VBox;
970 1036
971 my $refresh; 1037 my $refresh;
972 $refresh = sub { 1038 $refresh = sub {
973 $binding_list->clear (); 1039 $binding_list->clear ();
997 sub { 1063 sub {
998 my ($nmod, $nsym, $ncmds) = @_; 1064 my ($nmod, $nsym, $ncmds) = @_;
999 delete $::CFG->{bindings}->{$mod}->{$sym}; 1065 delete $::CFG->{bindings}->{$mod}->{$sym};
1000 $::CFG->{bindings}->{$nmod}->{$nsym} = $ncmds; 1066 $::CFG->{bindings}->{$nmod}->{$nsym} = $ncmds;
1001 $refresh->(); 1067 $refresh->();
1068 $SETUP_NOTEBOOK->set_current_page ($SETUP_KEYBOARD);
1002 $::BIND_WINDOW->show; 1069 $SETUP_DIALOG->show;
1003 }, 1070 },
1004 sub { 1071 sub {
1072 $SETUP_NOTEBOOK->set_current_page ($SETUP_KEYBOARD);
1005 $::BIND_WINDOW->show; 1073 $SETUP_DIALOG->show;
1006 }); 1074 });
1007 $::BIND_EDITOR->show; 1075 $::BIND_EDITOR->show;
1008 $::BIND_WINDOW->hide; 1076 $SETUP_DIALOG->hide;
1009 }); 1077 });
1010 1078
1011 $hb->add (new CFClient::UI::Label text => "(Key: $nam)"); 1079 $hb->add (new CFClient::UI::Label text => "(Key: $nam)");
1012 $hb->add (new CFClient::UI::Label text => $lbl, expand => 1); 1080 $hb->add (new CFClient::UI::Label text => $lbl, expand => 1);
1013 } 1081 }
1014 } 1082 }
1015 }; 1083 };
1016 1084
1017 $BIND_WINDOW = new CFClient::UI::FancyFrame
1018 title => "Bindings",
1019 x => "center",
1020 y => "center",
1021 def_w => int $WIDTH * 9/10,
1022 def_h => int $HEIGHT * 9/10,
1023 on_visibility_change => sub {
1024 my ($self, $visible) = @_;
1025 $refresh->() if $visible;
1026 };
1027
1028 $BIND_WINDOW->add (my $vb = new CFClient::UI::VBox); 1085 my $vb = new CFClient::UI::VBox;
1029 $vb->add ($binding_list); 1086 $vb->add ($binding_list);
1030 $vb->add (my $hb = new CFClient::UI::HBox); 1087 $vb->add (my $hb = new CFClient::UI::HBox);
1088
1031 $hb->add (new CFClient::UI::Button 1089 $hb->add (new CFClient::UI::Button
1032 text => "record new", 1090 text => "record new",
1033 expand => 1, 1091 expand => 1,
1034 tooltip => "This button opens the binding editor with an empty binding.", 1092 tooltip => "This button opens the binding editor with an empty binding.",
1035 on_activate => sub { 1093 on_activate => sub {
1036 $::BIND_EDITOR->set_binding (undef, undef, [], 1094 $::BIND_EDITOR->set_binding (undef, undef, [],
1037 sub { 1095 sub {
1038 my ($mod, $sym, $cmds) = @_; 1096 my ($mod, $sym, $cmds) = @_;
1039 $::CFG->{bindings}->{$mod}->{$sym} = $cmds; 1097 $::CFG->{bindings}->{$mod}->{$sym} = $cmds;
1040 $refresh->(); 1098 $refresh->();
1041 $::BIND_WINDOW->show; 1099 $SETUP_NOTEBOOK->set_current_page ($SETUP_KEYBOARD);
1100 $SETUP_DIALOG->show;
1042 }, 1101 },
1043 sub { 1102 sub {
1044 $::BIND_WINDOW->show; 1103 $SETUP_NOTEBOOK->set_current_page ($SETUP_KEYBOARD);
1104 $SETUP_DIALOG->show;
1045 }); 1105 });
1046 $::BIND_WINDOW->hide; 1106 $SETUP_DIALOG->hide;
1047 $::BIND_EDITOR->show; 1107 $::BIND_EDITOR->show;
1048 }, 1108 },
1049 ); 1109 );
1110
1050 $hb->add (new CFClient::UI::Button 1111 $hb->add (new CFClient::UI::Button
1051 text => "close", 1112 text => "close",
1052 tooltip => "Closes the binding window", 1113 tooltip => "Closes the binding window",
1053 expand => 1, 1114 expand => 1,
1054 on_activate => sub { 1115 on_activate => sub {
1055 $::BIND_WINDOW->hide; 1116 $SETUP_DIALOG->hide;
1056 } 1117 }
1057 ); 1118 );
1058 1119
1059 $refresh->(); 1120 $refresh->();
1060 $BIND_WINDOW 1121
1122 $vb
1061} 1123}
1062 1124
1063sub make_help_window { 1125sub make_help_window {
1064 my $win = new CFClient::UI::FancyFrame 1126 my $win = new CFClient::UI::FancyFrame
1127 x => 'center',
1128 y => 'center',
1129 name => 'doc_browser',
1065 def_w => int $WIDTH * 7/8, 1130 force_w => int $WIDTH * 7/8,
1066 def_h => int $HEIGHT * 7/8, 1131 force_h => int $HEIGHT * 7/8,
1067 title => "Documentation"; 1132 title => "Documentation";
1068 1133
1069 $win->add (my $vbox = new CFClient::UI::VBox); 1134 $win->add (my $vbox = new CFClient::UI::VBox);
1070 1135
1071 $vbox->add (my $buttons = new CFClient::UI::HBox); 1136 $vbox->add (my $buttons = new CFClient::UI::HBox);
1072 $vbox->add (my $viewer = new CFClient::UI::TextView expand => 1, fontsize => 0.8); 1137 $vbox->add (my $viewer = new CFClient::UI::TextView expand => 1, fontsize => 0.8);
1153 force_y => "max", 1218 force_y => "max",
1154 child => $STATUSBOX, 1219 child => $STATUSBOX,
1155 )->show; 1220 )->show;
1156 1221
1157 CFClient::UI::FancyFrame->new ( 1222 CFClient::UI::FancyFrame->new (
1223 title => "Map",
1224 name => "mapmap",
1158 x => 0, 1225 x => 0,
1159 y => $FONTSIZE + 8, 1226 y => $FONTSIZE + 8,
1160 border_bg => [1, 1, 1, 192/255], 1227 border_bg => [1, 1, 1, 192/255],
1161 bg => [1, 1, 1, 0], 1228 bg => [1, 1, 1, 0],
1162 child => ($MAPMAP = new CFClient::MapWidget::MapMap 1229 child => ($MAPMAP = new CFClient::MapWidget::MapMap
1187 can_hover => 1, 1254 can_hover => 1,
1188 can_events => 1, 1255 can_events => 1,
1189 tooltip => "<b>Server Log</b>. This text viewer contains all the messages sent by the server.", 1256 tooltip => "<b>Server Log</b>. This text viewer contains all the messages sent by the server.",
1190 ; 1257 ;
1191 1258
1259 $SETUP_DIALOG = new CFClient::UI::FancyFrame
1260 title => "Setup",
1261 name => "setup_dialog",
1262 x => 'center',
1263 y => 'center',
1264 force_w => $::WIDTH * 0.6,
1265 force_h => $::HEIGHT * 0.6,
1266 ;
1267
1268 $SETUP_DIALOG->add ($SETUP_NOTEBOOK = new CFClient::UI::Notebook expand => 1, debug => 1,
1269 filter => new CFClient::UI::ScrolledWindow xxx => 1, expand => 1, scroll_y => 1);
1270
1271 $SETUP_NOTEBOOK->add (Server => $SETUP_SERVER = server_setup,
1272 "Configure the server to play on, your username, password and other server-related options.");
1273 $SETUP_NOTEBOOK->add (Pickup => autopickup_setup,
1274 "Configure autopicking stetings, i.e. which items you will pick up automatically when walking over them.");
1275 $SETUP_NOTEBOOK->add (Graphics => graphics_setup,
1276 "Configure the video mode, performance, fonts and other graphical aspects of the game.");
1277 $SETUP_NOTEBOOK->add (Audio => audio_setup,
1278 "Configure the use of audio, sound effects and background music.");
1279 $SETUP_NOTEBOOK->add (Keyboard => $SETUP_KEYBOARD = keyboard_setup,
1280 "Lets you define, edit and delete bindings."
1281 . "There is a shortcut for making bindings: Left Control + Insert opens the binding editor "
1282 . "with nothing set and the recording started. After doing the actions you "
1283 . "want to record press Insert and you will be asked to press a key-combo. "
1284 . "After pressing the combo the binding will be saved automatically and the "
1285 . "binding editor closes");
1286 $SETUP_NOTEBOOK->add (Spells => $SETUP_SPELLS = spell_setup,
1287 "Displays all spells you have and lets you edit keyboard shortcuts for them.");
1288
1192 $BUTTONBAR = new CFClient::UI::HBox x => 0, y => 0; 1289 $BUTTONBAR = new CFClient::UI::HBox x => 0, y => 0;
1193 1290
1194 $BUTTONBAR->add (new CFClient::UI::Flopper text => "Client Setup", other => client_setup, 1291 $BUTTONBAR->add (new CFClient::UI::Flopper text => "Setup", other => $SETUP_DIALOG,
1195 tooltip => "Toggles a dialog where you can configure various aspects of the client, such as graphics mode, performance, and audio options."); 1292 tooltip => "Toggles a dialog where you can configure all aspects of this client.");
1196 $BUTTONBAR->add (new CFClient::UI::Flopper text => "Server Setup", other => server_setup, 1293
1197 tooltip => "Toggles a dialog where you can configure the server to play on, your username, password and other server-related options.");
1198 $BUTTONBAR->add (new CFClient::UI::Flopper text => "Message Window", other => message_window, 1294 $BUTTONBAR->add (new CFClient::UI::Flopper text => "Message Window", other => message_window,
1199 tooltip => "Toggles the server message log, where the client collects <i>all</i> messages from the server."); 1295 tooltip => "Toggles the server message log, where the client collects <i>all</i> messages from the server.");
1200 1296
1201 make_gauge_window->show; # XXX: this has to be set before make_stats_window as make_stats_window calls update_stats_window which updated the gauges also X-D 1297 make_gauge_window->show; # XXX: this has to be set before make_stats_window as make_stats_window calls update_stats_window which updated the gauges also X-D
1202 1298
1203 $BUTTONBAR->add (new CFClient::UI::Flopper text => "Stats Window", other => make_stats_window, 1299 $BUTTONBAR->add (new CFClient::UI::Flopper text => "Stats Window", other => make_stats_window,
1204 tooltip => "Toggles the statistics window, where all your Stats and Resistances are being displayed at all times."); 1300 tooltip => "Toggles the statistics window, where all your Stats and Resistances are being displayed at all times.");
1205 $BUTTONBAR->add (new CFClient::UI::Flopper text => "Inventory", other => make_inventory_window, 1301 $BUTTONBAR->add (new CFClient::UI::Flopper text => "Inventory", other => make_inventory_window,
1206 tooltip => "Toggles the inventory window, where you can manage your loot (or treaures :)." 1302 tooltip => "Toggles the inventory window, where you can manage your loot (or treasures :). "
1207 ."You can also hit the Tab-key to show/hide the Inventory."); 1303 . "You can also hit the <b>Tab</b>-key to show/hide the Inventory.");
1208 1304
1209 $BUTTONBAR->add (new CFClient::UI::Button 1305 $BUTTONBAR->add (new CFClient::UI::Button
1210 text => "Save Config", 1306 text => "Save Config",
1211 tooltip => "Saves the options chosen in the client setting, server settings and the window layout to be restored on later runs.", 1307 tooltip => "Saves the options chosen in the client setting, server settings and the window layout to be restored on later runs.",
1212 on_activate => sub { 1308 on_activate => sub {
1216 }, 1312 },
1217 ); 1313 );
1218 1314
1219 $BUTTONBAR->add (new CFClient::UI::Flopper text => "Help!", other => make_help_window, 1315 $BUTTONBAR->add (new CFClient::UI::Flopper text => "Help!", other => make_help_window,
1220 tooltip => "View Documentation"); 1316 tooltip => "View Documentation");
1221
1222 $BUTTONBAR->add (new CFClient::UI::Flopper
1223 text => "Bindings",
1224 other => make_binding_window,
1225 tooltip =>
1226 "Lets you define, edit and delete bindings."
1227 ."There is a shortcut for making bindings: LCTRL+Insert opens the binding editor "
1228 ."with nothing set and the recording started. After doing the actions you "
1229 ."want to record press Insert and you will be asked to press a key-combo."
1230 ."After pressing the combo the binding will be saved automatically and the "
1231 ."binding editor closes");
1232
1233 $BUTTONBAR->add (new CFClient::UI::Flopper
1234 text => "Spells",
1235 other => make_spell_list,
1236 tooltip => "The spell list");
1237 1317
1238 $BUTTONBAR->add (new CFClient::UI::Button 1318 $BUTTONBAR->add (new CFClient::UI::Button
1239 text => "Quit", 1319 text => "Quit",
1240 tooltip => "Terminates the program", 1320 tooltip => "Terminates the program",
1241 on_activate => sub { 1321 on_activate => sub {
1246 } 1326 }
1247 }, 1327 },
1248 ); 1328 );
1249 1329
1250 $BUTTONBAR->show; 1330 $BUTTONBAR->show;
1251 $SERVER_SETUP->show; 1331 $SETUP_DIALOG->show;
1332 }
1252 1333
1253 $STATUSBOX->add ("Set video mode $WIDTH×$HEIGHT", timeout => 10, fg => [1, 1, 1, 0.5]); 1334 $STATUSBOX->add ("Set video mode $WIDTH×$HEIGHT", timeout => 10, fg => [1, 1, 1, 0.5]);
1254 }
1255} 1335}
1256 1336
1257sub video_shutdown { 1337sub video_shutdown {
1258 undef $SDL_ACTIVE; 1338 undef $SDL_ACTIVE;
1259} 1339}
1391}; 1471};
1392 1472
1393 CFClient::SDL_GL_SwapBuffers; 1473 CFClient::SDL_GL_SwapBuffers;
1394} 1474}
1395 1475
1396my $refresh_watcher = Event->timer (after => 0, hard => 1, interval => 1 / $MAX_FPS, cb => sub { 1476my $refresh_watcher = Event->timer (after => 0, hard => 0, interval => 1 / $MAX_FPS, cb => sub {
1397 $NOW = time; 1477 $NOW = time;
1398 1478
1399 ($SDL_CB{$_->{type}} || sub { warn "unhandled event $_->{type}" })->($_) 1479 ($SDL_CB{$_->{type}} || sub { warn "unhandled event $_->{type}" })->($_)
1400 for CFClient::SDL_PollEvent; 1480 for CFClient::SDL_PollEvent;
1401 1481
1468############################################################################# 1548#############################################################################
1469 1549
1470$SIG{INT} = $SIG{TERM} = sub { exit }; 1550$SIG{INT} = $SIG{TERM} = sub { exit };
1471 1551
1472{ 1552{
1473 local $SIG{__DIE__} = sub { CFClient::fatal $_[0] if defined $^S && !$^S }; 1553 local $SIG{__DIE__} = sub {
1554 return unless defined $^S && !$^S;
1555 Carp::confess $_[1];#d#TODO: remove when stable
1556 CFClient::fatal $_[0];
1557 };
1474 1558
1475 CFClient::read_cfg "$Crossfire::VARDIR/cfplusrc"; 1559 CFClient::read_cfg "$Crossfire::VARDIR/cfplusrc";
1476 CFClient::UI::set_layout ($::CFG->{layout}); 1560 CFClient::UI::set_layout ($::CFG->{layout});
1477 1561
1478 my %DEF_CFG = ( 1562 my %DEF_CFG = (

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines