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.215 by root, Mon May 15 00:15:08 2006 UTC vs.
Revision 1.220 by root, Wed May 17 00:28:46 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, fg => [1, 1, 0, 1]); 108 $STATUSBOX->add ($_[0], pri => -10, group => "status", timeout => 20, fg => [1, 1, 0, 1]);
107} 109}
108 110
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
736 ); 731 );
737 732
738 $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");
739 $table->add (1, 7, new CFClient::UI::Slider 734 $table->add (1, 7, new CFClient::UI::Slider
740 req_w => 100, 735 req_w => 100,
741 range => [$CFG->{mapsize}, 10, 100 + 1, 1], 736 range => [$CFG->{mapsize}, 10, 100 + 1, 1, 1],
742 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. "
743 ."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.",
744 connect_changed => sub { 739 connect_changed => sub {
745 my ($self, $value) = @_; 740 my ($self, $value) = @_;
746 741
814 809
815 $window 810 $window
816} 811}
817 812
818sub make_inventory_window { 813sub make_inventory_window {
819 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);
820 $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
821 $invwin 821 $invwin
822} 822}
823 823
824sub sdl_init { 824sub sdl_init {
825 CFClient::SDL_Init 825 CFClient::SDL_Init
1330 [0.74, 0.65, 0.41], 1330 [0.74, 0.65, 0.41],
1331 ); 1331 );
1332 1332
1333 my $time = sprintf "%02d:%02d:%02d", (localtime time)[2,1,0]; 1333 my $time = sprintf "%02d:%02d:%02d", (localtime time)[2,1,0];
1334 1334
1335 $text =~ s/&/&amp;/g; $text =~ s/</&lt;/g; 1335 $text = CFClient::UI::Label::escape $text;
1336 $text =~ s/\[b\](.*?)\[\/b\]/<b>\1<\/b>/g; 1336 $text =~ s/\[b\](.*?)\[\/b\]/<b>\1<\/b>/g;
1337 $text =~ s/\[color=(.*?)\](.*?)\[\/color\]/<span foreground='\1'>\2<\/span>/g; 1337 $text =~ s/\[color=(.*?)\](.*?)\[\/color\]/<span foreground='\1'>\2<\/span>/g;
1338 1338
1339 $LOGVIEW->add_paragraph ($color[$color], 1339 $LOGVIEW->add_paragraph ($color[$color],
1340 join "\n", map "$time $_", split /\n/, $text); 1340 join "\n", map "$time $_", split /\n/, $text);
1367} 1367}
1368 1368
1369sub conn::addme_success { 1369sub conn::addme_success {
1370 my ($self) = @_; 1370 my ($self) = @_;
1371 1371
1372 $MAPWIDGET->clr_commands;
1373
1372 for my $skill (values %{$self->{skill_info}}) { 1374 for my $skill (values %{$self->{skill_info}}) {
1373 $MAPWIDGET->add_command ("ready_skill $skill", "Ready the skill '$skill'"); 1375 $MAPWIDGET->add_command ("ready_\\skill $skill", "Ready the skill '$skill'");
1374 $MAPWIDGET->add_command ("use_skill $skill", "Immediately use the skill '$skill'"); 1376 $MAPWIDGET->add_command ("use_\\skill $skill", "Immediately use the skill '$skill'");
1375 } 1377 }
1376 1378
1377 $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");
1378 $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");
1379 $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");
1380 $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 afk
1390 apply
1391 applymode
1392 body
1393 bowmode
1394 brace
1395 build
1396 disarm
1397 dm
1398 dmhide
1399 drop
1400 dropall
1401 examine
1402 get
1403 gsay
1404 help
1405 hiscore
1406 inventory
1407 invoke
1408 killpets
1409 listen
1410 logs
1411 mapinfo
1412 maps
1413 mark
1414 motd
1415 output-count
1416 output-sync
1417 party
1418 peaceful
1419 petmode
1420 pickup
1421 players
1422 prepare
1423 quests
1424 rename
1425 resistances
1426 rotateshoottype
1427 save
1428 say
1429 search
1430 search-items
1431 showpets
1432 skills
1433 sound
1434 take
1435 throw
1436 time
1437 title
1438 usekeys
1439 version
1440 weather
1441 whereabouts
1442 whereami
1443 who
1444 wimpy
1445 )) {
1446 $MAPWIDGET->add_command ($_, "$_: no help available (yet)");
1447 }
1448
1449 #TODO: add " and ' "aliases" etc.
1381} 1450}
1382 1451
1383sub conn::eof { 1452sub conn::eof {
1453 $MAPWIDGET->clr_commands;
1454
1384 stop_game; 1455 stop_game;
1385} 1456}
1386 1457
1387sub update_floorbox { 1458sub update_floorbox {
1388 $CFClient::UI::ROOT->on_refresh ($FLOORBOX => sub { 1459 $CFClient::UI::ROOT->on_refresh ($FLOORBOX => sub {
1406} 1477}
1407 1478
1408sub conn::container_add { 1479sub conn::container_add {
1409 my ($self, $tag, $items) = @_; 1480 my ($self, $tag, $items) = @_;
1410 1481
1411 update_floorbox if $tag == 0; 1482 if ($tag == 0) {
1412 1483 update_floorbox;
1484 $INVR->set_items ($self->{container}{0});
1485 $OPENCONT = 0;
1486 } elsif ($tag == $self->{player}{tag}) {
1413 $INV->set_items ($self->{container}{$self->{player}{tag}}) 1487 $INV->set_items ($self->{container}{$self->{player}{tag}})
1414 if $tag == $self->{player}{tag}; 1488 } else {
1489 $OPENCONT = $tag;
1490 $INVR->set_items ($self->{container}{$tag});
1491 }
1415 1492
1416 # $self-<{player}{tag} => player inv 1493 # $self-<{player}{tag} => player inv
1417 #use PApp::Util; warn PApp::Util::dumpval $self->{container}{$self->{player}{tag}}; 1494 #use PApp::Util; warn PApp::Util::dumpval $self->{container}{$self->{player}{tag}};
1418} 1495}
1419 1496
1420sub conn::container_clear { 1497sub conn::container_clear {
1421 my ($self, $tag) = @_; 1498 my ($self, $tag) = @_;
1422 1499
1423 update_floorbox if $tag == 0; 1500 if ($tag == 0) {
1424 1501 update_floorbox;
1502 $INVR->set_items ($self->{container}{0});
1503 $OPENCONT = 0;
1504 } elsif ($tag == $self->{player}{tag}) {
1425 $INV->set_items ($self->{container}{$tag}) 1505 $INV->set_items ($self->{container}{$tag})
1426 if $tag == $self->{player}{tag}; 1506 } else {
1507 $INVR->set_items ($self->{container}{$tag});
1508 $OPENCONT = $tag;
1509 }
1427 1510
1428# use PApp::Util; warn PApp::Util::dumpval $self->{container}{0}; 1511# use PApp::Util; warn PApp::Util::dumpval $self->{container}{0};
1429} 1512}
1430 1513
1431sub conn::item_delete { 1514sub conn::item_delete {
1432 my ($self, @items) = @_; 1515 my ($self, @items) = @_;
1433 1516
1434 for (@items) { 1517 for (@items) {
1435 update_floorbox if $_->{container} == 0; 1518 if ($_->{container} == 0) {
1436 1519 update_floorbox;
1437 $INV->set_items ($self->{container}{$_->{container}}) 1520 $INVR->set_items ($self->{container}{0});
1438 if $_->{container} == $self->{player}{tag}; 1521 } elsif ($_->{container} == $self->{player}{tag}) {
1522 $INV->set_items ($self->{container}{$self->{player}{tag}})
1523 } else {
1524 $INVR->set_items ($self->{container}{0});
1525 }
1439 } 1526 }
1440} 1527}
1441 1528
1442sub conn::item_update { 1529sub conn::item_update {
1443 my ($self, $item) = @_; 1530 my ($self, $item) = @_;
1444 1531
1445 update_floorbox if $item->{container} == 0; 1532 if ($item->{container} == 0) {
1446 1533 update_floorbox;
1534 $INVR->set_items ($self->{container}{0});
1535 } elsif ($item->{container} == $self->{player}{tag}) {
1447 $INV->set_items ($self->{container}{$item->{container}}) 1536 $INV->set_items ($self->{container}{$item->{container}})
1448 if $item->{container} == $self->{player}{tag}; 1537 }
1449} 1538}
1450 1539
1451%SDL_CB = ( 1540%SDL_CB = (
1452 CFClient::SDL_QUIT => sub { 1541 CFClient::SDL_QUIT => sub {
1453 Event::unloop -1; 1542 Event::unloop -1;
1552 $FONT_FIXED = new_from_file CFClient::Font $fonts[1]; 1641 $FONT_FIXED = new_from_file CFClient::Font $fonts[1];
1553 1642
1554 $FONT_PROP->make_default; 1643 $FONT_PROP->make_default;
1555 } 1644 }
1556 1645
1646# compare mono (ft) vs. rgba (cairo)
1647# ft - 1.8s, cairo 3s, even in alpha-only mode
1648# for my $rgba (0..1) {
1649# my $t1 = Time::HiRes::time;
1650# for (1..1000) {
1651# my $layout = CFClient::Layout->new ($rgba);
1652# $layout->set_text ("hallo" x 100);
1653# $layout->render;
1654# }
1655# my $t2 = Time::HiRes::time;
1656# warn $t2-$t1;
1657# }
1658
1557 video_init; 1659 video_init;
1558 audio_init; 1660 audio_init;
1559} 1661}
1560 1662
1561Event::loop; 1663Event::loop;

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines