… | |
… | |
19 | use CFClient::UI; |
19 | use CFClient::UI; |
20 | |
20 | |
21 | our $VERSION = '0.1'; |
21 | our $VERSION = '0.1'; |
22 | |
22 | |
23 | my $MAX_FPS = 60; |
23 | my $MAX_FPS = 60; |
24 | my $MIN_FPS = 5; # unused |
24 | my $MIN_FPS = 5; # unused as of yet |
25 | |
25 | |
26 | our $FACECACHE; |
26 | our $FACECACHE; |
27 | |
27 | |
28 | our $LAST_REFRESH; |
28 | our $LAST_REFRESH; |
29 | our $NOW; |
29 | our $NOW; |
… | |
… | |
107 | $table->add (1, 1, new CFClient::UI::CheckBox state => $CFG->{fullscreen}, connect_changed => sub { |
107 | $table->add (1, 1, new CFClient::UI::CheckBox state => $CFG->{fullscreen}, connect_changed => sub { |
108 | my ($self, $value) = @_; |
108 | my ($self, $value) = @_; |
109 | $CFG->{fullscreen} = $value; |
109 | $CFG->{fullscreen} = $value; |
110 | }); |
110 | }); |
111 | |
111 | |
|
|
112 | $table->add (0, 2, new CFClient::UI::Label align => 1, text => "Fast & Ugly"); |
|
|
113 | $table->add (1, 2, new CFClient::UI::CheckBox state => $CFG->{fast}, connect_changed => sub { |
|
|
114 | my ($self, $value) = @_; |
|
|
115 | $CFG->{fast} = $value; |
|
|
116 | }); |
|
|
117 | |
|
|
118 | $table->add (0, 2, new CFClient::UI::Label align => 1, text => "Fog of War"); |
|
|
119 | $table->add (1, 2, new CFClient::UI::Slider range => [$CFG->{fow_intensity}, 0, 1 + 0.001, 0.001], connect_changed => sub { |
|
|
120 | my ($self, $value) = @_; |
|
|
121 | $CFG->{fow_intensity} = $value; |
|
|
122 | }); |
|
|
123 | |
112 | $table->add (1, 2, new CFClient::UI::Button expand => 1, align => 0, text => "Apply", connect_activate => sub { |
124 | $table->add (1, 4, new CFClient::UI::Button expand => 1, align => 0, text => "Apply", connect_activate => sub { |
113 | destroy_screen (); |
125 | destroy_screen (); |
114 | init_screen (); |
126 | init_screen (); |
115 | }); |
127 | }); |
116 | |
128 | |
117 | $vbox->add (new CFClient::UI::Label align => 0, text => "Server"); |
129 | $vbox->add (new CFClient::UI::Label align => 0, text => "Server Setup"); |
118 | $vbox->add (my $table = new CFClient::UI::Table expand => 1, col_expand => [0, 1]); |
130 | $vbox->add (my $table = new CFClient::UI::Table expand => 1, col_expand => [0, 1]); |
119 | $table->add (0, 2, new CFClient::UI::Label align => 1, text => "Host"); |
131 | $table->add (0, 2, new CFClient::UI::Label align => 1, text => "Host"); |
120 | $table->add (1, 2, my $host = new CFClient::UI::Entry text => $CFG->{host}); |
132 | $table->add (1, 2, my $host = new CFClient::UI::Entry text => $CFG->{host}); |
121 | |
133 | |
122 | $table->add (0, 3, new CFClient::UI::Label align => 1, text => "Port"); |
134 | $table->add (0, 3, new CFClient::UI::Label align => 1, text => "Port"); |
… | |
… | |
150 | status "Configuration Saved"; |
162 | status "Configuration Saved"; |
151 | }); |
163 | }); |
152 | $CFClient::UI::TOPLEVEL->add ($dialog); |
164 | $CFClient::UI::TOPLEVEL->add ($dialog); |
153 | } |
165 | } |
154 | |
166 | |
|
|
167 | sub sdl_init { |
|
|
168 | SDL::Init SDL_INIT_TIMER | SDL_INIT_AUDIO | SDL_INIT_VIDEO |
|
|
169 | and die "SDL::Init failed!\n"; |
|
|
170 | } |
|
|
171 | |
155 | sub init_screen { |
172 | sub init_screen { |
|
|
173 | sdl_init; |
|
|
174 | |
156 | ($WIDTH, $HEIGHT) = @{ $SDL_MODES[$CFG->{sdl_mode}] }; |
175 | ($WIDTH, $HEIGHT) = @{ $SDL_MODES[$CFG->{sdl_mode}] }; |
157 | $FULLSCREEN = $CFG->{fullscreen}; |
176 | $FULLSCREEN = $CFG->{fullscreen}; |
|
|
177 | $FAST = $CFG->{fast}; |
158 | |
178 | |
159 | SDL::GLSetAttribute SDL_GL_RED_SIZE, 5; |
179 | SDL::GLSetAttribute SDL_GL_RED_SIZE, 5; |
160 | SDL::GLSetAttribute SDL_GL_GREEN_SIZE, 5; |
180 | SDL::GLSetAttribute SDL_GL_GREEN_SIZE, 5; |
161 | SDL::GLSetAttribute SDL_GL_BLUE_SIZE, 5; |
181 | SDL::GLSetAttribute SDL_GL_BLUE_SIZE, 5; |
162 | SDL::GLSetAttribute SDL_GL_ALPHA_SIZE, 0; |
182 | SDL::GLSetAttribute SDL_GL_ALPHA_SIZE, 0; |
… | |
… | |
240 | glLoadIdentity; |
260 | glLoadIdentity; |
241 | glOrtho 0, $WIDTH, $HEIGHT, 0, -10000 , 10000; |
261 | glOrtho 0, $WIDTH, $HEIGHT, 0, -10000 , 10000; |
242 | glMatrixMode GL_MODELVIEW; |
262 | glMatrixMode GL_MODELVIEW; |
243 | glLoadIdentity; |
263 | glLoadIdentity; |
244 | |
264 | |
|
|
265 | glClearColor +($CFG->{fow_intensity}) x 3, 1; |
245 | glClear GL_COLOR_BUFFER_BIT; |
266 | glClear GL_COLOR_BUFFER_BIT; |
246 | |
267 | |
247 | $CFClient::UI::TOPLEVEL->draw; |
268 | $CFClient::UI::TOPLEVEL->draw; |
248 | |
269 | |
249 | SDL::GLSwapBuffers; |
270 | SDL::GLSwapBuffers; |
… | |
… | |
282 | my ($widget) = @_; |
303 | my ($widget) = @_; |
283 | delete $animate_object{$widget}; |
304 | delete $animate_object{$widget}; |
284 | } |
305 | } |
285 | |
306 | |
286 | @conn::ISA = Crossfire::Protocol::; |
307 | @conn::ISA = Crossfire::Protocol::; |
|
|
308 | |
|
|
309 | sub conn::user_send { |
|
|
310 | my ($self, $command) = @_; |
|
|
311 | |
|
|
312 | $self->send ($command); |
|
|
313 | status $command; |
|
|
314 | } |
287 | |
315 | |
288 | sub conn::map_update { |
316 | sub conn::map_update { |
289 | my ($self, $dirty) = @_; |
317 | my ($self, $dirty) = @_; |
290 | |
318 | |
291 | $MAPWIDGET->update; |
319 | $MAPWIDGET->update; |
… | |
… | |
361 | |
389 | |
362 | ############################################################################# |
390 | ############################################################################# |
363 | |
391 | |
364 | CFClient::read_cfg "$Crossfire::VARDIR/pclientrc"; |
392 | CFClient::read_cfg "$Crossfire::VARDIR/pclientrc"; |
365 | |
393 | |
366 | $CFG ||= { |
394 | my %DEF_CFG = ( |
367 | width => 640, |
395 | width => 640, |
368 | height => 480, |
396 | height => 480, |
|
|
397 | fast => 0, |
|
|
398 | fow_intensity => 0.45, |
369 | fullscreen => 0, |
399 | fullscreen => 0, |
370 | sdl_mode => 0, |
400 | sdl_mode => 0, |
371 | mapsize => 100, |
401 | mapsize => 100, |
372 | host => "crossfire.schmorp.de", |
402 | host => "crossfire.schmorp.de", |
373 | port => 13327, |
403 | port => 13327, |
374 | }; |
404 | ); |
375 | |
405 | |
376 | SDL::Init SDL_INIT_TIMER | SDL_INIT_AUDIO | SDL_INIT_VIDEO |
406 | while (my ($k, $v) = each %DEF_CFG) { |
377 | and die "SDL::Init failed!\n"; |
407 | $CFG->{$k} = $v unless exists $CFG->{$k}; |
|
|
408 | } |
|
|
409 | |
|
|
410 | sdl_init; |
378 | |
411 | |
379 | @SDL_MODES = reverse map [SDL::RectW ($_), SDL::RectH ($_)], |
412 | @SDL_MODES = reverse map [SDL::RectW ($_), SDL::RectH ($_)], |
380 | @{ SDL::ListModes 0, SDL_FULLSCREEN | SDL_HWSURFACE | SDL_OPENGL }; |
413 | @{ SDL::ListModes 0, SDL_FULLSCREEN | SDL_HWSURFACE | SDL_OPENGL }; |
381 | |
414 | |
|
|
415 | @SDL_MODES or CFClient::fatal "Unable to find a usable video mode\n(hardware accelerated opengl fullscreen)"; |
|
|
416 | |
|
|
417 | $CFG->{sdl_mode} = 0 if $CFG->{sdl_mode} > @SDL_MODES; |
|
|
418 | |
382 | init_screen; |
419 | init_screen; |
383 | |
420 | |
384 | { |
421 | { |
385 | my @fonts = map CFClient::find_rcfile $_, qw(uifont.ttf uifontb.ttf uifonti.ttf uifontbi.ttf); |
422 | my @fonts = map CFClient::find_rcfile $_, qw(uifont.ttf uifontb.ttf uifonti.ttf uifontbi.ttf); |
386 | |
423 | |