~ubuntu-branches/ubuntu/maverick/btanks/maverick

« back to all changes in this revision

Viewing changes to engine/menu/options_menu.cpp

  • Committer: Bazaar Package Importer
  • Author(s): Ansgar Burchardt
  • Date: 2010-01-17 00:02:57 UTC
  • mfrom: (4.2.2 squeeze)
  • Revision ID: james.westby@ubuntu.com-20100117000257-iw6esnvsz1rvp6kb
Tags: 0.9.8083-2
* Fix build failure when building only arch-specific package.
* debian/control: Add DM-Upload-Allowed: yes.

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
1
 
2
2
/* Battle Tanks Game
3
 
 * Copyright (C) 2006-2008 Battle Tanks team
 
3
 * Copyright (C) 2006-2009 Battle Tanks team
4
4
 *
5
5
 * This program is free software; you can redistribute it and/or
6
6
 * modify it under the terms of the GNU General Public License
30
30
#include "chooser.h"
31
31
#include "menu.h"
32
32
#include "control_picker.h"
 
33
#include "simple_gamepad_setup.h"
33
34
#include "i18n.h"
34
35
#include "label.h"
35
36
#include "slider.h"
37
38
#include "checkbox.h"
38
39
#include "sound/mixer.h"
39
40
#include "redefine_keys.h"
40
 
#include "gamepad_setup.h"
41
41
#include "player_manager.h"
42
42
#include "game_monitor.h"
43
43
#include "window.h"
 
44
#include "game.h"
 
45
#include "sdlx/joystick.h"
44
46
 
45
 
OptionsMenu::OptionsMenu(MainMenu *parent, const int w, const int h) : _parent(parent), _shoot(0.5f, false) {
 
47
OptionsMenu::OptionsMenu(const int w, const int h) : _shoot(0.5f, false), _gamepad(NULL) {
46
48
        Mixer->loadSample("shot.ogg");
 
49
        bool has_gamepad = sdlx::Joystick::getCount() > 0;
47
50
        
48
51
        _background.init("menu/background_box.png", w - 100, h - 100);
49
52
        int bw, bh;
54
57
        _by = ( h - _background.h ) / 2;
55
58
        int base_x = _bx + 3 * _background.w / 4;
56
59
 
57
 
        _b_back = new Button("medium_dark", I18n->get("menu", "back"));
58
 
        _b_back->get_size(bw, bh);
59
 
 
60
 
        add(_bx + mx + _background.w / 4 - bw / 2, h -  my - bh - _by, _b_back);
61
 
        
62
60
        _b_ok = new Button("medium_dark", I18n->get("menu", "ok"));
63
61
        _b_ok->get_size(bw, bh);
64
62
        add(_by + my + 3 * _background.w / 4 - bw / 2, h -  my - bh - _by, _b_ok);
65
 
        
 
63
 
 
64
        _b_revert = new Button("medium_dark", I18n->get("menu", "revert-to-defaults"));
 
65
        _b_revert->get_size(bw, bh);
 
66
        add(_by + my + _background.w / 4 - bw / 2, h -  my - bh - _by, _b_revert);
 
67
 
66
68
        int width = _background.w - 2 * mx;
67
69
 
68
70
        int sw, sh;
83
85
        add(_bx + base_x - sw / 2, yp, _lang);
84
86
        yp += sh + 10;
85
87
 
86
 
        sp = new ControlPicker(width, "medium", I18n->get("menu", "single-player"), "player.control-method", "keys", std::string());
 
88
        sp = new ControlPicker(width, "medium", I18n->get("menu", "single-player"), "control-method", "keys", std::string());
87
89
        sp->get_size(sw, sh);
88
90
        add(_bx + mx, yp, sp);
89
91
        yp += sh;
90
92
 
91
 
        sp1 = new ControlPicker(width, "medium", I18n->get("menu", "split-player-1"), "player.control-method-1", "keys-1", "split");
 
93
        sp1 = new ControlPicker(width, "medium", I18n->get("menu", "split-player-1"), "control-method-1", "keys-1", "split");
92
94
        sp1->get_size(sw, sh);
93
95
        add(_bx + mx, yp, sp1);
94
96
        yp += sh;
95
97
 
96
 
        sp2 = new ControlPicker(width, "medium", I18n->get("menu", "split-player-2"), "player.control-method-2", "keys-2", "split");
 
98
        sp2 = new ControlPicker(width, "medium", I18n->get("menu", "split-player-2"), "control-method-2", "keys-2", "split");
97
99
        sp2->get_size(sw, sh);
98
100
        add(_bx + mx, yp, sp2);
99
101
        yp += sh;
101
103
        
102
104
        _b_redefine = new Button("medium_dark", I18n->get("menu", "redefine-keys"));
103
105
        _b_redefine->get_size(sw, sh);
104
 
        add((w - sw) / 2, yp + 6, _b_redefine);
 
106
        add(has_gamepad? w / 2 - sw - my: (w - sw) / 2, yp + 6, _b_redefine);
 
107
 
 
108
        if (has_gamepad) {
 
109
                _b_setup_gamepad = new Button("medium_dark", I18n->get("menu", "setup-gamepad"));
 
110
                _b_setup_gamepad->get_size(sw, sh);
 
111
                add(w / 2, yp + 6, _b_setup_gamepad);
 
112
        } else {
 
113
                _b_setup_gamepad = NULL;
 
114
        }
105
115
 
106
116
        yp += sh + 20;
107
117
        //volume controls 
126
136
 
127
137
////////////////////
128
138
 
129
 
        Config->get("engine.sound.volume.fx", volume, 1.0f);
 
139
        Config->get("engine.sound.volume.fx", volume, 0.66f);
130
140
        
131
141
        l = new Label("medium", I18n->get("menu", "fx-volume"));
132
142
        s = _fx = new Slider(volume);
194
204
 
195
205
        TRY {
196
206
                _c_res->set(mrt::format_string("%dx%d", screen_w, screen_h));
197
 
        } CATCH("default resolution setup", );
 
207
        } CATCH("default resolution setup", {});
198
208
 
199
209
        l = new Label("medium", I18n->get("menu", "fullscreen-mode"));
200
210
        add(_bx + mx, yp, l);
246
256
        add((w - sw) / 2, (h - sh) / 2, _keys);
247
257
        _keys->hide();
248
258
        
249
 
        _gamepad = new GamepadSetup(w, h);
250
 
        _gamepad->get_size(sw, sh);
251
 
        add((w - sw) / 2, (h - sh) / 2, _gamepad);
252
 
        _gamepad->hide();
253
 
        
254
 
 
255
 
        
256
 
        reload();
 
259
        if (has_gamepad) {
 
260
                _gamepad = new SimpleGamepadSetup();
 
261
                _gamepad->get_size(sw, sh);
 
262
        
 
263
                add((w - sw) / 2, (h - sh) / 2, _gamepad);
 
264
                _gamepad->hide();
 
265
        }
 
266
                
 
267
        load();
257
268
}
258
269
 
259
270
void OptionsMenu::get_size(int &w, int &h) const {
261
272
        h = _background.h;
262
273
}
263
274
 
264
 
void OptionsMenu::reload() {
265
 
        LOG_DEBUG(("reloading options..."));
 
275
void OptionsMenu::revert_to_defaults() {
 
276
        Config->remove("engine.sound.volume.music");
 
277
        Config->remove("engine.sound.volume.fx");
 
278
        Config->remove("engine.sound.volume.ambience");
 
279
        Config->remove("engine.language");
 
280
        Config->remove("engine.window.width");
 
281
        Config->remove("engine.window.height");
 
282
        Config->remove("engine.window.fullscreen");
 
283
        Config->remove("engine.donate-screen-duration");
 
284
        Config->remove("engine.fog-of-war.enabled");
 
285
        load();
 
286
}
 
287
 
 
288
void OptionsMenu::load() {
 
289
        LOG_DEBUG(("loading options..."));
266
290
        sp->reload();
267
291
        sp1->reload();
268
292
        sp2->reload();
271
295
        Config->get("engine.sound.volume.music", volume, 1.0f);
272
296
        _music->set(volume);
273
297
 
274
 
        Config->get("engine.sound.volume.fx", volume, 1.0f);
 
298
        Config->get("engine.sound.volume.fx", volume, 0.66f);
275
299
        _fx->set(volume);
276
300
 
277
301
        Config->get("engine.sound.volume.ambience", volume, 0.5f);
278
302
        _ambient->set(volume);
279
303
        
280
 
        _keys->reload();
 
304
        _keys->load();
281
305
        
282
306
        std::string lang;
283
307
        if (Config->has("engine.language"))
301
325
                Config->get("engine.window.width", w, 800);
302
326
                Config->get("engine.window.height", h, 600);
303
327
                _c_res->set(mrt::format_string("%dx%d", w, h));
304
 
        } CATCH("default resolution setup", );
 
328
        } CATCH("default resolution setup", {});
305
329
 
306
330
        bool fs;
307
331
        Config->get("engine.window.fullscreen", fs, false);
351
375
                                Config->remove("engine.language");
352
376
                        need_restart = true;
353
377
                }
354
 
        } CATCH("saving language", );
 
378
        } CATCH("saving language", {});
355
379
        
356
380
        TRY {
357
381
                int screen_w, screen_h;
378
402
                Window->initSDL();
379
403
                Window->createMainWindow();
380
404
        */
381
 
        } CATCH("setting video mode", );
 
405
        } CATCH("setting video mode", {});
382
406
 
383
407
        bool fsmode;
384
408
        Config->get("engine.window.fullscreen", fsmode, false);
401
425
                _fx->reset();
402
426
                Mixer->setFXVolume(_fx->get());
403
427
                if (_shoot.tick(dt)) {
404
 
                        Mixer->setListener(v3<float>(), v3<float>(), 64);
 
428
                        Mixer->set_listener(v3<float>(), v3<float>(), 64);
405
429
                        Mixer->playSample(NULL, "shot.ogg", false);
406
430
                        _shoot.reset();
407
431
                }
414
438
                _ambient->reset();
415
439
                Mixer->setAmbienceVolume(_ambient->get());
416
440
        }
 
441
        if (_b_revert->changed()) {
 
442
                _b_revert->reset();
 
443
                revert_to_defaults();
 
444
        }
417
445
        if (_b_ok->changed()) {
418
446
                _b_ok->reset();
419
 
                _parent->back();
420
447
                save();
421
 
        } else if (_b_back->changed()) {
422
 
                _b_back->reset();
423
 
                _parent->back();
424
 
                reload();
425
 
        }
 
448
                hide();
 
449
        } 
426
450
        if (_b_redefine->changed()) {
427
451
                _b_redefine->reset();
428
452
                _keys->hide(false);
 
453
        } 
 
454
        if (_b_setup_gamepad != NULL && _b_setup_gamepad->changed()) {
 
455
                _b_setup_gamepad->reset();
 
456
                if (_gamepad != NULL) //does not really needed
 
457
                        _gamepad->hide(false);
429
458
        }
430
459
        Container::tick(dt);
431
460
}
443
472
 
444
473
        case SDLK_KP_ENTER:
445
474
        case SDLK_RETURN:
446
 
                _parent->back();
447
 
                save();
448
 
                return true;
449
 
 
450
475
        case SDLK_ESCAPE: 
451
 
                _parent->back();
452
 
                reload();
 
476
                save();
 
477
                hide();
453
478
                return true;
454
479
 
455
480
        case SDLK_j: 
456
481
        case SDLK_g: 
457
 
                if (sdlx::Joystick::getCount() && _keys->hidden()) {
458
 
                        _gamepad->reload();
 
482
                if (_gamepad != NULL && _keys->hidden()) {
459
483
                        _gamepad->hide(false);
460
484
                }
461
485
                        
462
486
                return true;
463
487
 
464
488
        case SDLK_r: 
465
 
                if (_gamepad->hidden())
 
489
                if (_gamepad == NULL || _gamepad->hidden())
466
490
                        _keys->hide(false);
467
491
                return true;
468
492