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.119 by root, Fri Sep 29 00:56:06 2006 UTC vs.
Revision 1.122 by root, Sun Oct 8 21:22:30 2006 UTC

1#!/opt/bin/perl 1#!/opt/bin/perl
2
3my $startup_done = sub { };
4
5# do splash-screen thingy on win32
6BEGIN {
7 if ($^O eq "MSWin32") {
8 while (my ($filename, $zip) = each %PAR::LibCache) {
9 $zip->extractMember ("SPLASH.bmp", "$ENV{PAR_TEMP}/SPLASH.bmp");
10 }
11
12 require Win32::GUI::SplashScreen;
13
14 Win32::GUI::SplashScreen::Show (
15 -file => "$ENV{PAR_TEMP}/SPLASH.bmp",
16 );
17
18 $startup_done = sub {
19 Win32::GUI::SplashScreen::Done (1);
20 };
21 }
22}
2 23
3use strict; 24use strict;
4use utf8; 25use utf8;
5 26
6# do things only needed for single-binary version (par) 27# do things only needed for single-binary version (par)
8 if (%PAR::LibCache) { 29 if (%PAR::LibCache) {
9 @INC = grep ref, @INC; # weed out all paths except pars loader refs 30 @INC = grep ref, @INC; # weed out all paths except pars loader refs
10 31
11 while (my ($filename, $zip) = each %PAR::LibCache) { 32 while (my ($filename, $zip) = each %PAR::LibCache) {
12 for ($zip->memberNames) { 33 for ($zip->memberNames) {
13 next unless /^\/root\/(.*)/; 34 next unless /^root\/(.*)/;
14 $zip->extractMember ($_, "$ENV{PAR_TEMP}/$1") 35 $zip->extractMember ($_, "$ENV{PAR_TEMP}/$1")
15 unless -e "$ENV{PAR_TEMP}/$1"; 36 unless -e "$ENV{PAR_TEMP}/$1";
16 } 37 }
17 } 38 }
18 39
51 Carp::cluck $_[1];#d#TODO: remove when stable 72 Carp::cluck $_[1];#d#TODO: remove when stable
52 return;#d# 73 return;#d#
53 CFPlus::fatal ($_[1]); 74 CFPlus::fatal ($_[1]);
54}; 75};
55 76
56our $VERSION = '0.9';
57
58my $MAX_FPS = 60; 77my $MAX_FPS = 60;
59my $MIN_FPS = 5; # unused as of yet 78my $MIN_FPS = 5; # unused as of yet
60 79
61our $META_SERVER = "crossfire.real-time.com:13326"; 80our $META_SERVER = "crossfire.real-time.com:13326";
62 81
63our $LAST_REFRESH; 82our $LAST_REFRESH;
64our $NOW; 83our $NOW;
65 84
66our $CFG; 85our $CFG;
67our $CONN; 86our $CONN;
87our $PROFILE; # current profile
68our $FAST; # fast, low-quality mode, possibly useful for software-rendering 88our $FAST; # fast, low-quality mode, possibly useful for software-rendering
69 89
70our $WANT_REFRESH; 90our $WANT_REFRESH;
71our $CAN_REFRESH; 91our $CAN_REFRESH;
72 92
136 $STATUSBOX->add (CFPlus::asxml $_[0], pri => -10, group => "status", timeout => 10, fg => [1, 1, 0, 1]); 156 $STATUSBOX->add (CFPlus::asxml $_[0], pri => -10, group => "status", timeout => 10, fg => [1, 1, 0, 1]);
137} 157}
138 158
139sub debug { 159sub debug {
140 $DEBUG_STATUS->set_text ($_[0]); 160 $DEBUG_STATUS->set_text ($_[0]);
161}
162
163sub message {
164 my ($para) = @_;
165
166 my $time = sprintf "%02d:%02d:%02d", (localtime time)[2,1,0];
167
168 $para->{markup} = "<span foreground='#ffffff'>$time</span> $para->{markup}";
169
170 $LOGVIEW->add_paragraph ($para);
171 $LOGVIEW->scroll_to_bottom;
141} 172}
142 173
143sub destroy_query_dialog { 174sub destroy_query_dialog {
144 (delete $_[0]{query_dialog})->destroy 175 (delete $_[0]{query_dialog})->destroy
145 if $_[0]{query_dialog}; 176 if $_[0]{query_dialog};
344 status "logging in..."; 375 status "logging in...";
345 376
346 $LOGIN_BUTTON->set_text ("Logout"); 377 $LOGIN_BUTTON->set_text ("Logout");
347 $SETUP_DIALOG->hide; 378 $SETUP_DIALOG->hide;
348 379
380 $PROFILE = $CFG->{profile}{default};
381
349 my $mapsize = List::Util::min 32, List::Util::max 11, int $WIDTH * $CFG->{mapsize} * 0.01 / 32; 382 my $mapsize = List::Util::min 32, List::Util::max 11, int $WIDTH * $CFG->{mapsize} * 0.01 / 32;
350 383
351 my ($host, $port) = split /:/, $CFG->{profile}{default}{host}; 384 my ($host, $port) = split /:/, $PROFILE->{host};
352 385
353 $MAP = new CFPlus::Map $mapsize, $mapsize; 386 $MAP = new CFPlus::Map $mapsize, $mapsize;
354 387
355 $CONN = eval { 388 $CONN = eval {
356 new CFPlus::Protocol 389 new CFPlus::Protocol
357 host => $host, 390 host => $host,
358 port => $port || 13327, 391 port => $port || 13327,
359 user => $CFG->{profile}{default}{user}, 392 user => $PROFILE->{user},
360 pass => $CFG->{profile}{default}{password}, 393 pass => $PROFILE->{password},
361 mapw => $mapsize, 394 mapw => $mapsize,
362 maph => $mapsize, 395 maph => $mapsize,
363 396
364 client => "cfplus $VERSION $] $^O", 397 client => "cfplus $CFPlus::VERSION $] $^O",
365 398
366 map_widget => $MAPWIDGET, 399 map_widget => $MAPWIDGET,
367 logview => $LOGVIEW, 400 logview => $LOGVIEW,
368 statusbox => $STATUSBOX, 401 statusbox => $STATUSBOX,
369 map => $MAP, 402 map => $MAP,
1054 $table->add (1, 13, my $saycmd = new CFPlus::UI::CheckBox 1087 $table->add (1, 13, my $saycmd = new CFPlus::UI::CheckBox
1055 state => $CFG->{show_tips}, 1088 state => $CFG->{show_tips},
1056 tooltip => "Show the <b>Tip of the day</b> window at startup?", 1089 tooltip => "Show the <b>Tip of the day</b> window at startup?",
1057 on_changed => sub { 1090 on_changed => sub {
1058 my ($self, $value) = @_; 1091 my ($self, $value) = @_;
1059 $CFG->{shop_tips} = $value; 1092 $CFG->{show_tips} = $value;
1060 0 1093 0
1061 } 1094 }
1062 ); 1095 );
1063 1096
1064 $vbox->add (new CFPlus::UI::FancyFrame 1097 $vbox->add (new CFPlus::UI::FancyFrame
1346 1379
1347 my $refresh; 1380 my $refresh;
1348 $refresh = $BIND_UPD_CB = sub { 1381 $refresh = $BIND_UPD_CB = sub {
1349 $binding_list->clear (); 1382 $binding_list->clear ();
1350 1383
1384 return unless $PROFILE;
1385
1351 for my $mod (keys %{$::CFG->{profile}{default}{bindings}}) { 1386 for my $mod (keys %{$PROFILE->{bindings}}) {
1352 for my $sym (keys %{$::CFG->{profile}{default}{bindings}{$mod}}) { 1387 for my $sym (keys %{$PROFILE->{bindings}{$mod}}) {
1353 my $cmds = $::CFG->{profile}{default}{bindings}{$mod}{$sym}; 1388 my $cmds = $PROFILE->{bindings}{$mod}{$sym};
1354 next unless ref $cmds eq 'ARRAY' and @$cmds > 0; 1389 next unless ref $cmds eq 'ARRAY' and @$cmds > 0;
1355 1390
1356 my $lbl = join "; ", @$cmds; 1391 my $lbl = join "; ", @$cmds;
1357 my $nam = CFPlus::BindingEditor::keycombo_to_name ($mod, $sym); 1392 my $nam = CFPlus::BindingEditor::keycombo_to_name ($mod, $sym);
1358 $binding_list->add (my $hb = new CFPlus::UI::HBox); 1393 $binding_list->add (my $hb = new CFPlus::UI::HBox);
1359 $hb->add (new CFPlus::UI::Button 1394 $hb->add (new CFPlus::UI::Button
1360 text => "delete", 1395 text => "delete",
1361 tooltip => "Deletes the binding", 1396 tooltip => "Deletes the binding",
1362 on_activate => sub { 1397 on_activate => sub {
1363 $binding_list->remove ($hb); 1398 $binding_list->remove ($hb);
1364 delete $::CFG->{profile}{default}{bindings}{$mod}{$sym}; 1399 delete $PROFILE->{bindings}{$mod}{$sym};
1365 0 1400 0
1366 }); 1401 });
1367 1402
1368 $hb->add (new CFPlus::UI::Button 1403 $hb->add (new CFPlus::UI::Button
1369 text => "edit", 1404 text => "edit",
1370 tooltip => "Edits the binding", 1405 tooltip => "Edits the binding",
1371 on_activate => sub { 1406 on_activate => sub {
1372 $::BIND_EDITOR->set_binding ( 1407 $::BIND_EDITOR->set_binding (
1373 $mod, $sym, $::CFG->{profile}{default}{bindings}{$mod}{$sym}, 1408 $mod, $sym, $PROFILE->{bindings}{$mod}{$sym},
1374 sub { 1409 sub {
1375 my ($nmod, $nsym, $ncmds) = @_; 1410 my ($nmod, $nsym, $ncmds) = @_;
1376 $::BIND_EDITOR->cfg_unbind ($mod, $sym); 1411 $::BIND_EDITOR->cfg_unbind ($mod, $sym);
1377 $::BIND_EDITOR->cfg_bind ($nmod, $nsym, $ncmds); 1412 $::BIND_EDITOR->cfg_bind ($nmod, $nsym, $ncmds);
1378 $refresh->(); 1413 $refresh->();
2084# } 2119# }
2085# my $t2 = Time::HiRes::time; 2120# my $t2 = Time::HiRes::time;
2086# warn $t2-$t1; 2121# warn $t2-$t1;
2087# } 2122# }
2088 2123
2124 $startup_done->();
2125
2089 video_init; 2126 video_init;
2090 audio_init; 2127 audio_init;
2091} 2128}
2092 2129
2093show_tip_of_the_day if $CFG->{show_tips}; 2130show_tip_of_the_day if $CFG->{show_tips};

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines