--- deliantra/Deliantra-Client/bin/pclient 2006/04/12 21:35:11 1.90 +++ deliantra/Deliantra-Client/bin/pclient 2006/04/13 23:07:58 1.95 @@ -20,7 +20,7 @@ our $VERSION = '0.1'; -my $MAX_FPS = 60; +my $MAX_FPS = 500; my $MIN_FPS = 5; # unused as of yet our $FACECACHE; @@ -37,6 +37,7 @@ our $HEIGHT; our $FULLSCREEN; +our $MAP; our $MAPWIDGET; our $FONTSIZE; @@ -65,6 +66,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 +118,19 @@ $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::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, 4, new CFClient::UI::Label align => 1, text => "Smooth FoW"); + $table->add (1, 4, new CFClient::UI::CheckBox state => $CFG->{fow_smooth}, connect_changed => sub { + my ($self, $value) = @_; + $CFG->{fow_smooth} = $value; + }); + + $table->add (1, 5, new CFClient::UI::Button expand => 1, align => 0, text => "Apply", connect_activate => sub { destroy_screen (); init_screen (); }); @@ -165,7 +174,7 @@ } 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"; } @@ -251,7 +260,7 @@ $fps = $fps * 0.95 + 1 / ($NOW - $LAST_REFRESH) * 0.05; debug sprintf "%3.2f", $fps; - $want_refresh = 0; +# $want_refresh = 0;#d# $can_refresh = 0; glViewport 0, 0, $WIDTH, $HEIGHT; @@ -313,21 +322,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 +353,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 { @@ -396,6 +414,7 @@ height => 480, fast => 0, fow_intensity => 0.45, + fow_smooth => 0, fullscreen => 0, sdl_mode => 0, mapsize => 100, @@ -409,8 +428,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)";