ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/deliantra/Deliantra-Client/bin/pclient
(Generate patch)

Comparing deliantra/Deliantra-Client/bin/pclient (file contents):
Revision 1.212 by root, Fri May 12 15:45:42 2006 UTC vs.
Revision 1.222 by elmex, Wed May 17 10:33:03 2006 UTC

99our $STATUSBOX; 99our $STATUSBOX;
100our $DEBUG_STATUS; 100our $DEBUG_STATUS;
101 101
102our $INVWIN; 102our $INVWIN;
103our $INV; 103our $INV;
104our $INVR;
105our $OPENCONT;
104 106
105sub status { 107sub status {
106 $STATUSBOX->add ($_[0], pri => -10, group => "status", timeout => 20, color => [1, 1, 0, 1]); 108 $STATUSBOX->add ($_[0], pri => -10, group => "status", timeout => 20, fg => [1, 1, 0, 1]);
107 $CFClient::UI::ROOT->on_post_alloc (status_line_positioner => sub {
108 my $widget = $STATUSBOX->{parent};
109 $widget->move (0, $HEIGHT - $widget->{h});#d# to in toplevel
110 });
111} 109}
112 110
113sub debug { 111sub debug {
114 $DEBUG_STATUS->set_text ($_[0]); 112 $DEBUG_STATUS->set_text ($_[0]);
115 my ($w, $h) = $DEBUG_STATUS->size_request; 113 my ($w, $h) = $DEBUG_STATUS->size_request;
168 $vbox->add (my $table = new CFClient::UI::Table expand => 1, col_expand => [0, 1]); 166 $vbox->add (my $table = new CFClient::UI::Table expand => 1, col_expand => [0, 1]);
169 167
170 $table->add (0, 0, new CFClient::UI::Label valign => 0, align => 1, text => "Video Mode"); 168 $table->add (0, 0, new CFClient::UI::Label valign => 0, align => 1, text => "Video Mode");
171 $table->add (1, 0, my $hbox = new CFClient::UI::HBox); 169 $table->add (1, 0, my $hbox = new CFClient::UI::HBox);
172 170
173 $hbox->add (my $mode_slider = new CFClient::UI::Slider expand => 1, req_w => 100, range => [$CFG->{sdl_mode}, 0, scalar @SDL_MODES, 1]); 171 $hbox->add (my $mode_slider = new CFClient::UI::Slider expand => 1, req_w => 100, range => [$CFG->{sdl_mode}, 0, $#SDL_MODES, 1, 1]);
174 $hbox->add (my $mode_label = new CFClient::UI::Label align => 0, valign => 0, height => 0.8, template => "9999x9999"); 172 $hbox->add (my $mode_label = new CFClient::UI::Label align => 0, valign => 0, height => 0.8, template => "9999x9999");
175 173
176 $mode_slider->connect (changed => sub { 174 $mode_slider->connect (changed => sub {
177 my ($self, $value) = @_; 175 my ($self, $value) = @_;
178 176
203 } 201 }
204 ); 202 );
205 203
206 $table->add (0, $row, new CFClient::UI::Label valign => 0, align => 1, text => "Map Scale"); 204 $table->add (0, $row, new CFClient::UI::Label valign => 0, align => 1, text => "Map Scale");
207 $table->add (1, $row++, new CFClient::UI::Slider 205 $table->add (1, $row++, new CFClient::UI::Slider
208 range => [$CFG->{map_scale}, 0.25, 2, 0.05], 206 range => [$CFG->{map_scale}, 0.25, 2, 0.05, 0.05],
209 tooltip => "Enlarge or shrink the displayed map", 207 tooltip => "Enlarge or shrink the displayed map",
210 connect_changed => sub { 208 connect_changed => sub {
211 my ($self, $value) = @_; 209 my ($self, $value) = @_;
212 $CFG->{map_scale} = 0.05 * int $value / 0.05; 210 $CFG->{map_scale} = $value;
213 } 211 }
214 ); 212 );
215 213
216 $table->add (0, $row, new CFClient::UI::Label valign => 0, align => 1, text => "Fog of War"); 214 $table->add (0, $row, new CFClient::UI::Label valign => 0, align => 1, text => "Fog of War");
217 $table->add (1, $row++, new CFClient::UI::CheckBox 215 $table->add (1, $row++, new CFClient::UI::CheckBox
244 } 242 }
245 ); 243 );
246 244
247 $table->add (0, $row, new CFClient::UI::Label valign => 0, align => 1, text => "GUI Fontsize"); 245 $table->add (0, $row, new CFClient::UI::Label valign => 0, align => 1, text => "GUI Fontsize");
248 $table->add (1, $row++, new CFClient::UI::Slider 246 $table->add (1, $row++, new CFClient::UI::Slider
249 range => [$CFG->{gui_fontsize}, 0.5, 2, 0.1], 247 range => [$CFG->{gui_fontsize}, 0.5, 2, 0.1, 0.1],
250 tooltip => "The font size used by most GUI elements", 248 tooltip => "The font size used by most GUI elements",
251 connect_changed => sub { 249 connect_changed => sub { $CFG->{gui_fontsize} = $_[1] },
252 $CFG->{gui_fontsize} = 0.1 * int $_[1] * 10;
253# $FONTSIZE = int $HEIGHT / 40 * $CFG->{gui_fontsize};
254 }
255 ); 250 );
256 251
257 $table->add (0, $row, new CFClient::UI::Label valign => 0, align => 1, text => "Server Log Fontsize"); 252 $table->add (0, $row, new CFClient::UI::Label valign => 0, align => 1, text => "Server Log Fontsize");
258 $table->add (1, $row++, new CFClient::UI::Slider 253 $table->add (1, $row++, new CFClient::UI::Slider
259 range => [$CFG->{log_fontsize}, 0.5, 2, 0.1], 254 range => [$CFG->{log_fontsize}, 0.5, 2, 0.1, 0.1],
260 tooltip => "The font size used by the server log window only", 255 tooltip => "The font size used by the server log window only",
261 connect_changed => sub { 256 connect_changed => sub { $LOGVIEW->set_fontsize ($CFG->{log_fontsize} = $_[1]) },
262 $LOGVIEW->set_fontsize ($CFG->{log_fontsize} = 0.1 * int $_[1] * 10);
263 }
264 ); 257 );
265 258
266 $table->add (0, $row, new CFClient::UI::Label valign => 0, align => 1, text => "Stats Fontsize"); 259 $table->add (0, $row, new CFClient::UI::Label valign => 0, align => 1, text => "Stats Fontsize");
267 260
268 $table->add (1, $row++, new CFClient::UI::Slider 261 $table->add (1, $row++, new CFClient::UI::Slider
269 range => [$CFG->{stat_fontsize}, 0.5, 2, 0.1], 262 range => [$CFG->{stat_fontsize}, 0.5, 2, 0.1, 0.1],
270 tooltip => "The font size used by the statistics window only", 263 tooltip => "The font size used by the statistics window only",
271 connect_changed => sub { 264 connect_changed => sub {
272 $CFG->{stat_fontsize} = 0.1 * int $_[1] * 10; 265 $CFG->{stat_fontsize} = $_[1];
273 &set_stats_window_fontsize; 266 &set_stats_window_fontsize;
274 } 267 }
275 ); 268 );
276 269
277 $table->add (0, $row, new CFClient::UI::Label valign => 0, align => 1, text => "Gauge size"); 270 $table->add (0, $row, new CFClient::UI::Label valign => 0, align => 1, text => "Gauge size");
278 $table->add (1, $row++, new CFClient::UI::Slider 271 $table->add (1, $row++, new CFClient::UI::Slider
279 range => [$CFG->{gauge_size}, 0.2, 0.8, 0.02], 272 range => [$CFG->{gauge_size}, 0.2, 0.8, 0.02],
280 tooltip => "Adjust the size of the stats gauges at the bottom right", 273 tooltip => "Adjust the size of the stats gauges at the bottom right",
281 connect_changed => sub { 274 connect_changed => sub {
282 $CFG->{gauge_size} = $_[1]; 275 $CFG->{gauge_size} = $_[1];
283 my $h = int $HEIGHT * $CFG->{gauge_size}; 276 $GAUGES->{win}->set_size ($WIDTH, int $HEIGHT * $CFG->{gauge_size});
284 $GAUGES->{win}->set_size ($WIDTH, $h);
285 $GAUGES->{win}->move (0, $HEIGHT - $h);
286 } 277 }
287 ); 278 );
288 279
289 $table->add (0, $row, new CFClient::UI::Label valign => 0, align => 1, text => "Gauge fontsize"); 280 $table->add (0, $row, new CFClient::UI::Label valign => 0, align => 1, text => "Gauge fontsize");
290 $table->add (1, $row++, new CFClient::UI::Slider 281 $table->add (1, $row++, new CFClient::UI::Slider
291 range => [$CFG->{gauge_fontsize}, 0.5, 2.0, 0.1], 282 range => [$CFG->{gauge_fontsize}, 0.5, 2.0, 0.1, 0.1],
292 tooltip => "Adjusts the fontsize of the gauges at the bottom right", 283 tooltip => "Adjusts the fontsize of the gauges at the bottom right",
293 connect_changed => sub { 284 connect_changed => sub {
294 $CFG->{gauge_fontsize} = 0.1 * int $_[1] * 10; 285 $CFG->{gauge_fontsize} = $_[1];
295 &set_gauge_window_fontsize; 286 &set_gauge_window_fontsize;
296 } 287 }
297 ); 288 );
298 289
299 $table->add (1, $row++, new CFClient::UI::Button 290 $table->add (1, $row++, new CFClient::UI::Button
373# local $GAUGES->{win}{parent};#d# 364# local $GAUGES->{win}{parent};#d#
374# use PApp::Util; open D, ">:utf8", "d"; print D PApp::Util::dumpval $GAUGES->{win}; close D; 365# use PApp::Util; open D, ">:utf8", "d"; print D PApp::Util::dumpval $GAUGES->{win}; close D;
375} 366}
376 367
377sub make_gauge_window { 368sub make_gauge_window {
378 my $gh = int ($HEIGHT * $CFG->{gauge_size}); 369 my $gh = int $HEIGHT * $CFG->{gauge_size};
379# my $gw = int ($WIDTH * $CFG->{gauge_w_size});
380 370
381 my $win = new CFClient::UI::Frame ( 371 my $win = new CFClient::UI::Frame (
382 y => $HEIGHT - $gh, x => 0, user_w => $WIDTH, user_h => $gh 372 req_y => -1,
373 user_w => $WIDTH,
374 user_h => $gh,
383 ); 375 );
376
384 $win->add (my $hbox = new CFClient::UI::HBox 377 $win->add (my $hbox = new CFClient::UI::HBox
385 children => [ 378 children => [
386 (new CFClient::UI::HBox expand => 1), 379 (new CFClient::UI::HBox expand => 1),
387 (new CFClient::UI::VBox children => [ 380 (new CFClient::UI::VBox children => [
388 (new CFClient::UI::Empty expand => 1), 381 (new CFClient::UI::Empty expand => 1),
738 ); 731 );
739 732
740 $table->add (0, 7, new CFClient::UI::Label valign => 0, align => 1, text => "Map Size"); 733 $table->add (0, 7, new CFClient::UI::Label valign => 0, align => 1, text => "Map Size");
741 $table->add (1, 7, new CFClient::UI::Slider 734 $table->add (1, 7, new CFClient::UI::Slider
742 req_w => 100, 735 req_w => 100,
743 range => [$CFG->{mapsize}, 10, 100 + 1, 1], 736 range => [$CFG->{mapsize}, 10, 100 + 1, 1, 1],
744 tooltip => "This is the size of the portion of the map update the server sends you. " 737 tooltip => "This is the size of the portion of the map update the server sends you. "
745 ."If you set this to a high value you will be able to see further for example.", 738 ."If you set this to a high value you will be able to see further for example.",
746 connect_changed => sub { 739 connect_changed => sub {
747 my ($self, $value) = @_; 740 my ($self, $value) = @_;
748 741
816 809
817 $window 810 $window
818} 811}
819 812
820sub make_inventory_window { 813sub make_inventory_window {
821 my $invwin = new CFClient::UI::FancyFrame user_w => 300, user_h => 300, title => "Inventory"; 814 my $invwin = new CFClient::UI::FancyFrame
815 user_w => $WIDTH * (4/5), user_h => $HEIGHT * (4/5), title => "Inventory";
816
817 $invwin->add (my $hb = new CFClient::UI::HBox);
822 $invwin->add ($INV = new CFClient::UI::Inventory expand => 1); 818 $hb->add ($INV = new CFClient::UI::Inventory expand => 1);
819 $hb->add ($INVR = new CFClient::UI::Inventory expand => 1);
820
823 $invwin 821 $invwin
824} 822}
825 823
826sub sdl_init { 824sub sdl_init {
827 CFClient::SDL_Init 825 CFClient::SDL_Init
849 847
850 $CFClient::UI::ROOT->configure (0, 0, $WIDTH, $HEIGHT);#d# 848 $CFClient::UI::ROOT->configure (0, 0, $WIDTH, $HEIGHT);#d#
851 849
852 ############################################################################# 850 #############################################################################
853 851
854 if ($DEBUG_STATUS) { 852 unless ($DEBUG_STATUS) {
855 # reconfigure all widgets
856 $CFClient::UI::ROOT->reconfigure;
857
858 } else {
859 # create the widgets 853 # create the widgets
860 854
861 $DEBUG_STATUS = new CFClient::UI::Label padding => 0, z => 100, text => "hulla", x => 100;#d# 855 $DEBUG_STATUS = new CFClient::UI::Label padding => 0, z => 100, req_x => -1;
862 $DEBUG_STATUS->show; 856 $DEBUG_STATUS->show;
863 857
864 $STATUSBOX = new CFClient::UI::Statusbox; 858 $STATUSBOX = new CFClient::UI::Statusbox;
865 $STATUSBOX->add ("Use <b>Alt-Enter</b> to toggle fullscreen mode", pri => -100, size => 0.8, color => [1, 1, 1, 0.8]); 859 $STATUSBOX->add ("Use <b>Alt-Enter</b> to toggle fullscreen mode", pri => -100, color => [1, 1, 1, 0.8]);
866 860
867 (new CFClient::UI::Frame 861 (new CFClient::UI::Frame
868 bg => [0, 0, 0, 0.4], 862 bg => [0, 0, 0, 0.4],
863 req_y => -1,
869 child => $STATUSBOX, 864 child => $STATUSBOX,
870 )->show; 865 )->show;
871 866
872 CFClient::UI::FancyFrame->new ( 867 CFClient::UI::FancyFrame->new (
873 border_bg => [1, 1, 1, 192/255], 868 border_bg => [1, 1, 1, 192/255],
874 bg => [1, 1, 1, 0], 869 bg => [1, 1, 1, 0],
907 status "Configuration Saved"; 902 status "Configuration Saved";
908 }); 903 });
909 904
910 $BUTTONBAR->show; 905 $BUTTONBAR->show;
911 906
907 $STATUSBOX->add ("Set video mode $WIDTH×$HEIGHT", timeout => 10, fg => [1, 1, 1, 0.5]);
908
912 # delay till geometry is constant 909 # delay till geometry is constant
913 $CFClient::UI::ROOT->on_post_alloc (startup => sub { 910 $CFClient::UI::ROOT->on_post_alloc (startup => sub {
914 $BUTTONBAR->{children}[1]->emit ("activate"); # pop up server setup 911 $BUTTONBAR->{children}[1]->emit ("activate"); # pop up server setup
912 my $widget = $GAUGES->{win};
913 $widget->move (0, $HEIGHT - $widget->{h});#d# to in toplevel
915 }); 914 });
916 force_refresh (); 915 force_refresh ();
917 } 916 }
918} 917}
919 918
980my $animate_timer; 979my $animate_timer;
981 980
982my $fps = 9; 981my $fps = 9;
983 982
984sub force_refresh { 983sub force_refresh {
985 $fps = $fps * 0.95 + 1 / ($NOW - $LAST_REFRESH) * 0.05; 984 $fps = $fps * 0.95 + 1 / (($NOW - $LAST_REFRESH) || 0.1) * 0.05;
986 debug sprintf "%3.2f", $fps; 985 debug sprintf "%3.2f", $fps;
987 986
988 $CFClient::UI::ROOT->draw; 987 $CFClient::UI::ROOT->draw;
989 CFClient::SDL_GL_SwapBuffers; 988 CFClient::SDL_GL_SwapBuffers;
990 989
1331 [0.74, 0.65, 0.41], 1330 [0.74, 0.65, 0.41],
1332 ); 1331 );
1333 1332
1334 my $time = sprintf "%02d:%02d:%02d", (localtime time)[2,1,0]; 1333 my $time = sprintf "%02d:%02d:%02d", (localtime time)[2,1,0];
1335 1334
1336 $text =~ s/&/&amp;/g; $text =~ s/</&lt;/g; 1335 $text = CFClient::UI::Label::escape $text;
1337 $text =~ s/\[b\](.*?)\[\/b\]/<b>\1<\/b>/g; 1336 $text =~ s/\[b\](.*?)\[\/b\]/<b>\1<\/b>/g;
1338 $text =~ s/\[color=(.*?)\](.*?)\[\/color\]/<span foreground='\1'>\2<\/span>/g; 1337 $text =~ s/\[color=(.*?)\](.*?)\[\/color\]/<span foreground='\1'>\2<\/span>/g;
1339 1338
1340 $LOGVIEW->add_paragraph ($color[$color], 1339 $LOGVIEW->add_paragraph ($color[$color],
1341 join "\n", map "$time $_", split /\n/, $text); 1340 join "\n", map "$time $_", split /\n/, $text);
1342 1341
1343 $STATUSBOX->add ($text, 1342 $STATUSBOX->add ($text,
1344 group => $text, 1343 group => $text,
1345 color => $color[$color], 1344 fg => $color[$color],
1346 timeout => 60, 1345 timeout => 60,
1347 tooltip_font => $::FONT_FIXED, 1346 tooltip_font => $::FONT_FIXED,
1348 ); 1347 );
1349} 1348}
1350 1349
1368} 1367}
1369 1368
1370sub conn::addme_success { 1369sub conn::addme_success {
1371 my ($self) = @_; 1370 my ($self) = @_;
1372 1371
1372 $MAPWIDGET->clr_commands;
1373
1373 for my $skill (values %{$self->{skill_info}}) { 1374 for my $skill (values %{$self->{skill_info}}) {
1374 $MAPWIDGET->add_command ("ready_skill $skill", "Ready the skill '$skill'"); 1375 $MAPWIDGET->add_command ("ready_skill $skill", "Ready the skill '$skill'");
1375 $MAPWIDGET->add_command ("use_skill $skill", "Immediately use the skill '$skill'"); 1376 $MAPWIDGET->add_command ("use_skill $skill", "Immediately use the skill '$skill'");
1376 } 1377 }
1377 1378
1378 $MAPWIDGET->add_command ("pet\\_mode defend", "Tell pets to stay close to you and defend you"); 1379 $MAPWIDGET->add_command ("petmode defend", "Tell pets to stay close to you and defend you");
1379 $MAPWIDGET->add_command ("pet\\_mode arena", "Same as petmode attack, but also attack other players"); 1380 $MAPWIDGET->add_command ("petmode arena", "Same as petmode sad, but also attack other players");
1380 $MAPWIDGET->add_command ("pet\\_mode sad", "Search &amp; Destroy - tell pets to roam about and attack enemies"); 1381 $MAPWIDGET->add_command ("petmode sad", "Search &amp; Destroy - tell pets to roam about and attack enemies");
1381 $MAPWIDGET->add_command ("kill\\_pets", "kill your pets"); 1382 $MAPWIDGET->add_command ("killpets", "Kill your pets");
1383 $MAPWIDGET->add_command ("chat", "chat TEXT\nChat with all other players");
1384 $MAPWIDGET->add_command ("shout", "shout TEXT\nShout loudly, used for emergencies");
1385 $MAPWIDGET->add_command ("tell", "tell USERNAME TEXT\nPrivately tell a specific player");
1386
1387 # TODO: add documentation on these
1388 for (qw(
1389 afk
1390 apply
1391 body
1392 bowmode
1393 brace
1394 build
1395 disarm
1396 dm
1397 dmhide
1398 drop
1399 dropall
1400 examine
1401 get
1402 gsay
1403 help
1404 hiscore
1405 inventory
1406 invoke
1407 killpets
1408 listen
1409 logs
1410 mapinfo
1411 maps
1412 mark
1413 motd
1414 output-count
1415 output-sync
1416 party
1417 peaceful
1418 petmode
1419 pickup
1420 players
1421 prepare
1422 quests
1423 rename
1424 resistances
1425 rotateshoottype
1426 save
1427 say
1428 search
1429 search-items
1430 showpets
1431 skills
1432 sound
1433 take
1434 throw
1435 time
1436 title
1437 usekeys
1438 version
1439 weather
1440 whereabouts
1441 whereami
1442 who
1443 wimpy
1444 )) {
1445 $MAPWIDGET->add_command ($_, "$_: no help available (yet)");
1446 }
1447
1448 #TODO: add " and ' "aliases" etc.
1382} 1449}
1383 1450
1384sub conn::eof { 1451sub conn::eof {
1452 $MAPWIDGET->clr_commands;
1453
1385 stop_game; 1454 stop_game;
1386} 1455}
1387 1456
1388sub update_floorbox { 1457sub update_floorbox {
1389 $CFClient::UI::ROOT->on_refresh ($FLOORBOX => sub { 1458 $CFClient::UI::ROOT->on_refresh ($FLOORBOX => sub {
1407} 1476}
1408 1477
1409sub conn::container_add { 1478sub conn::container_add {
1410 my ($self, $tag, $items) = @_; 1479 my ($self, $tag, $items) = @_;
1411 1480
1412 update_floorbox if $tag == 0; 1481 #d# print "container_add: container $tag ($self->{player}{tag})\n";
1413 1482
1483 if ($tag == 0) {
1484 update_floorbox;
1485 $OPENCONT = 0;
1486 $INVR->set_items ($self->{container}{0});
1487 } elsif ($tag == $self->{player}{tag}) {
1414 $INV->set_items ($self->{container}{$self->{player}{tag}}) 1488 $INV->set_items ($self->{container}{$self->{player}{tag}})
1415 if $tag == $self->{player}{tag}; 1489 } else {
1490 $OPENCONT = $tag;
1491 $INVR->set_items ($self->{container}{$tag});
1492 }
1416 1493
1417 # $self-<{player}{tag} => player inv 1494 # $self-<{player}{tag} => player inv
1418 #use PApp::Util; warn PApp::Util::dumpval $self->{container}{$self->{player}{tag}}; 1495 #use PApp::Util; warn PApp::Util::dumpval $self->{container}{$self->{player}{tag}};
1419} 1496}
1420 1497
1421sub conn::container_clear { 1498sub conn::container_clear {
1422 my ($self, $tag) = @_; 1499 my ($self, $tag) = @_;
1423 1500
1424 update_floorbox if $tag == 0; 1501 #d# print "container_clear: container $tag ($self->{player}{tag})\n";
1425 1502
1503 if ($tag == 0) {
1504 update_floorbox;
1505 $OPENCONT = 0;
1506 $INVR->set_items ($self->{container}{0});
1507 } elsif ($tag == $self->{player}{tag}) {
1426 $INV->set_items ($self->{container}{$tag}) 1508 $INV->set_items ($self->{container}{$tag})
1427 if $tag == $self->{player}{tag}; 1509 } else {
1510 $OPENCONT = $tag;
1511 $INVR->set_items ($self->{container}{$tag});
1512 }
1428 1513
1429# use PApp::Util; warn PApp::Util::dumpval $self->{container}{0}; 1514# use PApp::Util; warn PApp::Util::dumpval $self->{container}{0};
1430} 1515}
1431 1516
1432sub conn::item_delete { 1517sub conn::item_delete {
1433 my ($self, @items) = @_; 1518 my ($self, @items) = @_;
1434 1519
1435 for (@items) { 1520 for (@items) {
1436 update_floorbox if $_->{container} == 0; 1521 #d# print "item_delete: $_->{tag} from $_->{container} ($self->{player}{tag})\n";
1437 1522
1523 if ($_->{container} == 0) {
1524 update_floorbox;
1525 $OPENCONT = 0;
1526 $INVR->set_items ($self->{container}{0});
1527 } elsif ($_->{container} == $self->{player}{tag}) {
1528 $INV->set_items ($self->{container}{$self->{player}{tag}})
1529 } else {
1530 $OPENCONT = $_->{container};
1438 $INV->set_items ($self->{container}{$_->{container}}) 1531 $INVR->set_items ($self->{container}{$_->{container}});
1439 if $_->{container} == $self->{player}{tag}; 1532 }
1440 } 1533 }
1441} 1534}
1442 1535
1443sub conn::item_update { 1536sub conn::item_update {
1444 my ($self, $item) = @_; 1537 my ($self, $item) = @_;
1445 1538
1446 update_floorbox if $item->{container} == 0; 1539 #d# print "item_update: $item->{tag} in $item->{container} ($self->{player}{tag}) ($OPENCONT)\n";
1447 1540
1541 if ($item->{tag} == $OPENCONT && not ($item->{flags} & Crossfire::Protocol::F_OPEN)) {
1542 $OPENCONT = 0;
1543 $INVR->set_items ($self->{container}{0});
1544 } else {
1545 if ($item->{container} == 0) {
1546 update_floorbox;
1547 $OPENCONT = 0;
1548 $INVR->set_items ($self->{container}{0});
1549 } elsif ($item->{container} == $self->{player}{tag}) {
1448 $INV->set_items ($self->{container}{$item->{container}}) 1550 $INV->set_items ($self->{container}{$item->{container}})
1449 if $item->{container} == $self->{player}{tag}; 1551 }
1552 }
1450} 1553}
1451 1554
1452%SDL_CB = ( 1555%SDL_CB = (
1453 CFClient::SDL_QUIT => sub { 1556 CFClient::SDL_QUIT => sub {
1454 Event::unloop -1; 1557 Event::unloop -1;
1545 DejaVuSansMono-BoldOblique.ttf 1648 DejaVuSansMono-BoldOblique.ttf
1546 ); 1649 );
1547 1650
1548 CFClient::add_font $_ for @fonts; 1651 CFClient::add_font $_ for @fonts;
1549 1652
1653 CFClient::pango_init;
1654
1550 $FONT_PROP = new_from_file CFClient::Font $fonts[0]; 1655 $FONT_PROP = new_from_file CFClient::Font $fonts[0];
1551 $FONT_FIXED = new_from_file CFClient::Font $fonts[1]; 1656 $FONT_FIXED = new_from_file CFClient::Font $fonts[1];
1552 1657
1553 $FONT_PROP->make_default; 1658 $FONT_PROP->make_default;
1554 } 1659 }
1660
1661# compare mono (ft) vs. rgba (cairo)
1662# ft - 1.8s, cairo 3s, even in alpha-only mode
1663# for my $rgba (0..1) {
1664# my $t1 = Time::HiRes::time;
1665# for (1..1000) {
1666# my $layout = CFClient::Layout->new ($rgba);
1667# $layout->set_text ("hallo" x 100);
1668# $layout->render;
1669# }
1670# my $t2 = Time::HiRes::time;
1671# warn $t2-$t1;
1672# }
1555 1673
1556 video_init; 1674 video_init;
1557 audio_init; 1675 audio_init;
1558} 1676}
1559 1677

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines