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.206 by root, Tue May 9 22:27:55 2006 UTC vs.
Revision 1.219 by root, Wed May 17 00:26:57 2006 UTC

37use CFClient; 37use CFClient;
38use CFClient::UI; 38use CFClient::UI;
39use CFClient::MapWidget; 39use CFClient::MapWidget;
40 40
41$Event::DIED = sub { 41$Event::DIED = sub {
42 # TODO: display dialog box or so
42 CFClient::error $_[1]; 43 CFClient::error $_[1];
43}; 44};
44 45
45#$SIG{__WARN__} = sub { Carp::cluck $_[0] };#d# 46#$SIG{__WARN__} = sub { Carp::cluck $_[0] };#d#
46 47
93our $SDL_MIXER; 94our $SDL_MIXER;
94our @SOUNDS; # event => file mapping 95our @SOUNDS; # event => file mapping
95our %AUDIO_CHUNKS; # audio files 96our %AUDIO_CHUNKS; # audio files
96 97
97our $ALT_ENTER_MESSAGE; 98our $ALT_ENTER_MESSAGE;
98our $STATUS_LINE; 99our $STATUSBOX;
99our $DEBUG_STATUS; 100our $DEBUG_STATUS;
100 101
101our $INVWIN; 102our $INVWIN;
102our $INV; 103our $INV;
104our $INVR;
105our $OPENCONT;
103 106
104sub status { 107sub status {
105 $STATUS_LINE->set_text ($_[0]); 108 $STATUSBOX->add ($_[0], pri => -10, group => "status", timeout => 20, fg => [1, 1, 0, 1]);
106 $STATUS_LINE->move (0, $HEIGHT - $ALT_ENTER_MESSAGE->{h} - $STATUS_LINE->{h});
107} 109}
108 110
109sub debug { 111sub debug {
110 $DEBUG_STATUS->set_text ($_[0]); 112 $DEBUG_STATUS->set_text ($_[0]);
111 my ($w, $h) = $DEBUG_STATUS->size_request; 113 my ($w, $h) = $DEBUG_STATUS->size_request;
164 $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]);
165 167
166 $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");
167 $table->add (1, 0, my $hbox = new CFClient::UI::HBox); 169 $table->add (1, 0, my $hbox = new CFClient::UI::HBox);
168 170
169 $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]);
170 $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");
171 173
172 $mode_slider->connect (changed => sub { 174 $mode_slider->connect (changed => sub {
173 my ($self, $value) = @_; 175 my ($self, $value) = @_;
174 176
199 } 201 }
200 ); 202 );
201 203
202 $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");
203 $table->add (1, $row++, new CFClient::UI::Slider 205 $table->add (1, $row++, new CFClient::UI::Slider
204 range => [$CFG->{map_scale}, 0.25, 2, 0.05], 206 range => [$CFG->{map_scale}, 0.25, 2, 0.05, 0.05],
205 tooltip => "Enlarge or shrink the displayed map", 207 tooltip => "Enlarge or shrink the displayed map",
206 connect_changed => sub { 208 connect_changed => sub {
207 my ($self, $value) = @_; 209 my ($self, $value) = @_;
208 $CFG->{map_scale} = 0.05 * int $value / 0.05; 210 $CFG->{map_scale} = $value;
209 } 211 }
210 ); 212 );
211 213
212 $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");
213 $table->add (1, $row++, new CFClient::UI::CheckBox 215 $table->add (1, $row++, new CFClient::UI::CheckBox
240 } 242 }
241 ); 243 );
242 244
243 $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");
244 $table->add (1, $row++, new CFClient::UI::Slider 246 $table->add (1, $row++, new CFClient::UI::Slider
245 range => [$CFG->{gui_fontsize}, 0.5, 2, 0.1], 247 range => [$CFG->{gui_fontsize}, 0.5, 2, 0.1, 0.1],
246 tooltip => "The font size used by most GUI elements", 248 tooltip => "The font size used by most GUI elements",
247 connect_changed => sub { 249 connect_changed => sub { $CFG->{gui_fontsize} = $_[1] },
248 $CFG->{gui_fontsize} = 0.1 * int $_[1] * 10;
249# $FONTSIZE = int $HEIGHT / 40 * $CFG->{gui_fontsize};
250 }
251 ); 250 );
252 251
253 $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");
254 $table->add (1, $row++, new CFClient::UI::Slider 253 $table->add (1, $row++, new CFClient::UI::Slider
255 range => [$CFG->{log_fontsize}, 0.5, 2, 0.1], 254 range => [$CFG->{log_fontsize}, 0.5, 2, 0.1, 0.1],
256 tooltip => "The font size used by the server log window only", 255 tooltip => "The font size used by the server log window only",
257 connect_changed => sub { 256 connect_changed => sub { $LOGVIEW->set_fontsize ($CFG->{log_fontsize} = $_[1]) },
258 $LOGVIEW->set_fontsize ($CFG->{log_fontsize} = 0.1 * int $_[1] * 10);
259 }
260 ); 257 );
261 258
262 $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");
263 260
264 $table->add (1, $row++, new CFClient::UI::Slider 261 $table->add (1, $row++, new CFClient::UI::Slider
265 range => [$CFG->{stat_fontsize}, 0.5, 2, 0.1], 262 range => [$CFG->{stat_fontsize}, 0.5, 2, 0.1, 0.1],
266 tooltip => "The font size used by the statistics window only", 263 tooltip => "The font size used by the statistics window only",
267 connect_changed => sub { 264 connect_changed => sub {
268 $CFG->{stat_fontsize} = 0.1 * int $_[1] * 10; 265 $CFG->{stat_fontsize} = $_[1];
269 &set_stats_window_fontsize; 266 &set_stats_window_fontsize;
270 } 267 }
271 ); 268 );
272 269
273 $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");
274 $table->add (1, $row++, new CFClient::UI::Slider 271 $table->add (1, $row++, new CFClient::UI::Slider
275 range => [$CFG->{gauge_size}, 0.2, 0.8, 0.02], 272 range => [$CFG->{gauge_size}, 0.2, 0.8, 0.02],
276 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",
277 connect_changed => sub { 274 connect_changed => sub {
278 $CFG->{gauge_size} = $_[1]; 275 $CFG->{gauge_size} = $_[1];
279 my $h = int $HEIGHT * $CFG->{gauge_size}; 276 $GAUGES->{win}->set_size ($WIDTH, int $HEIGHT * $CFG->{gauge_size});
280 $GAUGES->{win}->set_size ($WIDTH, $h);
281 $GAUGES->{win}->move (0, $HEIGHT - $h);
282 } 277 }
283 ); 278 );
284 279
285 $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");
286 $table->add (1, $row++, new CFClient::UI::Slider 281 $table->add (1, $row++, new CFClient::UI::Slider
287 range => [$CFG->{gauge_fontsize}, 0.5, 2.0, 0.1], 282 range => [$CFG->{gauge_fontsize}, 0.5, 2.0, 0.1, 0.1],
288 tooltip => "Adjusts the fontsize of the gauges at the bottom right", 283 tooltip => "Adjusts the fontsize of the gauges at the bottom right",
289 connect_changed => sub { 284 connect_changed => sub {
290 $CFG->{gauge_fontsize} = 0.1 * int $_[1] * 10; 285 $CFG->{gauge_fontsize} = $_[1];
291 &set_gauge_window_fontsize; 286 &set_gauge_window_fontsize;
292 } 287 }
293 ); 288 );
294 289
295 $table->add (1, $row++, new CFClient::UI::Button 290 $table->add (1, $row++, new CFClient::UI::Button
369# local $GAUGES->{win}{parent};#d# 364# local $GAUGES->{win}{parent};#d#
370# 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;
371} 366}
372 367
373sub make_gauge_window { 368sub make_gauge_window {
374 my $gh = int ($HEIGHT * $CFG->{gauge_size}); 369 my $gh = int $HEIGHT * $CFG->{gauge_size};
375# my $gw = int ($WIDTH * $CFG->{gauge_w_size});
376 370
377 my $win = new CFClient::UI::Frame ( 371 my $win = new CFClient::UI::Frame (
378 y => $HEIGHT - $gh, x => 0, user_w => $WIDTH, user_h => $gh 372 req_y => -1,
373 user_w => $WIDTH,
374 user_h => $gh,
379 ); 375 );
376
380 $win->add (my $hbox = new CFClient::UI::HBox 377 $win->add (my $hbox = new CFClient::UI::HBox
381 children => [ 378 children => [
382 (new CFClient::UI::HBox expand => 1), 379 (new CFClient::UI::HBox expand => 1),
383 ($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 ]),
384 (my $vbox = new CFClient::UI::VBox), 384 (my $vbox = new CFClient::UI::VBox),
385 ], 385 ],
386 ); 386 );
387 387
388 $vbox->add (new CFClient::UI::HBox 388 $vbox->add (new CFClient::UI::HBox
731 ); 731 );
732 732
733 $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");
734 $table->add (1, 7, new CFClient::UI::Slider 734 $table->add (1, 7, new CFClient::UI::Slider
735 req_w => 100, 735 req_w => 100,
736 range => [$CFG->{mapsize}, 10, 100 + 1, 1], 736 range => [$CFG->{mapsize}, 10, 100 + 1, 1, 1],
737 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. "
738 ."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.",
739 connect_changed => sub { 739 connect_changed => sub {
740 my ($self, $value) = @_; 740 my ($self, $value) = @_;
741 741
809 809
810 $window 810 $window
811} 811}
812 812
813sub make_inventory_window { 813sub make_inventory_window {
814 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);
815 $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
816 $invwin 821 $invwin
817} 822}
818 823
819sub sdl_init { 824sub sdl_init {
820 CFClient::SDL_Init 825 CFClient::SDL_Init
842 847
843 $CFClient::UI::ROOT->configure (0, 0, $WIDTH, $HEIGHT);#d# 848 $CFClient::UI::ROOT->configure (0, 0, $WIDTH, $HEIGHT);#d#
844 849
845 ############################################################################# 850 #############################################################################
846 851
847 if ($DEBUG_STATUS) { 852 unless ($DEBUG_STATUS) {
848 # reconfigure all widgets
849 $CFClient::UI::ROOT->reconfigure;
850
851 } else {
852 # create the widgets 853 # create the widgets
853 854
854 $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;
855 $DEBUG_STATUS->show; 856 $DEBUG_STATUS->show;
856 857
857 $STATUS_LINE = new CFClient::UI::Label 858 $STATUSBOX = new CFClient::UI::Statusbox;
858 padding => 0, 859 $STATUSBOX->add ("Use <b>Alt-Enter</b> to toggle fullscreen mode", pri => -100, color => [1, 1, 1, 0.8]);
859 y => $HEIGHT - $FONTSIZE * 1.8;
860 $STATUS_LINE->show;
861 860
862 $ALT_ENTER_MESSAGE = new CFClient::UI::Label 861 (new CFClient::UI::Frame
863 padding => 0, 862 bg => [0, 0, 0, 0.4],
864 fontsize => 0.8, 863 req_y => -1,
865 markup => "Use <b>Alt-Enter</b> to toggle fullscreen mode"; 864 child => $STATUSBOX,
866 $ALT_ENTER_MESSAGE->show; 865 )->show;
867 $ALT_ENTER_MESSAGE->move (0, $HEIGHT - $ALT_ENTER_MESSAGE->{h});
868 866
869 CFClient::UI::FancyFrame->new ( 867 CFClient::UI::FancyFrame->new (
870 border_bg => [1, 1, 1, 192/255], 868 border_bg => [1, 1, 1, 192/255],
871 bg => [1, 1, 1, 0], 869 bg => [1, 1, 1, 0],
872 child => ($MAPMAP = new CFClient::MapWidget::MapMap), 870 child => ($MAPMAP = new CFClient::MapWidget::MapMap),
904 status "Configuration Saved"; 902 status "Configuration Saved";
905 }); 903 });
906 904
907 $BUTTONBAR->show; 905 $BUTTONBAR->show;
908 906
907 $STATUSBOX->add ("Set video mode $WIDTH×$HEIGHT", timeout => 10, fg => [1, 1, 1, 0.5]);
908
909 # delay till geometry is constant 909 # delay till geometry is constant
910 $CFClient::UI::ROOT->on_refresh (startup => sub { 910 $CFClient::UI::ROOT->on_post_alloc (startup => sub {
911 $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
912 }); 914 });
913 force_refresh (); 915 force_refresh ();
914 } 916 }
915} 917}
916 918
977my $animate_timer; 979my $animate_timer;
978 980
979my $fps = 9; 981my $fps = 9;
980 982
981sub force_refresh { 983sub force_refresh {
982 $fps = $fps * 0.95 + 1 / ($NOW - $LAST_REFRESH) * 0.05; 984 $fps = $fps * 0.95 + 1 / (($NOW - $LAST_REFRESH) || 0.1) * 0.05;
983 debug sprintf "%3.2f", $fps; 985 debug sprintf "%3.2f", $fps;
984 986
985 $CFClient::UI::ROOT->draw; 987 $CFClient::UI::ROOT->draw;
986 CFClient::SDL_GL_SwapBuffers; 988 CFClient::SDL_GL_SwapBuffers;
987 989
1326 [0.55, 0.41, 0.13], 1328 [0.55, 0.41, 0.13],
1327 [0.99, 0.77, 0.26], 1329 [0.99, 0.77, 0.26],
1328 [0.74, 0.65, 0.41], 1330 [0.74, 0.65, 0.41],
1329 ); 1331 );
1330 1332
1333 my $time = sprintf "%02d:%02d:%02d", (localtime time)[2,1,0];
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
1331 $LOGVIEW->add_paragraph ($color[$color], $text); 1339 $LOGVIEW->add_paragraph ($color[$color],
1340 join "\n", map "$time $_", split /\n/, $text);
1341
1342 $STATUSBOX->add ($text,
1343 group => $text,
1344 fg => $color[$color],
1345 timeout => 60,
1346 tooltip_font => $::FONT_FIXED,
1347 );
1348}
1349
1350sub conn::drawextinfo {
1351 my ($self, $color, $type, $subtype, $message) = @_;
1352
1353 $self->drawinfo ($color, $message);
1332} 1354}
1333 1355
1334sub conn::spell_add { 1356sub conn::spell_add {
1335 my ($self, $spell) = @_; 1357 my ($self, $spell) = @_;
1336 1358
1345} 1367}
1346 1368
1347sub conn::addme_success { 1369sub conn::addme_success {
1348 my ($self) = @_; 1370 my ($self) = @_;
1349 1371
1372 $MAPWIDGET->clr_commands;
1373
1350 for my $skill (values %{$self->{skill_info}}) { 1374 for my $skill (values %{$self->{skill_info}}) {
1351 $MAPWIDGET->add_command ("ready_skill $skill", "Ready the skill '$skill'"); 1375 $MAPWIDGET->add_command ("ready_\\skill $skill", "Ready the skill '$skill'");
1352 $MAPWIDGET->add_command ("use_skill $skill", "Immediately use the skill '$skill'"); 1376 $MAPWIDGET->add_command ("use_\\skill $skill", "Immediately use the skill '$skill'");
1353 } 1377 }
1354 1378
1355 $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");
1356 $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");
1357 $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");
1358 $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.
1359} 1449}
1360 1450
1361sub conn::eof { 1451sub conn::eof {
1452 $MAPWIDGET->clr_commands;
1453
1362 stop_game; 1454 stop_game;
1363} 1455}
1364 1456
1365sub update_floorbox { 1457sub update_floorbox {
1366 $CFClient::UI::ROOT->on_refresh ($FLOORBOX => sub { 1458 $CFClient::UI::ROOT->on_refresh ($FLOORBOX => sub {
1367 return unless $CONN; 1459 return unless $CONN;
1368 1460
1369 $FLOORBOX->clear; 1461 $FLOORBOX->clear;
1370 $FLOORBOX->add (new CFClient::UI::Empty expand => 1); 1462 $FLOORBOX->add (new CFClient::UI::Empty expand => 1);
1371 1463
1372 # we basically have to use the same sorting as everybody else 1464 my $count = 4;
1373 $FLOORBOX->add ( 1465 for (@{ $CONN->{container}{0} }) {
1466 if (--$count) {
1374 map +(new CFClient::UI::InventoryItem item => $_), 1467 $FLOORBOX->add (new CFClient::UI::InventoryItem item => $_);
1375 @{ $CONN->{container}{0} } 1468 } else {
1469 $FLOORBOX->add (new CFClient::UI::Label text => "More...");
1470 last;
1471 }
1376 ); 1472 }
1377 }); 1473 });
1378 1474
1379 $WANT_REFRESH++; 1475 $WANT_REFRESH++;
1380} 1476}
1381 1477
1382sub conn::container_add { 1478sub conn::container_add {
1383 my ($self, $tag, $items) = @_; 1479 my ($self, $tag, $items) = @_;
1384 1480
1385 update_floorbox if $tag == 0; 1481 if ($tag == 0) {
1386 1482 update_floorbox;
1483 $INVR->set_items ($self->{container}{0});
1484 $OPENCONT = 0;
1485 } elsif ($tag == $self->{player}{tag}) {
1387 $INV->set_items ($self->{container}{$self->{player}{tag}}) 1486 $INV->set_items ($self->{container}{$self->{player}{tag}})
1388 if $tag == $self->{player}{tag}; 1487 } else {
1488 $OPENCONT = $tag;
1489 $INVR->set_items ($self->{container}{$tag});
1490 }
1389 1491
1390 # $self-<{player}{tag} => player inv 1492 # $self-<{player}{tag} => player inv
1391 #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}};
1392} 1494}
1393 1495
1394sub conn::container_clear { 1496sub conn::container_clear {
1395 my ($self, $tag) = @_; 1497 my ($self, $tag) = @_;
1396 1498
1397 update_floorbox if $tag == 0; 1499 if ($tag == 0) {
1398 1500 update_floorbox;
1501 $INVR->set_items ($self->{container}{0});
1502 $OPENCONT = 0;
1503 } elsif ($tag == $self->{player}{tag}) {
1399 $INV->set_items ($self->{container}{$tag}) 1504 $INV->set_items ($self->{container}{$tag})
1400 if $tag == $self->{player}{tag}; 1505 } else {
1506 $INVR->set_items ($self->{container}{$tag});
1507 $OPENCONT = $tag;
1508 }
1401 1509
1402# use PApp::Util; warn PApp::Util::dumpval $self->{container}{0}; 1510# use PApp::Util; warn PApp::Util::dumpval $self->{container}{0};
1403} 1511}
1404 1512
1405sub conn::item_delete { 1513sub conn::item_delete {
1406 my ($self, @items) = @_; 1514 my ($self, @items) = @_;
1407 1515
1408 for (@items) { 1516 for (@items) {
1409 update_floorbox if $_->{container} == 0; 1517 if ($_->{container} == 0) {
1410 1518 update_floorbox;
1411 $INV->set_items ($self->{container}{$_->{container}}) 1519 $INVR->set_items ($self->{container}{0});
1412 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 }
1413 } 1525 }
1414} 1526}
1415 1527
1416sub conn::item_update { 1528sub conn::item_update {
1417 my ($self, $item) = @_; 1529 my ($self, $item) = @_;
1418 1530
1419 update_floorbox if $item->{container} == 0; 1531 if ($item->{container} == 0) {
1420 1532 update_floorbox;
1533 $INVR->set_items ($self->{container}{0});
1534 } elsif ($item->{container} == $self->{player}{tag}) {
1421 $INV->set_items ($self->{container}{$item->{container}}) 1535 $INV->set_items ($self->{container}{$item->{container}})
1422 if $item->{container} == $self->{player}{tag}; 1536 }
1423} 1537}
1424 1538
1425%SDL_CB = ( 1539%SDL_CB = (
1426 CFClient::SDL_QUIT => sub { 1540 CFClient::SDL_QUIT => sub {
1427 Event::unloop -1; 1541 Event::unloop -1;
1518 DejaVuSansMono-BoldOblique.ttf 1632 DejaVuSansMono-BoldOblique.ttf
1519 ); 1633 );
1520 1634
1521 CFClient::add_font $_ for @fonts; 1635 CFClient::add_font $_ for @fonts;
1522 1636
1637 CFClient::pango_init;
1638
1523 $FONT_PROP = new_from_file CFClient::Font $fonts[0]; 1639 $FONT_PROP = new_from_file CFClient::Font $fonts[0];
1524 $FONT_FIXED = new_from_file CFClient::Font $fonts[1]; 1640 $FONT_FIXED = new_from_file CFClient::Font $fonts[1];
1525 1641
1526 $FONT_PROP->make_default; 1642 $FONT_PROP->make_default;
1527 } 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# }
1528 1657
1529 video_init; 1658 video_init;
1530 audio_init; 1659 audio_init;
1531} 1660}
1532 1661

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines