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.19 by elmex, Sat May 27 21:15:57 2006 UTC vs.
Revision 1.29 by root, Mon May 29 21:54:16 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
182 req_x => 1, 186 req_x => 1,
385 389
386sub make_gauge_window { 390sub make_gauge_window {
387 my $gh = int $HEIGHT * $CFG->{gauge_size}; 391 my $gh = int $HEIGHT * $CFG->{gauge_size};
388 392
389 my $win = new CFClient::UI::Frame ( 393 my $win = new CFClient::UI::Frame (
394 req_x => 0,
390 req_y => -1, 395 req_y => -1,
391 user_w => $WIDTH, 396 def_w => $WIDTH,
392 user_h => $gh, 397 def_h => $gh,
393 ); 398 );
394 399
395 $win->add (my $hbox = new CFClient::UI::HBox 400 $win->add (my $hbox = new CFClient::UI::HBox
396 children => [ 401 children => [
397 (new CFClient::UI::HBox expand => 1), 402 (new CFClient::UI::HBox expand => 1),
432 437
433 &set_gauge_window_fontsize; 438 &set_gauge_window_fontsize;
434 439
435 $win 440 $win
436} 441}
442
437 443
438sub make_stats_window { 444sub make_stats_window {
439 my $tgw = new CFClient::UI::FancyFrame 445 my $tgw = new CFClient::UI::FancyFrame
440 req_y => $HEIGHT * (2/8), 446 req_y => $HEIGHT * (2/8),
441 req_x => -1, 447 req_x => -1,
710 } 716 }
711 }); 717 });
712} 718}
713 719
714sub server_setup { 720sub server_setup {
715 my $dialog = new CFClient::UI::FancyFrame 721 my $dialog = $SERVER_SETUP = new CFClient::UI::FancyFrame
716 x => $WIDTH * (1/3), 722 x => $WIDTH * (1/3),
717 y => $HEIGHT * (1/8), 723 y => $HEIGHT * (1/8),
718 name => "server_setup", 724 name => "server_setup",
719 title => "Server Setup", 725 title => "Server Setup",
720 child => (my $vbox = new CFClient::UI::VBox), 726 child => (my $vbox = new CFClient::UI::VBox),
721 on_visibility_change => sub { 727 on_visibility_change => sub {
722 $_[0]->show_centered if $_[1] 728 my ($self, $visible) = @_;
729 $self->center if $visible;
723 }; 730 },
731 ;
724 732
725 $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]);
726 $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");
727 735
728 { 736 {
833 name => "message_window", 841 name => "message_window",
834 title => "Messages", 842 title => "Messages",
835 border_bg => [1, 1, 1, 1], 843 border_bg => [1, 1, 1, 1],
836 bg => [0, 0, 0, 0.75], 844 bg => [0, 0, 0, 0.75],
837 req_x => -1, 845 req_x => -1,
846 req_y => 0,
838 user_w => int $::WIDTH / 3, 847 def_w => int $::WIDTH / 3,
839 user_h => int $::HEIGHT / 5, 848 def_h => int $::HEIGHT / 5,
840 child => (my $vbox = new CFClient::UI::VBox); 849 child => (my $vbox = new CFClient::UI::VBox);
841 850
842 $vbox->add ($LOGVIEW); 851 $vbox->add ($LOGVIEW);
843 852
844 $vbox->add (my $input = new CFClient::UI::Entry 853 $vbox->add (my $input = new CFClient::UI::Entry
858 }, 867 },
859 on_activate => sub { 868 on_activate => sub {
860 my ($input, $text) = @_; 869 my ($input, $text) = @_;
861 $input->set_text (''); 870 $input->set_text ('');
862 871
872 if ($text =~ /^\/bind\s+(.*)$/) {
873 CFClient::Recorder::open_binding_dialog ([$1]);
863 if ($text =~ /^\/(.*)/) { 874 } elsif ($text =~ /^\/(.*)/) {
864 $::CONN->user_send ($1); 875 $::CONN->user_send ($1);
865 } else { 876 } else {
866 my $say_cmd = $::CFG->{say_command} || 'say'; 877 my $say_cmd = $::CFG->{say_command} || 'say';
867 $::CONN->user_send ("$say_cmd $text"); 878 $::CONN->user_send ("$say_cmd $text");
868 } 879 }
884 $window 895 $window
885} 896}
886 897
887sub open_quit_dialog { 898sub open_quit_dialog {
888 unless ($QUIT_DIALOG) { 899 unless ($QUIT_DIALOG) {
889
890 $QUIT_DIALOG = new CFClient::UI::FancyFrame title => "Really Quit?"; 900 $QUIT_DIALOG = new CFClient::UI::FancyFrame title => "Really Quit?";
891 901
892 $QUIT_DIALOG->add (my $vb = new CFClient::UI::VBox expand => 1); 902 $QUIT_DIALOG->add (my $vb = new CFClient::UI::VBox expand => 1);
893 903
894 $vb->add (new CFClient::UI::Label 904 $vb->add (new CFClient::UI::Label
905 $hb->add (new CFClient::UI::Button 915 $hb->add (new CFClient::UI::Button
906 text => "Quit anyway", 916 text => "Quit anyway",
907 expand => 1, 917 expand => 1,
908 on_activate => sub { exit }, 918 on_activate => sub { exit },
909 ); 919 );
920 }
910 921
922 $QUIT_DIALOG->show;
911 $QUIT_DIALOG->show_centered; 923 $QUIT_DIALOG->center;
912 } else {
913 $QUIT_DIALOG->show_centered;
914 }
915} 924}
916 925
917sub make_inventory_window { 926sub make_inventory_window {
918 my $invwin = new CFClient::UI::FancyFrame 927 my $invwin = $INV_WINDOW = new CFClient::UI::FancyFrame
919 user_w => $WIDTH * (7/8), 928 def_w => $WIDTH * 7/8,
920 user_h => $HEIGHT * (7/8), 929 def_h => $HEIGHT * 7/8,
921 title => "Inventory", 930 title => "Inventory",
922 name => "inventory_window", 931 name => "inventory_window",
923 on_visibility_change => sub { 932 on_visibility_change => sub {
924 $_[0]->show_centered if $_[1] 933 my ($self, $visible) = @_;
934 $self->center if $visible;
935 },
936 ;
937
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
948 $vb2->add ($INVR = new CFClient::UI::Inventory expand => 1);
949
950 # XXX: Call after $INVR = ... because set_opencont sets the items
951 CFClient::Protocol::set_opencont ($::CONN, 0, "Floor");
952
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 }
925 }; 992 };
926 993
927 $invwin->add (my $hb = new CFClient::UI::HBox expand => 1); 994 $BIND_WINDOW->add ($binding_list);
928 995 $refresh->();
929 $hb->add (my $vb1 = new CFClient::UI::VBox expand => 1); 996 $BIND_WINDOW
930 $vb1->add (my $lbl = new CFClient::UI::Label align => 0);
931 $lbl->set_text ("Player");
932 $vb1->add ($INV = new CFClient::UI::Inventory expand => 1);
933
934 $hb->add (my $vb2 = new CFClient::UI::VBox expand => 1);
935
936 $vb2->add (my $hb2 = new CFClient::UI::HBox);
937 $hb2->add ($INVR_LBL = new CFClient::UI::Label align => 0, expand => 1);
938 $hb2->add (new CFClient::UI::Button
939 text => "Close",
940 tooltip => "Close the currently open container (if one is open)",
941 on_activate => sub {
942 $CONN->send ("apply $CONN->{open_container}")
943 if $CONN->{open_container} != 0;
944 },
945 );
946
947 $INVR_LBL->set_text ("Floor");
948 $vb2->add ($INVR = new CFClient::UI::Inventory expand => 1);
949
950 $invwin
951} 997}
952 998
953sub make_help_window { 999sub make_help_window {
954 my $win = new CFClient::UI::FancyFrame 1000 my $win = new CFClient::UI::FancyFrame
955 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";
956 1004
957 $win->add (my $vbox = new CFClient::UI::VBox); 1005 $win->add (my $vbox = new CFClient::UI::VBox);
958 1006
959 $vbox->add (my $buttons = new CFClient::UI::HBox); 1007 $vbox->add (my $buttons = new CFClient::UI::HBox);
960 $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);
1087 $BUTTONBAR->add (new CFClient::UI::Button 1135 $BUTTONBAR->add (new CFClient::UI::Button
1088 text => "Save Config", 1136 text => "Save Config",
1089 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.",
1090 on_activate => sub { 1138 on_activate => sub {
1091 $::CFG->{layout} = CFClient::UI::get_layout; 1139 $::CFG->{layout} = CFClient::UI::get_layout;
1092 CFClient::write_cfg "$Crossfire::VARDIR/pclientrc"; 1140 CFClient::write_cfg "$Crossfire::VARDIR/cfplusrc";
1093 status "Configuration Saved"; 1141 status "Configuration Saved";
1094 }, 1142 },
1095 ); 1143 );
1096 1144
1097 $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,
1098 tooltip => "View Documentation"); 1146 tooltip => "View Documentation");
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");
1099 1155
1100 $BUTTONBAR->add (new CFClient::UI::Button 1156 $BUTTONBAR->add (new CFClient::UI::Button
1101 text => "Quit", 1157 text => "Quit",
1102 tooltip => "Terminates the program", 1158 tooltip => "Terminates the program",
1103 on_activate => sub { 1159 on_activate => sub {
1111 1167
1112 $BUTTONBAR->show; 1168 $BUTTONBAR->show;
1113 1169
1114 $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]);
1115 1171
1116 # delay till geometry is constant 1172 $SERVER_SETUP->show;
1117 $CFClient::UI::ROOT->on_post_alloc (startup => sub {
1118 $BUTTONBAR->{children}[1]->emit ("activate"); # pop up server setup
1119 my $widget = $GAUGES->{win};
1120 $widget->move (0, $HEIGHT - $widget->{h});#d# to in toplevel
1121 });
1122 force_refresh ();
1123 } 1173 }
1124} 1174}
1125 1175
1126sub video_shutdown { 1176sub video_shutdown {
1127 undef $SDL_ACTIVE; 1177 undef $SDL_ACTIVE;
1337############################################################################# 1387#############################################################################
1338 1388
1339$SIG{INT} = $SIG{TERM} = sub { exit }; 1389$SIG{INT} = $SIG{TERM} = sub { exit };
1340 1390
1341{ 1391{
1342 local $SIG{__DIE__} = sub { CFClient::fatal $_[0] }; 1392 local $SIG{__DIE__} = sub { CFClient::fatal $_[0] if defined $^S && !$^S };
1343 1393
1344 CFClient::read_cfg "$Crossfire::VARDIR/pclientrc"; 1394 CFClient::read_cfg "$Crossfire::VARDIR/cfplusrc";
1345 CFClient::UI::set_layout ($::CFG->{layout}); 1395 CFClient::UI::set_layout ($::CFG->{layout});
1346 1396
1347 my %DEF_CFG = ( 1397 my %DEF_CFG = (
1348 sdl_mode => 0, 1398 sdl_mode => 0,
1349 width => 640, 1399 width => 640,
1427 1477
1428END { CFClient::SDL_Quit } 1478END { CFClient::SDL_Quit }
1429 1479
1430=head1 NAME 1480=head1 NAME
1431 1481
1432pclient - A Crossfire+ and Crossfire game client 1482cfplus - A Crossfire+ and Crossfire game client
1433 1483
1434=head1 SYNOPSIS 1484=head1 SYNOPSIS
1435 1485
1436Just run it - no commandline arguments are supported. 1486Just run it - no commandline arguments are supported.
1437 1487
1438=head1 USAGE 1488=head1 USAGE
1439 1489
1440Pclient utilises OpenGL for all UI elements and the game. It is supposed to be used 1490cfplus utilises OpenGL for all UI elements and the game. It is supposed to be used
1441fullscreen and interactively. 1491fullscreen and interactively.
1442 1492
1443=head1 AUTHOR 1493=head1 AUTHOR
1444 1494
1445Marc Lehmann <crossfire@schmorp.de>, Robin Redeker <elmex@ta-sa.org> 1495Marc Lehmann <crossfire@schmorp.de>, Robin Redeker <elmex@ta-sa.org>

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines