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

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines