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.210 by root, Fri May 12 01:47:04 2006 UTC vs.
Revision 1.223 by elmex, Wed May 17 14:55:15 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 $INVR_LBL;
106our $OPENCONT;
104 107
105sub status { 108sub status {
106 $STATUS_LINE->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_refresh ($STATUS_LINE => sub {
108 $STATUS_LINE->move (0, $HEIGHT - $STATUS_LINE->{h});#d# to in toplevel
109 });
110} 110}
111 111
112sub debug { 112sub debug {
113 $DEBUG_STATUS->set_text ($_[0]); 113 $DEBUG_STATUS->set_text ($_[0]);
114 my ($w, $h) = $DEBUG_STATUS->size_request; 114 my ($w, $h) = $DEBUG_STATUS->size_request;
167 $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]);
168 168
169 $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");
170 $table->add (1, 0, my $hbox = new CFClient::UI::HBox); 170 $table->add (1, 0, my $hbox = new CFClient::UI::HBox);
171 171
172 $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]);
173 $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");
174 174
175 $mode_slider->connect (changed => sub { 175 $mode_slider->connect (changed => sub {
176 my ($self, $value) = @_; 176 my ($self, $value) = @_;
177 177
202 } 202 }
203 ); 203 );
204 204
205 $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");
206 $table->add (1, $row++, new CFClient::UI::Slider 206 $table->add (1, $row++, new CFClient::UI::Slider
207 range => [$CFG->{map_scale}, 0.25, 2, 0.05], 207 range => [$CFG->{map_scale}, 0.25, 2, 0.05, 0.05],
208 tooltip => "Enlarge or shrink the displayed map", 208 tooltip => "Enlarge or shrink the displayed map",
209 connect_changed => sub { 209 connect_changed => sub {
210 my ($self, $value) = @_; 210 my ($self, $value) = @_;
211 $CFG->{map_scale} = 0.05 * int $value / 0.05; 211 $CFG->{map_scale} = $value;
212 } 212 }
213 ); 213 );
214 214
215 $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");
216 $table->add (1, $row++, new CFClient::UI::CheckBox 216 $table->add (1, $row++, new CFClient::UI::CheckBox
243 } 243 }
244 ); 244 );
245 245
246 $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");
247 $table->add (1, $row++, new CFClient::UI::Slider 247 $table->add (1, $row++, new CFClient::UI::Slider
248 range => [$CFG->{gui_fontsize}, 0.5, 2, 0.1], 248 range => [$CFG->{gui_fontsize}, 0.5, 2, 0.1, 0.1],
249 tooltip => "The font size used by most GUI elements", 249 tooltip => "The font size used by most GUI elements",
250 connect_changed => sub { 250 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 ); 251 );
255 252
256 $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");
257 $table->add (1, $row++, new CFClient::UI::Slider 254 $table->add (1, $row++, new CFClient::UI::Slider
258 range => [$CFG->{log_fontsize}, 0.5, 2, 0.1], 255 range => [$CFG->{log_fontsize}, 0.5, 2, 0.1, 0.1],
259 tooltip => "The font size used by the server log window only", 256 tooltip => "The font size used by the server log window only",
260 connect_changed => sub { 257 connect_changed => sub { $LOGVIEW->set_fontsize ($CFG->{log_fontsize} = $_[1]) },
261 $LOGVIEW->set_fontsize ($CFG->{log_fontsize} = 0.1 * int $_[1] * 10);
262 }
263 ); 258 );
264 259
265 $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");
266 261
267 $table->add (1, $row++, new CFClient::UI::Slider 262 $table->add (1, $row++, new CFClient::UI::Slider
268 range => [$CFG->{stat_fontsize}, 0.5, 2, 0.1], 263 range => [$CFG->{stat_fontsize}, 0.5, 2, 0.1, 0.1],
269 tooltip => "The font size used by the statistics window only", 264 tooltip => "The font size used by the statistics window only",
270 connect_changed => sub { 265 connect_changed => sub {
271 $CFG->{stat_fontsize} = 0.1 * int $_[1] * 10; 266 $CFG->{stat_fontsize} = $_[1];
272 &set_stats_window_fontsize; 267 &set_stats_window_fontsize;
273 } 268 }
274 ); 269 );
275 270
276 $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");
277 $table->add (1, $row++, new CFClient::UI::Slider 272 $table->add (1, $row++, new CFClient::UI::Slider
278 range => [$CFG->{gauge_size}, 0.2, 0.8, 0.02], 273 range => [$CFG->{gauge_size}, 0.2, 0.8, 0.02],
279 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",
280 connect_changed => sub { 275 connect_changed => sub {
281 $CFG->{gauge_size} = $_[1]; 276 $CFG->{gauge_size} = $_[1];
282 my $h = int $HEIGHT * $CFG->{gauge_size}; 277 $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 } 278 }
286 ); 279 );
287 280
288 $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");
289 $table->add (1, $row++, new CFClient::UI::Slider 282 $table->add (1, $row++, new CFClient::UI::Slider
290 range => [$CFG->{gauge_fontsize}, 0.5, 2.0, 0.1], 283 range => [$CFG->{gauge_fontsize}, 0.5, 2.0, 0.1, 0.1],
291 tooltip => "Adjusts the fontsize of the gauges at the bottom right", 284 tooltip => "Adjusts the fontsize of the gauges at the bottom right",
292 connect_changed => sub { 285 connect_changed => sub {
293 $CFG->{gauge_fontsize} = 0.1 * int $_[1] * 10; 286 $CFG->{gauge_fontsize} = $_[1];
294 &set_gauge_window_fontsize; 287 &set_gauge_window_fontsize;
295 } 288 }
296 ); 289 );
297 290
298 $table->add (1, $row++, new CFClient::UI::Button 291 $table->add (1, $row++, new CFClient::UI::Button
372# local $GAUGES->{win}{parent};#d# 365# local $GAUGES->{win}{parent};#d#
373# 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;
374} 367}
375 368
376sub make_gauge_window { 369sub make_gauge_window {
377 my $gh = int ($HEIGHT * $CFG->{gauge_size}); 370 my $gh = int $HEIGHT * $CFG->{gauge_size};
378# my $gw = int ($WIDTH * $CFG->{gauge_w_size});
379 371
380 my $win = new CFClient::UI::Frame ( 372 my $win = new CFClient::UI::Frame (
381 y => $HEIGHT - $gh, x => 0, user_w => $WIDTH, user_h => $gh 373 req_y => -1,
374 user_w => $WIDTH,
375 user_h => $gh,
382 ); 376 );
377
383 $win->add (my $hbox = new CFClient::UI::HBox 378 $win->add (my $hbox = new CFClient::UI::HBox
384 children => [ 379 children => [
385 (new CFClient::UI::HBox expand => 1), 380 (new CFClient::UI::HBox expand => 1),
386 ($FLOORBOX = new CFClient::UI::VBox), 381 (new CFClient::UI::VBox children => [
382 (new CFClient::UI::Empty expand => 1),
383 (new CFClient::UI::Frame bg => [0, 0, 0, 0.4], child => ($FLOORBOX = new CFClient::UI::VBox)),
384 ]),
387 (my $vbox = new CFClient::UI::VBox), 385 (my $vbox = new CFClient::UI::VBox),
388 ], 386 ],
389 ); 387 );
390 388
391 $vbox->add (new CFClient::UI::HBox 389 $vbox->add (new CFClient::UI::HBox
734 ); 732 );
735 733
736 $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");
737 $table->add (1, 7, new CFClient::UI::Slider 735 $table->add (1, 7, new CFClient::UI::Slider
738 req_w => 100, 736 req_w => 100,
739 range => [$CFG->{mapsize}, 10, 100 + 1, 1], 737 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. " 738 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.", 739 ."If you set this to a high value you will be able to see further for example.",
742 connect_changed => sub { 740 connect_changed => sub {
743 my ($self, $value) = @_; 741 my ($self, $value) = @_;
744 742
812 810
813 $window 811 $window
814} 812}
815 813
816sub make_inventory_window { 814sub make_inventory_window {
817 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");
818 $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
819 $invwin 830 $invwin
820} 831}
821 832
822sub sdl_init { 833sub sdl_init {
823 CFClient::SDL_Init 834 CFClient::SDL_Init
845 856
846 $CFClient::UI::ROOT->configure (0, 0, $WIDTH, $HEIGHT);#d# 857 $CFClient::UI::ROOT->configure (0, 0, $WIDTH, $HEIGHT);#d#
847 858
848 ############################################################################# 859 #############################################################################
849 860
850 if ($DEBUG_STATUS) { 861 unless ($DEBUG_STATUS) {
851 # reconfigure all widgets
852 $CFClient::UI::ROOT->reconfigure;
853
854 } else {
855 # create the widgets 862 # create the widgets
856 863
857 $DEBUG_STATUS = new CFClient::UI::Label padding => 0, z => 100, text => "hulla", x => 100;#d# 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 $STATUS_LINE = new CFClient::UI::Statusbox; 867 $STATUSBOX = new CFClient::UI::Statusbox;
861 $STATUS_LINE->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 $STATUS_LINE->show; 869
870 (new CFClient::UI::Frame
871 bg => [0, 0, 0, 0.4],
872 req_y => -1,
873 child => $STATUSBOX,
874 )->show;
863 875
864 CFClient::UI::FancyFrame->new ( 876 CFClient::UI::FancyFrame->new (
865 border_bg => [1, 1, 1, 192/255], 877 border_bg => [1, 1, 1, 192/255],
866 bg => [1, 1, 1, 0], 878 bg => [1, 1, 1, 0],
867 child => ($MAPMAP = new CFClient::MapWidget::MapMap), 879 child => ($MAPMAP = new CFClient::MapWidget::MapMap),
899 status "Configuration Saved"; 911 status "Configuration Saved";
900 }); 912 });
901 913
902 $BUTTONBAR->show; 914 $BUTTONBAR->show;
903 915
916 $STATUSBOX->add ("Set video mode $WIDTH×$HEIGHT", timeout => 10, fg => [1, 1, 1, 0.5]);
917
904 # delay till geometry is constant 918 # delay till geometry is constant
905 $CFClient::UI::ROOT->on_refresh (startup => sub { 919 $CFClient::UI::ROOT->on_post_alloc (startup => sub {
906 $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
907 }); 923 });
908 force_refresh (); 924 force_refresh ();
909 } 925 }
910} 926}
911 927
972my $animate_timer; 988my $animate_timer;
973 989
974my $fps = 9; 990my $fps = 9;
975 991
976sub force_refresh { 992sub force_refresh {
977 $fps = $fps * 0.95 + 1 / ($NOW - $LAST_REFRESH) * 0.05; 993 $fps = $fps * 0.95 + 1 / (($NOW - $LAST_REFRESH) || 0.1) * 0.05;
978 debug sprintf "%3.2f", $fps; 994 debug sprintf "%3.2f", $fps;
979 995
980 $CFClient::UI::ROOT->draw; 996 $CFClient::UI::ROOT->draw;
981 CFClient::SDL_GL_SwapBuffers; 997 CFClient::SDL_GL_SwapBuffers;
982 998
1323 [0.74, 0.65, 0.41], 1339 [0.74, 0.65, 0.41],
1324 ); 1340 );
1325 1341
1326 my $time = sprintf "%02d:%02d:%02d", (localtime time)[2,1,0]; 1342 my $time = sprintf "%02d:%02d:%02d", (localtime time)[2,1,0];
1327 1343
1328 $text =~ s/&/&amp;/g; $text =~ s/</&lt;/g; 1344 $text = CFClient::UI::Label::escape $text;
1329 $text =~ s/\[b\](.*?)\[\/b\]/<b>\1<\/b>/g; 1345 $text =~ s/\[b\](.*?)\[\/b\]/<b>\1<\/b>/g;
1330 $text =~ s/\[color=(.*?)\](.*?)\[\/color\]/<span foreground='\1'>\2<\/span>/g; 1346 $text =~ s/\[color=(.*?)\](.*?)\[\/color\]/<span foreground='\1'>\2<\/span>/g;
1331 1347
1332 $LOGVIEW->add_paragraph ($color[$color], 1348 $LOGVIEW->add_paragraph ($color[$color],
1333 join "\n", map "$time $_", split /\n/, $text); 1349 join "\n", map "$time $_", split /\n/, $text);
1334 $STATUS_LINE->add ($text, color => $color[$color], timeout => 60); 1350
1351 $STATUSBOX->add ($text,
1352 group => $text,
1353 fg => $color[$color],
1354 timeout => 60,
1355 tooltip_font => $::FONT_FIXED,
1356 );
1335} 1357}
1336 1358
1337sub conn::drawextinfo { 1359sub conn::drawextinfo {
1338 my ($self, $color, $type, $subtype, $message) = @_; 1360 my ($self, $color, $type, $subtype, $message) = @_;
1339 1361
1354} 1376}
1355 1377
1356sub conn::addme_success { 1378sub conn::addme_success {
1357 my ($self) = @_; 1379 my ($self) = @_;
1358 1380
1381 $MAPWIDGET->clr_commands;
1382
1359 for my $skill (values %{$self->{skill_info}}) { 1383 for my $skill (values %{$self->{skill_info}}) {
1360 $MAPWIDGET->add_command ("ready_skill $skill", "Ready the skill '$skill'"); 1384 $MAPWIDGET->add_command ("ready_skill $skill", "Ready the skill '$skill'");
1361 $MAPWIDGET->add_command ("use_skill $skill", "Immediately use the skill '$skill'"); 1385 $MAPWIDGET->add_command ("use_skill $skill", "Immediately use the skill '$skill'");
1362 } 1386 }
1363 1387
1364 $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");
1365 $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");
1366 $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");
1367 $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.
1368} 1458}
1369 1459
1370sub conn::eof { 1460sub conn::eof {
1461 $MAPWIDGET->clr_commands;
1462
1371 stop_game; 1463 stop_game;
1372} 1464}
1373 1465
1374sub update_floorbox { 1466sub update_floorbox {
1375 $CFClient::UI::ROOT->on_refresh ($FLOORBOX => sub { 1467 $CFClient::UI::ROOT->on_refresh ($FLOORBOX => sub {
1393} 1485}
1394 1486
1395sub conn::container_add { 1487sub conn::container_add {
1396 my ($self, $tag, $items) = @_; 1488 my ($self, $tag, $items) = @_;
1397 1489
1398 update_floorbox if $tag == 0; 1490 #d# print "container_add: container $tag ($self->{player}{tag})\n";
1399 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");
1400 $INV->set_items ($self->{container}{$self->{player}{tag}}) 1499 $INV->set_items ($self->{container}{$self->{player}{tag}})
1401 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 }
1402 1505
1403 # $self-<{player}{tag} => player inv 1506 # $self-<{player}{tag} => player inv
1404 #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}};
1405} 1508}
1406 1509
1407sub conn::container_clear { 1510sub conn::container_clear {
1408 my ($self, $tag) = @_; 1511 my ($self, $tag) = @_;
1409 1512
1410 update_floorbox if $tag == 0; 1513 #d# print "container_clear: container $tag ($self->{player}{tag})\n";
1411 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");
1412 $INV->set_items ($self->{container}{$tag}) 1522 $INV->set_items ($self->{container}{$tag})
1413 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 }
1414 1528
1415# use PApp::Util; warn PApp::Util::dumpval $self->{container}{0}; 1529# use PApp::Util; warn PApp::Util::dumpval $self->{container}{0};
1416} 1530}
1417 1531
1418sub conn::item_delete { 1532sub conn::item_delete {
1419 my ($self, @items) = @_; 1533 my ($self, @items) = @_;
1420 1534
1421 for (@items) { 1535 for (@items) {
1422 update_floorbox if $_->{container} == 0; 1536 #d# print "item_delete: $_->{tag} from $_->{container} ($self->{player}{tag})\n";
1423 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}));
1424 $INV->set_items ($self->{container}{$_->{container}}) 1549 $INVR->set_items ($self->{container}{$_->{container}});
1425 if $_->{container} == $self->{player}{tag}; 1550 }
1426 } 1551 }
1427} 1552}
1428 1553
1429sub conn::item_update { 1554sub conn::item_update {
1430 my ($self, $item) = @_; 1555 my ($self, $item) = @_;
1431 1556
1432 update_floorbox if $item->{container} == 0; 1557 #d# print "item_update: $item->{tag} in $item->{container} ($self->{player}{tag}) ($OPENCONT)\n";
1433 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}) {
1434 $INV->set_items ($self->{container}{$item->{container}}) 1573 $INV->set_items ($self->{container}{$item->{container}})
1435 if $item->{container} == $self->{player}{tag}; 1574 }
1575 }
1436} 1576}
1437 1577
1438%SDL_CB = ( 1578%SDL_CB = (
1439 CFClient::SDL_QUIT => sub { 1579 CFClient::SDL_QUIT => sub {
1440 Event::unloop -1; 1580 Event::unloop -1;
1531 DejaVuSansMono-BoldOblique.ttf 1671 DejaVuSansMono-BoldOblique.ttf
1532 ); 1672 );
1533 1673
1534 CFClient::add_font $_ for @fonts; 1674 CFClient::add_font $_ for @fonts;
1535 1675
1676 CFClient::pango_init;
1677
1536 $FONT_PROP = new_from_file CFClient::Font $fonts[0]; 1678 $FONT_PROP = new_from_file CFClient::Font $fonts[0];
1537 $FONT_FIXED = new_from_file CFClient::Font $fonts[1]; 1679 $FONT_FIXED = new_from_file CFClient::Font $fonts[1];
1538 1680
1539 $FONT_PROP->make_default; 1681 $FONT_PROP->make_default;
1540 } 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# }
1541 1696
1542 video_init; 1697 video_init;
1543 audio_init; 1698 audio_init;
1544} 1699}
1545 1700

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines