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.208 by root, Thu May 11 23:41:47 2006 UTC vs.
Revision 1.219 by root, Wed May 17 00:26:57 2006 UTC

94our $SDL_MIXER; 94our $SDL_MIXER;
95our @SOUNDS; # event => file mapping 95our @SOUNDS; # event => file mapping
96our %AUDIO_CHUNKS; # audio files 96our %AUDIO_CHUNKS; # audio files
97 97
98our $ALT_ENTER_MESSAGE; 98our $ALT_ENTER_MESSAGE;
99our $STATUS_LINE; 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 $STATUS_LINE->add ($_[0], group => "status", timeout => 60); 108 $STATUSBOX->add ($_[0], pri => -10, group => "status", timeout => 20, fg => [1, 1, 0, 1]);
107 $CFClient::UI::ROOT->on_refresh ($STATUS_LINE => sub {
108 $STATUS_LINE->move (0, $HEIGHT - $STATUS_LINE->{h});#d# to in toplevel
109 });
110} 109}
111 110
112sub debug { 111sub debug {
113 $DEBUG_STATUS->set_text ($_[0]); 112 $DEBUG_STATUS->set_text ($_[0]);
114 my ($w, $h) = $DEBUG_STATUS->size_request; 113 my ($w, $h) = $DEBUG_STATUS->size_request;
167 $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]);
168 167
169 $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");
170 $table->add (1, 0, my $hbox = new CFClient::UI::HBox); 169 $table->add (1, 0, my $hbox = new CFClient::UI::HBox);
171 170
172 $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]);
173 $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");
174 173
175 $mode_slider->connect (changed => sub { 174 $mode_slider->connect (changed => sub {
176 my ($self, $value) = @_; 175 my ($self, $value) = @_;
177 176
202 } 201 }
203 ); 202 );
204 203
205 $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");
206 $table->add (1, $row++, new CFClient::UI::Slider 205 $table->add (1, $row++, new CFClient::UI::Slider
207 range => [$CFG->{map_scale}, 0.25, 2, 0.05], 206 range => [$CFG->{map_scale}, 0.25, 2, 0.05, 0.05],
208 tooltip => "Enlarge or shrink the displayed map", 207 tooltip => "Enlarge or shrink the displayed map",
209 connect_changed => sub { 208 connect_changed => sub {
210 my ($self, $value) = @_; 209 my ($self, $value) = @_;
211 $CFG->{map_scale} = 0.05 * int $value / 0.05; 210 $CFG->{map_scale} = $value;
212 } 211 }
213 ); 212 );
214 213
215 $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");
216 $table->add (1, $row++, new CFClient::UI::CheckBox 215 $table->add (1, $row++, new CFClient::UI::CheckBox
243 } 242 }
244 ); 243 );
245 244
246 $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");
247 $table->add (1, $row++, new CFClient::UI::Slider 246 $table->add (1, $row++, new CFClient::UI::Slider
248 range => [$CFG->{gui_fontsize}, 0.5, 2, 0.1], 247 range => [$CFG->{gui_fontsize}, 0.5, 2, 0.1, 0.1],
249 tooltip => "The font size used by most GUI elements", 248 tooltip => "The font size used by most GUI elements",
250 connect_changed => sub { 249 connect_changed => sub { $CFG->{gui_fontsize} = $_[1] },
251 $CFG->{gui_fontsize} = 0.1 * int $_[1] * 10;
252# $FONTSIZE = int $HEIGHT / 40 * $CFG->{gui_fontsize};
253 }
254 ); 250 );
255 251
256 $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");
257 $table->add (1, $row++, new CFClient::UI::Slider 253 $table->add (1, $row++, new CFClient::UI::Slider
258 range => [$CFG->{log_fontsize}, 0.5, 2, 0.1], 254 range => [$CFG->{log_fontsize}, 0.5, 2, 0.1, 0.1],
259 tooltip => "The font size used by the server log window only", 255 tooltip => "The font size used by the server log window only",
260 connect_changed => sub { 256 connect_changed => sub { $LOGVIEW->set_fontsize ($CFG->{log_fontsize} = $_[1]) },
261 $LOGVIEW->set_fontsize ($CFG->{log_fontsize} = 0.1 * int $_[1] * 10);
262 }
263 ); 257 );
264 258
265 $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");
266 260
267 $table->add (1, $row++, new CFClient::UI::Slider 261 $table->add (1, $row++, new CFClient::UI::Slider
268 range => [$CFG->{stat_fontsize}, 0.5, 2, 0.1], 262 range => [$CFG->{stat_fontsize}, 0.5, 2, 0.1, 0.1],
269 tooltip => "The font size used by the statistics window only", 263 tooltip => "The font size used by the statistics window only",
270 connect_changed => sub { 264 connect_changed => sub {
271 $CFG->{stat_fontsize} = 0.1 * int $_[1] * 10; 265 $CFG->{stat_fontsize} = $_[1];
272 &set_stats_window_fontsize; 266 &set_stats_window_fontsize;
273 } 267 }
274 ); 268 );
275 269
276 $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");
277 $table->add (1, $row++, new CFClient::UI::Slider 271 $table->add (1, $row++, new CFClient::UI::Slider
278 range => [$CFG->{gauge_size}, 0.2, 0.8, 0.02], 272 range => [$CFG->{gauge_size}, 0.2, 0.8, 0.02],
279 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",
280 connect_changed => sub { 274 connect_changed => sub {
281 $CFG->{gauge_size} = $_[1]; 275 $CFG->{gauge_size} = $_[1];
282 my $h = int $HEIGHT * $CFG->{gauge_size}; 276 $GAUGES->{win}->set_size ($WIDTH, int $HEIGHT * $CFG->{gauge_size});
283 $GAUGES->{win}->set_size ($WIDTH, $h);
284 $GAUGES->{win}->move (0, $HEIGHT - $h);
285 } 277 }
286 ); 278 );
287 279
288 $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");
289 $table->add (1, $row++, new CFClient::UI::Slider 281 $table->add (1, $row++, new CFClient::UI::Slider
290 range => [$CFG->{gauge_fontsize}, 0.5, 2.0, 0.1], 282 range => [$CFG->{gauge_fontsize}, 0.5, 2.0, 0.1, 0.1],
291 tooltip => "Adjusts the fontsize of the gauges at the bottom right", 283 tooltip => "Adjusts the fontsize of the gauges at the bottom right",
292 connect_changed => sub { 284 connect_changed => sub {
293 $CFG->{gauge_fontsize} = 0.1 * int $_[1] * 10; 285 $CFG->{gauge_fontsize} = $_[1];
294 &set_gauge_window_fontsize; 286 &set_gauge_window_fontsize;
295 } 287 }
296 ); 288 );
297 289
298 $table->add (1, $row++, new CFClient::UI::Button 290 $table->add (1, $row++, new CFClient::UI::Button
372# local $GAUGES->{win}{parent};#d# 364# local $GAUGES->{win}{parent};#d#
373# 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;
374} 366}
375 367
376sub make_gauge_window { 368sub make_gauge_window {
377 my $gh = int ($HEIGHT * $CFG->{gauge_size}); 369 my $gh = int $HEIGHT * $CFG->{gauge_size};
378# my $gw = int ($WIDTH * $CFG->{gauge_w_size});
379 370
380 my $win = new CFClient::UI::Frame ( 371 my $win = new CFClient::UI::Frame (
381 y => $HEIGHT - $gh, x => 0, user_w => $WIDTH, user_h => $gh 372 req_y => -1,
373 user_w => $WIDTH,
374 user_h => $gh,
382 ); 375 );
376
383 $win->add (my $hbox = new CFClient::UI::HBox 377 $win->add (my $hbox = new CFClient::UI::HBox
384 children => [ 378 children => [
385 (new CFClient::UI::HBox expand => 1), 379 (new CFClient::UI::HBox expand => 1),
386 ($FLOORBOX = new CFClient::UI::VBox), 380 (new CFClient::UI::VBox children => [
381 (new CFClient::UI::Empty expand => 1),
382 (new CFClient::UI::Frame bg => [0, 0, 0, 0.4], child => ($FLOORBOX = new CFClient::UI::VBox)),
383 ]),
387 (my $vbox = new CFClient::UI::VBox), 384 (my $vbox = new CFClient::UI::VBox),
388 ], 385 ],
389 ); 386 );
390 387
391 $vbox->add (new CFClient::UI::HBox 388 $vbox->add (new CFClient::UI::HBox
734 ); 731 );
735 732
736 $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");
737 $table->add (1, 7, new CFClient::UI::Slider 734 $table->add (1, 7, new CFClient::UI::Slider
738 req_w => 100, 735 req_w => 100,
739 range => [$CFG->{mapsize}, 10, 100 + 1, 1], 736 range => [$CFG->{mapsize}, 10, 100 + 1, 1, 1],
740 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. "
741 ."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.",
742 connect_changed => sub { 739 connect_changed => sub {
743 my ($self, $value) = @_; 740 my ($self, $value) = @_;
744 741
812 809
813 $window 810 $window
814} 811}
815 812
816sub make_inventory_window { 813sub make_inventory_window {
817 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);
818 $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
819 $invwin 821 $invwin
820} 822}
821 823
822sub sdl_init { 824sub sdl_init {
823 CFClient::SDL_Init 825 CFClient::SDL_Init
845 847
846 $CFClient::UI::ROOT->configure (0, 0, $WIDTH, $HEIGHT);#d# 848 $CFClient::UI::ROOT->configure (0, 0, $WIDTH, $HEIGHT);#d#
847 849
848 ############################################################################# 850 #############################################################################
849 851
850 if ($DEBUG_STATUS) { 852 unless ($DEBUG_STATUS) {
851 # reconfigure all widgets
852 $CFClient::UI::ROOT->reconfigure;
853
854 } else {
855 # create the widgets 853 # create the widgets
856 854
857 $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;
858 $DEBUG_STATUS->show; 856 $DEBUG_STATUS->show;
859 857
860 $STATUS_LINE = new CFClient::UI::Statusbox; 858 $STATUSBOX = new CFClient::UI::Statusbox;
861 $STATUS_LINE->add ("Use <b>Alt-Enter</b> to toggle fullscreen mode", pri => 0, size => 0.8, color => [1, 1, 1]); 859 $STATUSBOX->add ("Use <b>Alt-Enter</b> to toggle fullscreen mode", pri => -100, color => [1, 1, 1, 0.8]);
862 $STATUS_LINE->show; 860
861 (new CFClient::UI::Frame
862 bg => [0, 0, 0, 0.4],
863 req_y => -1,
864 child => $STATUSBOX,
865 )->show;
863 866
864 CFClient::UI::FancyFrame->new ( 867 CFClient::UI::FancyFrame->new (
865 border_bg => [1, 1, 1, 192/255], 868 border_bg => [1, 1, 1, 192/255],
866 bg => [1, 1, 1, 0], 869 bg => [1, 1, 1, 0],
867 child => ($MAPMAP = new CFClient::MapWidget::MapMap), 870 child => ($MAPMAP = new CFClient::MapWidget::MapMap),
899 status "Configuration Saved"; 902 status "Configuration Saved";
900 }); 903 });
901 904
902 $BUTTONBAR->show; 905 $BUTTONBAR->show;
903 906
907 $STATUSBOX->add ("Set video mode $WIDTH×$HEIGHT", timeout => 10, fg => [1, 1, 1, 0.5]);
908
904 # delay till geometry is constant 909 # delay till geometry is constant
905 $CFClient::UI::ROOT->on_refresh (startup => sub { 910 $CFClient::UI::ROOT->on_post_alloc (startup => sub {
906 $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
907 }); 914 });
908 force_refresh (); 915 force_refresh ();
909 } 916 }
910} 917}
911 918
972my $animate_timer; 979my $animate_timer;
973 980
974my $fps = 9; 981my $fps = 9;
975 982
976sub force_refresh { 983sub force_refresh {
977 $fps = $fps * 0.95 + 1 / ($NOW - $LAST_REFRESH) * 0.05; 984 $fps = $fps * 0.95 + 1 / (($NOW - $LAST_REFRESH) || 0.1) * 0.05;
978 debug sprintf "%3.2f", $fps; 985 debug sprintf "%3.2f", $fps;
979 986
980 $CFClient::UI::ROOT->draw; 987 $CFClient::UI::ROOT->draw;
981 CFClient::SDL_GL_SwapBuffers; 988 CFClient::SDL_GL_SwapBuffers;
982 989
1323 [0.74, 0.65, 0.41], 1330 [0.74, 0.65, 0.41],
1324 ); 1331 );
1325 1332
1326 my $time = sprintf "%02d:%02d:%02d", (localtime time)[2,1,0]; 1333 my $time = sprintf "%02d:%02d:%02d", (localtime time)[2,1,0];
1327 1334
1335 $text = CFClient::UI::Label::escape $text;
1336 $text =~ s/\[b\](.*?)\[\/b\]/<b>\1<\/b>/g;
1337 $text =~ s/\[color=(.*?)\](.*?)\[\/color\]/<span foreground='\1'>\2<\/span>/g;
1338
1328 $LOGVIEW->add_paragraph ($color[$color], 1339 $LOGVIEW->add_paragraph ($color[$color],
1329 join "\n", map "$time $_", split /\n/, $text); 1340 join "\n", map "$time $_", split /\n/, $text);
1330 1341
1331 $text =~ s/&/&amp;/g; $text =~ s/</&lt;/g; 1342 $STATUSBOX->add ($text,
1332 $text =~ s/\[b\](.*?)\[\/b\]/<b>\1<\/b>/g; 1343 group => $text,
1333 $text =~ s/\[color=(.*?)\](.*?)\[\/color\]/<span foreground='\1'>\2<\/span>/g; 1344 fg => $color[$color],
1334 $STATUS_LINE->add ($text, color => $color[$color], timeout => 60); 1345 timeout => 60,
1346 tooltip_font => $::FONT_FIXED,
1347 );
1335} 1348}
1336 1349
1337sub conn::drawextinfo { 1350sub conn::drawextinfo {
1338 my ($self, $color, $type, $subtype, $message) = @_; 1351 my ($self, $color, $type, $subtype, $message) = @_;
1339 1352
1354} 1367}
1355 1368
1356sub conn::addme_success { 1369sub conn::addme_success {
1357 my ($self) = @_; 1370 my ($self) = @_;
1358 1371
1372 $MAPWIDGET->clr_commands;
1373
1359 for my $skill (values %{$self->{skill_info}}) { 1374 for my $skill (values %{$self->{skill_info}}) {
1360 $MAPWIDGET->add_command ("ready_skill $skill", "Ready the skill '$skill'"); 1375 $MAPWIDGET->add_command ("ready_\\skill $skill", "Ready the skill '$skill'");
1361 $MAPWIDGET->add_command ("use_skill $skill", "Immediately use the skill '$skill'"); 1376 $MAPWIDGET->add_command ("use_\\skill $skill", "Immediately use the skill '$skill'");
1362 } 1377 }
1363 1378
1364 $MAPWIDGET->add_command ("pet\\_mode defend", "Tell pets to stay close to you and defend you"); 1379 $MAPWIDGET->add_command ("pet\\mode defend", "Tell pets to stay close to you and defend you");
1365 $MAPWIDGET->add_command ("pet\\_mode arena", "Same as petmode attack, but also attack other players"); 1380 $MAPWIDGET->add_command ("pet\\mode arena", "Same as petmode sad, but also attack other players");
1366 $MAPWIDGET->add_command ("pet\\_mode sad", "Search &amp; Destroy - tell pets to roam about and attack enemies"); 1381 $MAPWIDGET->add_command ("pet\\mode sad", "Search &amp; Destroy - tell pets to roam about and attack enemies");
1367 $MAPWIDGET->add_command ("kill\\_pets", "kill your pets"); 1382 $MAPWIDGET->add_command ("kill\\pets", "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 save
1390 sound
1391 party
1392 gsay
1393 apply
1394 applymode
1395 body
1396 brace
1397 build
1398 disarm
1399 dm
1400 dmhide
1401 drop
1402 dropall
1403 examine
1404 get
1405 help
1406 hiscore
1407 inventory
1408 invoke
1409 killpets
1410 listen
1411 logs
1412 maps
1413 mapinfo
1414 mark
1415 motd
1416 output-sync
1417 output-count
1418 peaceful
1419 pickup
1420 players
1421 prepare
1422 rename
1423 resistances
1424 rotateshoottype
1425 skills
1426 quests
1427 search
1428 search-items
1429 showpets
1430 take
1431 throw
1432 time
1433 weather
1434 whereabouts
1435 whereami
1436 title
1437 usekeys
1438 bowmode
1439 petmode
1440 version
1441 wimpy
1442 who
1443 afk
1444 )) {
1445 $MAPWIDGET->add_command ($_, "$_: no help available (yet)");
1446 }
1447
1448 #TODO: add " and ' "aliases" etc.
1368} 1449}
1369 1450
1370sub conn::eof { 1451sub conn::eof {
1452 $MAPWIDGET->clr_commands;
1453
1371 stop_game; 1454 stop_game;
1372} 1455}
1373 1456
1374sub update_floorbox { 1457sub update_floorbox {
1375 $CFClient::UI::ROOT->on_refresh ($FLOORBOX => sub { 1458 $CFClient::UI::ROOT->on_refresh ($FLOORBOX => sub {
1393} 1476}
1394 1477
1395sub conn::container_add { 1478sub conn::container_add {
1396 my ($self, $tag, $items) = @_; 1479 my ($self, $tag, $items) = @_;
1397 1480
1398 update_floorbox if $tag == 0; 1481 if ($tag == 0) {
1399 1482 update_floorbox;
1483 $INVR->set_items ($self->{container}{0});
1484 $OPENCONT = 0;
1485 } elsif ($tag == $self->{player}{tag}) {
1400 $INV->set_items ($self->{container}{$self->{player}{tag}}) 1486 $INV->set_items ($self->{container}{$self->{player}{tag}})
1401 if $tag == $self->{player}{tag}; 1487 } else {
1488 $OPENCONT = $tag;
1489 $INVR->set_items ($self->{container}{$tag});
1490 }
1402 1491
1403 # $self-<{player}{tag} => player inv 1492 # $self-<{player}{tag} => player inv
1404 #use PApp::Util; warn PApp::Util::dumpval $self->{container}{$self->{player}{tag}}; 1493 #use PApp::Util; warn PApp::Util::dumpval $self->{container}{$self->{player}{tag}};
1405} 1494}
1406 1495
1407sub conn::container_clear { 1496sub conn::container_clear {
1408 my ($self, $tag) = @_; 1497 my ($self, $tag) = @_;
1409 1498
1410 update_floorbox if $tag == 0; 1499 if ($tag == 0) {
1411 1500 update_floorbox;
1501 $INVR->set_items ($self->{container}{0});
1502 $OPENCONT = 0;
1503 } elsif ($tag == $self->{player}{tag}) {
1412 $INV->set_items ($self->{container}{$tag}) 1504 $INV->set_items ($self->{container}{$tag})
1413 if $tag == $self->{player}{tag}; 1505 } else {
1506 $INVR->set_items ($self->{container}{$tag});
1507 $OPENCONT = $tag;
1508 }
1414 1509
1415# use PApp::Util; warn PApp::Util::dumpval $self->{container}{0}; 1510# use PApp::Util; warn PApp::Util::dumpval $self->{container}{0};
1416} 1511}
1417 1512
1418sub conn::item_delete { 1513sub conn::item_delete {
1419 my ($self, @items) = @_; 1514 my ($self, @items) = @_;
1420 1515
1421 for (@items) { 1516 for (@items) {
1422 update_floorbox if $_->{container} == 0; 1517 if ($_->{container} == 0) {
1423 1518 update_floorbox;
1424 $INV->set_items ($self->{container}{$_->{container}}) 1519 $INVR->set_items ($self->{container}{0});
1425 if $_->{container} == $self->{player}{tag}; 1520 } elsif ($_->{container} == $self->{player}{tag}) {
1521 $INV->set_items ($self->{container}{$self->{player}{tag}})
1522 } else {
1523 $INVR->set_items ($self->{container}{0});
1524 }
1426 } 1525 }
1427} 1526}
1428 1527
1429sub conn::item_update { 1528sub conn::item_update {
1430 my ($self, $item) = @_; 1529 my ($self, $item) = @_;
1431 1530
1432 update_floorbox if $item->{container} == 0; 1531 if ($item->{container} == 0) {
1433 1532 update_floorbox;
1533 $INVR->set_items ($self->{container}{0});
1534 } elsif ($item->{container} == $self->{player}{tag}) {
1434 $INV->set_items ($self->{container}{$item->{container}}) 1535 $INV->set_items ($self->{container}{$item->{container}})
1435 if $item->{container} == $self->{player}{tag}; 1536 }
1436} 1537}
1437 1538
1438%SDL_CB = ( 1539%SDL_CB = (
1439 CFClient::SDL_QUIT => sub { 1540 CFClient::SDL_QUIT => sub {
1440 Event::unloop -1; 1541 Event::unloop -1;
1531 DejaVuSansMono-BoldOblique.ttf 1632 DejaVuSansMono-BoldOblique.ttf
1532 ); 1633 );
1533 1634
1534 CFClient::add_font $_ for @fonts; 1635 CFClient::add_font $_ for @fonts;
1535 1636
1637 CFClient::pango_init;
1638
1536 $FONT_PROP = new_from_file CFClient::Font $fonts[0]; 1639 $FONT_PROP = new_from_file CFClient::Font $fonts[0];
1537 $FONT_FIXED = new_from_file CFClient::Font $fonts[1]; 1640 $FONT_FIXED = new_from_file CFClient::Font $fonts[1];
1538 1641
1539 $FONT_PROP->make_default; 1642 $FONT_PROP->make_default;
1540 } 1643 }
1644
1645# compare mono (ft) vs. rgba (cairo)
1646# ft - 1.8s, cairo 3s, even in alpha-only mode
1647# for my $rgba (0..1) {
1648# my $t1 = Time::HiRes::time;
1649# for (1..1000) {
1650# my $layout = CFClient::Layout->new ($rgba);
1651# $layout->set_text ("hallo" x 100);
1652# $layout->render;
1653# }
1654# my $t2 = Time::HiRes::time;
1655# warn $t2-$t1;
1656# }
1541 1657
1542 video_init; 1658 video_init;
1543 audio_init; 1659 audio_init;
1544} 1660}
1545 1661

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines