--- deliantra/Deliantra-Client/bin/pclient 2006/04/12 21:35:11 1.90 +++ deliantra/Deliantra-Client/bin/pclient 2006/04/14 00:15:52 1.98 @@ -37,6 +37,7 @@ our $HEIGHT; our $FULLSCREEN; +our $MAP; our $MAPWIDGET; our $FONTSIZE; @@ -47,6 +48,7 @@ our $ALT_ENTER_MESSAGE; our $STATUS_LINE; our $DEBUG_STATUS; +our $BUTTONBAR; sub status { $STATUS_LINE->set_text ($_[0]); @@ -65,6 +67,8 @@ my $mapsize = List::Util::min 64, List::Util::max 11, int $WIDTH * $CFG->{mapsize} * 0.01 / 32; + $MAP = new CFClient::Map $mapsize, $mapsize; + $CONN = new conn host => $CFG->{host}, port => $CFG->{port}, @@ -115,13 +119,25 @@ $CFG->{fast} = $value; }); - $table->add (0, 2, new CFClient::UI::Label align => 1, text => "Fog of War"); - $table->add (1, 2, new CFClient::UI::Slider range => [$CFG->{fow_intensity}, 0, 1 + 0.001, 0.001], connect_changed => sub { + $table->add (0, 3, new CFClient::UI::Label align => 1, text => "Fog of War"); + $table->add (1, 3, new CFClient::UI::CheckBox state => $CFG->{fow_enable}, connect_changed => sub { + my ($self, $value) = @_; + $CFG->{fow_enable} = $value; + }); + + $table->add (0, 4, new CFClient::UI::Label align => 1, text => "FoW Intensity"); + $table->add (1, 4, new CFClient::UI::Slider range => [$CFG->{fow_intensity}, 0, 1 + 0.001, 0.001], connect_changed => sub { my ($self, $value) = @_; $CFG->{fow_intensity} = $value; }); - $table->add (1, 4, new CFClient::UI::Button expand => 1, align => 0, text => "Apply", connect_activate => sub { + $table->add (0, 5, new CFClient::UI::Label align => 1, text => "FoW Smooth"); + $table->add (1, 5, new CFClient::UI::CheckBox state => $CFG->{fow_smooth}, connect_changed => sub { + my ($self, $value) = @_; + $CFG->{fow_smooth} = $value; + }); + + $table->add (1, 6, new CFClient::UI::Button expand => 1, align => 0, text => "Apply", connect_activate => sub { destroy_screen (); init_screen (); }); @@ -161,11 +177,12 @@ CFClient::write_cfg "$Crossfire::VARDIR/pclientrc"; status "Configuration Saved"; }); - $CFClient::UI::TOPLEVEL->add ($dialog); + + $dialog } sub sdl_init { - SDL::Init SDL_INIT_TIMER | SDL_INIT_AUDIO | SDL_INIT_VIDEO + SDL::Init SDL_INIT_AUDIO | SDL_INIT_VIDEO | SDL_INIT_NOPARACHUTE and die "SDL::Init failed!\n"; } @@ -225,11 +242,12 @@ text => "Use Alt-Enter to toggle fullscreen mode"; $CFClient::UI::TOPLEVEL->add ($ALT_ENTER_MESSAGE); - $MAPWIDGET = new CFClient::UI::MapWidget; - $CFClient::UI::TOPLEVEL->add ($MAPWIDGET); + $CFClient::UI::TOPLEVEL->add ($MAPWIDGET = new CFClient::UI::MapWidget); $MAPWIDGET->focus_in; - config_dialog; + $CFClient::UI::TOPLEVEL->add ($BUTTONBAR = new CFClient::UI::HBox); + + $BUTTONBAR->add (my $setup = new CFClient::UI::Flopper x => 0, y => 0, text => "Setup", other => config_dialog, state => 1); } sub destroy_screen { @@ -313,21 +331,27 @@ status $command; } -sub conn::map_update { - my ($self, $dirty) = @_; +sub conn::feed_map1a { + my ($self, $data) = @_; +# $self->Crossfire::Protocol::feed_map1a ($data); + + $MAP->scroll (delete $self->{delayed_scroll_x}, delete $self->{delayed_scroll_y}); + $MAP->map1a_update ($data); $MAPWIDGET->update; } -sub conn::map_scroll { - my ($self, $dx, $dy) = @_; - -# refresh; -} +#sub conn::map_update { +# my ($self, $dirty) = @_; +# +# $MAPWIDGET->update; +#} sub conn::map_clear { my ($self) = @_; + $MAP->clear; + # refresh; } @@ -338,11 +362,14 @@ } sub conn::face_update { - my ($self, $face) = @_; + my ($self, $facenum, $face) = @_; $FACECACHE->{"$face->{chksum},$face->{name}"} = $face->{image}; - $face->{texture} = new_from_image CFClient::Texture delete $face->{image}; + my $tex = $face->{texture} = new_from_image CFClient::Texture delete $face->{image}; + + $MAP->set_texture ($facenum, @$tex{qw(name w h s t)}); + $MAPWIDGET->update; } sub conn::query { @@ -395,7 +422,9 @@ width => 640, height => 480, fast => 0, + fow_enable => 1, fow_intensity => 0.45, + fow_smooth => 0, fullscreen => 0, sdl_mode => 0, mapsize => 100, @@ -409,8 +438,10 @@ sdl_init; -@SDL_MODES = reverse map [SDL::RectW ($_), SDL::RectH ($_)], - @{ SDL::ListModes 0, SDL_FULLSCREEN | SDL_HWSURFACE | SDL_OPENGL }; +@SDL_MODES = reverse + grep $_->[0] >= 640 && $_->[1] >= 480, + map [SDL::RectW ($_), SDL::RectH ($_)], + @{ SDL::ListModes 0, SDL_FULLSCREEN | SDL_HWSURFACE | SDL_OPENGL }; @SDL_MODES or CFClient::fatal "Unable to find a usable video mode\n(hardware accelerated opengl fullscreen)";