--- deliantra/Deliantra-Client/bin/pclient 2006/04/12 20:06:37 1.87 +++ deliantra/Deliantra-Client/bin/pclient 2006/04/12 21:35:11 1.90 @@ -21,7 +21,7 @@ our $VERSION = '0.1'; my $MAX_FPS = 60; -my $MIN_FPS = 5; # unused +my $MIN_FPS = 5; # unused as of yet our $FACECACHE; @@ -109,12 +109,24 @@ $CFG->{fullscreen} = $value; }); - $table->add (1, 2, new CFClient::UI::Button expand => 1, align => 0, text => "Apply", connect_activate => sub { + $table->add (0, 2, new CFClient::UI::Label align => 1, text => "Fast & Ugly"); + $table->add (1, 2, new CFClient::UI::CheckBox state => $CFG->{fast}, connect_changed => sub { + my ($self, $value) = @_; + $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 { + my ($self, $value) = @_; + $CFG->{fow_intensity} = $value; + }); + + $table->add (1, 4, new CFClient::UI::Button expand => 1, align => 0, text => "Apply", connect_activate => sub { destroy_screen (); init_screen (); }); - $vbox->add (new CFClient::UI::Label align => 0, text => "Server"); + $vbox->add (new CFClient::UI::Label align => 0, text => "Server Setup"); $vbox->add (my $table = new CFClient::UI::Table expand => 1, col_expand => [0, 1]); $table->add (0, 2, new CFClient::UI::Label align => 1, text => "Host"); $table->add (1, 2, my $host = new CFClient::UI::Entry text => $CFG->{host}); @@ -152,9 +164,17 @@ $CFClient::UI::TOPLEVEL->add ($dialog); } +sub sdl_init { + SDL::Init SDL_INIT_TIMER | SDL_INIT_AUDIO | SDL_INIT_VIDEO + and die "SDL::Init failed!\n"; +} + sub init_screen { + sdl_init; + ($WIDTH, $HEIGHT) = @{ $SDL_MODES[$CFG->{sdl_mode}] }; $FULLSCREEN = $CFG->{fullscreen}; + $FAST = $CFG->{fast}; SDL::GLSetAttribute SDL_GL_RED_SIZE, 5; SDL::GLSetAttribute SDL_GL_GREEN_SIZE, 5; @@ -242,6 +262,7 @@ glMatrixMode GL_MODELVIEW; glLoadIdentity; + glClearColor +($CFG->{fow_intensity}) x 3, 1; glClear GL_COLOR_BUFFER_BIT; $CFClient::UI::TOPLEVEL->draw; @@ -285,6 +306,13 @@ @conn::ISA = Crossfire::Protocol::; +sub conn::user_send { + my ($self, $command) = @_; + + $self->send ($command); + status $command; +} + sub conn::map_update { my ($self, $dirty) = @_; @@ -363,22 +391,31 @@ CFClient::read_cfg "$Crossfire::VARDIR/pclientrc"; -$CFG ||= { - width => 640, - height => 480, - fullscreen => 0, - sdl_mode => 0, - mapsize => 100, - host => "crossfire.schmorp.de", - port => 13327, -}; +my %DEF_CFG = ( + width => 640, + height => 480, + fast => 0, + fow_intensity => 0.45, + fullscreen => 0, + sdl_mode => 0, + mapsize => 100, + host => "crossfire.schmorp.de", + port => 13327, +); + +while (my ($k, $v) = each %DEF_CFG) { + $CFG->{$k} = $v unless exists $CFG->{$k}; +} -SDL::Init SDL_INIT_TIMER | SDL_INIT_AUDIO | SDL_INIT_VIDEO - and die "SDL::Init failed!\n"; +sdl_init; @SDL_MODES = reverse 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)"; + +$CFG->{sdl_mode} = 0 if $CFG->{sdl_mode} > @SDL_MODES; + init_screen; {