--- deliantra/Deliantra-Client/bin/pclient 2006/05/15 00:15:08 1.215 +++ deliantra/Deliantra-Client/bin/pclient 2006/05/17 01:03:10 1.221 @@ -101,6 +101,8 @@ our $INVWIN; our $INV; +our $INVR; +our $OPENCONT; sub status { $STATUSBOX->add ($_[0], pri => -10, group => "status", timeout => 20, fg => [1, 1, 0, 1]); @@ -166,7 +168,7 @@ $table->add (0, 0, new CFClient::UI::Label valign => 0, align => 1, text => "Video Mode"); $table->add (1, 0, my $hbox = new CFClient::UI::HBox); - $hbox->add (my $mode_slider = new CFClient::UI::Slider expand => 1, req_w => 100, range => [$CFG->{sdl_mode}, 0, scalar @SDL_MODES, 1]); + $hbox->add (my $mode_slider = new CFClient::UI::Slider expand => 1, req_w => 100, range => [$CFG->{sdl_mode}, 0, $#SDL_MODES, 1, 1]); $hbox->add (my $mode_label = new CFClient::UI::Label align => 0, valign => 0, height => 0.8, template => "9999x9999"); $mode_slider->connect (changed => sub { @@ -201,11 +203,11 @@ $table->add (0, $row, new CFClient::UI::Label valign => 0, align => 1, text => "Map Scale"); $table->add (1, $row++, new CFClient::UI::Slider - range => [$CFG->{map_scale}, 0.25, 2, 0.05], + range => [$CFG->{map_scale}, 0.25, 2, 0.05, 0.05], tooltip => "Enlarge or shrink the displayed map", connect_changed => sub { my ($self, $value) = @_; - $CFG->{map_scale} = 0.05 * int $value / 0.05; + $CFG->{map_scale} = $value; } ); @@ -242,30 +244,25 @@ $table->add (0, $row, new CFClient::UI::Label valign => 0, align => 1, text => "GUI Fontsize"); $table->add (1, $row++, new CFClient::UI::Slider - range => [$CFG->{gui_fontsize}, 0.5, 2, 0.1], + range => [$CFG->{gui_fontsize}, 0.5, 2, 0.1, 0.1], tooltip => "The font size used by most GUI elements", - connect_changed => sub { - $CFG->{gui_fontsize} = 0.1 * int $_[1] * 10; -# $FONTSIZE = int $HEIGHT / 40 * $CFG->{gui_fontsize}; - } + connect_changed => sub { $CFG->{gui_fontsize} = $_[1] }, ); $table->add (0, $row, new CFClient::UI::Label valign => 0, align => 1, text => "Server Log Fontsize"); $table->add (1, $row++, new CFClient::UI::Slider - range => [$CFG->{log_fontsize}, 0.5, 2, 0.1], + range => [$CFG->{log_fontsize}, 0.5, 2, 0.1, 0.1], tooltip => "The font size used by the server log window only", - connect_changed => sub { - $LOGVIEW->set_fontsize ($CFG->{log_fontsize} = 0.1 * int $_[1] * 10); - } + connect_changed => sub { $LOGVIEW->set_fontsize ($CFG->{log_fontsize} = $_[1]) }, ); $table->add (0, $row, new CFClient::UI::Label valign => 0, align => 1, text => "Stats Fontsize"); $table->add (1, $row++, new CFClient::UI::Slider - range => [$CFG->{stat_fontsize}, 0.5, 2, 0.1], + range => [$CFG->{stat_fontsize}, 0.5, 2, 0.1, 0.1], tooltip => "The font size used by the statistics window only", connect_changed => sub { - $CFG->{stat_fontsize} = 0.1 * int $_[1] * 10; + $CFG->{stat_fontsize} = $_[1]; &set_stats_window_fontsize; } ); @@ -276,18 +273,16 @@ tooltip => "Adjust the size of the stats gauges at the bottom right", connect_changed => sub { $CFG->{gauge_size} = $_[1]; - my $h = int $HEIGHT * $CFG->{gauge_size}; - $GAUGES->{win}->set_size ($WIDTH, $h); - $GAUGES->{win}->move (0, $HEIGHT - $h); + $GAUGES->{win}->set_size ($WIDTH, int $HEIGHT * $CFG->{gauge_size}); } ); $table->add (0, $row, new CFClient::UI::Label valign => 0, align => 1, text => "Gauge fontsize"); $table->add (1, $row++, new CFClient::UI::Slider - range => [$CFG->{gauge_fontsize}, 0.5, 2.0, 0.1], + range => [$CFG->{gauge_fontsize}, 0.5, 2.0, 0.1, 0.1], tooltip => "Adjusts the fontsize of the gauges at the bottom right", connect_changed => sub { - $CFG->{gauge_fontsize} = 0.1 * int $_[1] * 10; + $CFG->{gauge_fontsize} = $_[1]; &set_gauge_window_fontsize; } ); @@ -738,7 +733,7 @@ $table->add (0, 7, new CFClient::UI::Label valign => 0, align => 1, text => "Map Size"); $table->add (1, 7, new CFClient::UI::Slider req_w => 100, - range => [$CFG->{mapsize}, 10, 100 + 1, 1], + range => [$CFG->{mapsize}, 10, 100 + 1, 1, 1], tooltip => "This is the size of the portion of the map update the server sends you. " ."If you set this to a high value you will be able to see further for example.", connect_changed => sub { @@ -816,8 +811,13 @@ } sub make_inventory_window { - my $invwin = new CFClient::UI::FancyFrame user_w => 300, user_h => 300, title => "Inventory"; - $invwin->add ($INV = new CFClient::UI::Inventory expand => 1); + my $invwin = new CFClient::UI::FancyFrame + user_w => $WIDTH * (4/5), user_h => $HEIGHT * (4/5), title => "Inventory"; + + $invwin->add (my $hb = new CFClient::UI::HBox); + $hb->add ($INV = new CFClient::UI::Inventory expand => 1); + $hb->add ($INVR = new CFClient::UI::Inventory expand => 1); + $invwin } @@ -1332,7 +1332,7 @@ my $time = sprintf "%02d:%02d:%02d", (localtime time)[2,1,0]; - $text =~ s/&/&/g; $text =~ s/\1<\/b>/g; $text =~ s/\[color=(.*?)\](.*?)\[\/color\]/\2<\/span>/g; @@ -1369,18 +1369,88 @@ sub conn::addme_success { my ($self) = @_; + $MAPWIDGET->clr_commands; + for my $skill (values %{$self->{skill_info}}) { $MAPWIDGET->add_command ("ready_skill $skill", "Ready the skill '$skill'"); $MAPWIDGET->add_command ("use_skill $skill", "Immediately use the skill '$skill'"); } - $MAPWIDGET->add_command ("pet\\_mode defend", "Tell pets to stay close to you and defend you"); - $MAPWIDGET->add_command ("pet\\_mode arena", "Same as petmode attack, but also attack other players"); - $MAPWIDGET->add_command ("pet\\_mode sad", "Search & Destroy - tell pets to roam about and attack enemies"); - $MAPWIDGET->add_command ("kill\\_pets", "kill your pets"); + $MAPWIDGET->add_command ("petmode defend", "Tell pets to stay close to you and defend you"); + $MAPWIDGET->add_command ("petmode arena", "Same as petmode sad, but also attack other players"); + $MAPWIDGET->add_command ("petmode sad", "Search & Destroy - tell pets to roam about and attack enemies"); + $MAPWIDGET->add_command ("killpets", "Kill your pets"); + $MAPWIDGET->add_command ("chat", "chat TEXT\nChat with all other players"); + $MAPWIDGET->add_command ("shout", "shout TEXT\nShout loudly, used for emergencies"); + $MAPWIDGET->add_command ("tell", "tell USERNAME TEXT\nPrivately tell a specific player"); + + # TODO: add documentation on these + for (qw( + afk + apply + body + bowmode + brace + build + disarm + dm + dmhide + drop + dropall + examine + get + gsay + help + hiscore + inventory + invoke + killpets + listen + logs + mapinfo + maps + mark + motd + output-count + output-sync + party + peaceful + petmode + pickup + players + prepare + quests + rename + resistances + rotateshoottype + save + say + search + search-items + showpets + skills + sound + take + throw + time + title + usekeys + version + weather + whereabouts + whereami + who + wimpy + )) { + $MAPWIDGET->add_command ($_, "$_: no help available (yet)"); + } + + #TODO: add " and ' "aliases" etc. } sub conn::eof { + $MAPWIDGET->clr_commands; + stop_game; } @@ -1408,10 +1478,16 @@ sub conn::container_add { my ($self, $tag, $items) = @_; - update_floorbox if $tag == 0; - - $INV->set_items ($self->{container}{$self->{player}{tag}}) - if $tag == $self->{player}{tag}; + if ($tag == 0) { + update_floorbox; + $INVR->set_items ($self->{container}{0}); + $OPENCONT = 0; + } elsif ($tag == $self->{player}{tag}) { + $INV->set_items ($self->{container}{$self->{player}{tag}}) + } else { + $OPENCONT = $tag; + $INVR->set_items ($self->{container}{$tag}); + } # $self-<{player}{tag} => player inv #use PApp::Util; warn PApp::Util::dumpval $self->{container}{$self->{player}{tag}}; @@ -1420,10 +1496,16 @@ sub conn::container_clear { my ($self, $tag) = @_; - update_floorbox if $tag == 0; - - $INV->set_items ($self->{container}{$tag}) - if $tag == $self->{player}{tag}; + if ($tag == 0) { + update_floorbox; + $INVR->set_items ($self->{container}{0}); + $OPENCONT = 0; + } elsif ($tag == $self->{player}{tag}) { + $INV->set_items ($self->{container}{$tag}) + } else { + $INVR->set_items ($self->{container}{$tag}); + $OPENCONT = $tag; + } # use PApp::Util; warn PApp::Util::dumpval $self->{container}{0}; } @@ -1432,20 +1514,26 @@ my ($self, @items) = @_; for (@items) { - update_floorbox if $_->{container} == 0; - - $INV->set_items ($self->{container}{$_->{container}}) - if $_->{container} == $self->{player}{tag}; + if ($_->{container} == 0) { + update_floorbox; + $INVR->set_items ($self->{container}{0}); + } elsif ($_->{container} == $self->{player}{tag}) { + $INV->set_items ($self->{container}{$self->{player}{tag}}) + } else { + $INVR->set_items ($self->{container}{0}); + } } } sub conn::item_update { my ($self, $item) = @_; - update_floorbox if $item->{container} == 0; - - $INV->set_items ($self->{container}{$item->{container}}) - if $item->{container} == $self->{player}{tag}; + if ($item->{container} == 0) { + update_floorbox; + $INVR->set_items ($self->{container}{0}); + } elsif ($item->{container} == $self->{player}{tag}) { + $INV->set_items ($self->{container}{$item->{container}}) + } } %SDL_CB = ( @@ -1554,6 +1642,19 @@ $FONT_PROP->make_default; } +# compare mono (ft) vs. rgba (cairo) +# ft - 1.8s, cairo 3s, even in alpha-only mode +# for my $rgba (0..1) { +# my $t1 = Time::HiRes::time; +# for (1..1000) { +# my $layout = CFClient::Layout->new ($rgba); +# $layout->set_text ("hallo" x 100); +# $layout->render; +# } +# my $t2 = Time::HiRes::time; +# warn $t2-$t1; +# } + video_init; audio_init; }