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.26 by elmex, Mon May 29 20:12:15 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 $INVR_LBL;
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;
925 }; 935 },
936 ;
926 937
927 $invwin->add (my $hb = new CFClient::UI::HBox expand => 1); 938 $invwin->add (my $hb = new CFClient::UI::HBox homogeneous => 1);
928 939
929 $hb->add (my $vb1 = new CFClient::UI::VBox expand => 1); 940 $hb->add (my $vb1 = new CFClient::UI::VBox);
930 $vb1->add (my $lbl = new CFClient::UI::Label align => 0); 941 $vb1->add (new CFClient::UI::Label align => 0, text => "Player");
931 $lbl->set_text ("Player");
932 $vb1->add ($INV = new CFClient::UI::Inventory expand => 1); 942 $vb1->add ($INV = new CFClient::UI::Inventory expand => 1);
933 943
934 $hb->add (my $vb2 = new CFClient::UI::VBox expand => 1); 944 $hb->add (my $vb2 = new CFClient::UI::VBox);
935 945
936 $vb2->add (my $hb2 = new CFClient::UI::HBox); 946 $vb2->add (my $hb2 = new CFClient::UI::HBox);
937 $hb2->add ($INVR_LBL = new CFClient::UI::Label align => 0, expand => 1); 947 $hb2->add ($INVR_LBL = new CFClient::UI::Label align => 0, expand => 1, text => "Floor");
938 $hb2->add (new CFClient::UI::Button 948 $hb2->add (new CFClient::UI::Button
939 text => "Close", 949 text => "Close container",
940 tooltip => "Close the currently open container (if one is open)", 950 tooltip => "Close the currently open container (if one is open)",
941 on_activate => sub { 951 on_activate => sub {
942 $CONN->send ("apply $CONN->{open_container}") 952 $CONN->send ("apply $CONN->{open_container}")
943 if $CONN->{open_container} != 0; 953 if $CONN->{open_container} != 0;
944 }, 954 },
945 ); 955 );
946 956
947 $INVR_LBL->set_text ("Floor");
948 $vb2->add ($INVR = new CFClient::UI::Inventory expand => 1); 957 $vb2->add ($INVR = new CFClient::UI::Inventory expand => 1);
949 958
950 $invwin 959 $invwin
960}
961
962sub make_binding_window {
963 my $binding_list = new CFClient::UI::VBox;
964
965 my $refresh = sub {
966 $binding_list->clear ();
967
968 for my $mod (keys %{$::CFG->{bindings}}) {
969 for my $sym (keys %{$::CFG->{bindings}->{$mod}}) {
970 my $cmds = $::CFG->{bindings}->{$mod}->{$sym};
971 next unless ref $cmds eq 'ARRAY' and @$cmds > 0;
972
973 my $lbl = join "; ", @$cmds;
974 my $nam = CFClient::Recorder::keycombo_to_name ($mod, $sym);
975 $binding_list->add (my $hb = new CFClient::UI::HBox);
976 $hb->add (new CFClient::UI::Button
977 text => "delete",
978 on_activate => sub {
979 $binding_list->remove ($hb);
980 delete $::CFG->{bindings}->{$mod}->{$sym};
981 });
982 $hb->add (new CFClient::UI::Label text => "($nam)");
983 $hb->add (new CFClient::UI::Label text => $lbl, expand => 1);
984 }
985 }
986 };
987
988 $BIND_WINDOW = new CFClient::UI::FancyFrame
989 title => "Bindings",
990 def_w => int $WIDTH * 7/8,
991 def_h => int $HEIGHT * 7/8,
992 on_visibility_change => sub {
993 my ($self, $visible) = @_;
994 if ($visible) {
995 $self->center;
996 $refresh->()
997 }
998 };
999
1000 $BIND_WINDOW->add ($binding_list);
1001 $refresh->();
1002 $BIND_WINDOW
951} 1003}
952 1004
953sub make_help_window { 1005sub make_help_window {
954 my $win = new CFClient::UI::FancyFrame 1006 my $win = new CFClient::UI::FancyFrame
955 user_w => $WIDTH * (7/8), user_h => $HEIGHT * (7/8), title => "Documentation"; 1007 def_w => int $WIDTH * 7/8,
1008 def_h => int $HEIGHT * 7/8,
1009 title => "Documentation";
956 1010
957 $win->add (my $vbox = new CFClient::UI::VBox); 1011 $win->add (my $vbox = new CFClient::UI::VBox);
958 1012
959 $vbox->add (my $buttons = new CFClient::UI::HBox); 1013 $vbox->add (my $buttons = new CFClient::UI::HBox);
960 $vbox->add (my $viewer = new CFClient::UI::TextView expand => 1, fontsize => 0.8); 1014 $vbox->add (my $viewer = new CFClient::UI::TextView expand => 1, fontsize => 0.8);
1094 }, 1148 },
1095 ); 1149 );
1096 1150
1097 $BUTTONBAR->add (new CFClient::UI::Flopper text => "Help!", other => make_help_window, 1151 $BUTTONBAR->add (new CFClient::UI::Flopper text => "Help!", other => make_help_window,
1098 tooltip => "View Documentation"); 1152 tooltip => "View Documentation");
1153
1154 $BUTTONBAR->add (new CFClient::UI::Flopper
1155 text => "Bindings",
1156 other => make_binding_window,
1157 tooltip => "Lets you delete bindings you have made with the recorder"
1158 );
1159 $BUTTONBAR->add (new CFClient::UI::Flopper text => "[Rec]", other => CFClient::Recorder::make_window,
1160 tooltip => "This feature lets you record a series of actions (eg. walking a path or ready a skill) and bind them to keys");
1099 1161
1100 $BUTTONBAR->add (new CFClient::UI::Button 1162 $BUTTONBAR->add (new CFClient::UI::Button
1101 text => "Quit", 1163 text => "Quit",
1102 tooltip => "Terminates the program", 1164 tooltip => "Terminates the program",
1103 on_activate => sub { 1165 on_activate => sub {
1111 1173
1112 $BUTTONBAR->show; 1174 $BUTTONBAR->show;
1113 1175
1114 $STATUSBOX->add ("Set video mode $WIDTH×$HEIGHT", timeout => 10, fg => [1, 1, 1, 0.5]); 1176 $STATUSBOX->add ("Set video mode $WIDTH×$HEIGHT", timeout => 10, fg => [1, 1, 1, 0.5]);
1115 1177
1116 # delay till geometry is constant 1178 $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 } 1179 }
1124} 1180}
1125 1181
1126sub video_shutdown { 1182sub video_shutdown {
1127 undef $SDL_ACTIVE; 1183 undef $SDL_ACTIVE;

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines