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

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines