git repos / blockattack-game

blame: source/code/menudef.cpp

normal view · raw

593aeae4 sago007 2011-06-25 22:42 1
/*
593aeae4 sago007 2011-06-25 22:42 2
menudef.cpp
593aeae4 sago007 2011-06-25 22:42 3
Copyright (C) 2011 Poul Sander
593aeae4 sago007 2011-06-25 22:42 4
593aeae4 sago007 2011-06-25 22:42 5
    This program is free software; you can redistribute it and/or modify
593aeae4 sago007 2011-06-25 22:42 6
    it under the terms of the GNU General Public License as published by
593aeae4 sago007 2011-06-25 22:42 7
    the Free Software Foundation; either version 2 of the License, or
593aeae4 sago007 2011-06-25 22:42 8
    (at your option) any later version.
593aeae4 sago007 2011-06-25 22:42 9
593aeae4 sago007 2011-06-25 22:42 10
    This program is distributed in the hope that it will be useful,
593aeae4 sago007 2011-06-25 22:42 11
    but WITHOUT ANY WARRANTY; without even the implied warranty of
593aeae4 sago007 2011-06-25 22:42 12
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
593aeae4 sago007 2011-06-25 22:42 13
    GNU General Public License for more details.
593aeae4 sago007 2011-06-25 22:42 14
593aeae4 sago007 2011-06-25 22:42 15
    You should have received a copy of the GNU General Public License
593aeae4 sago007 2011-06-25 22:42 16
    along with this program; if not, write to the Free Software
593aeae4 sago007 2011-06-25 22:42 17
    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
593aeae4 sago007 2011-06-25 22:42 18
593aeae4 sago007 2011-06-25 22:42 19
    Poul Sander
593aeae4 sago007 2011-06-25 22:42 20
    blockattack@poulsander.com
593aeae4 sago007 2011-06-25 22:42 21
*/
593aeae4 sago007 2011-06-25 22:42 22
26ddb424 sago007 2011-06-09 20:06 23
#include "global.hpp"
26ddb424 sago007 2011-06-09 20:06 24
#include <iostream>
26ddb424 sago007 2011-06-09 20:06 25
#include <stdlib.h>
26ddb424 sago007 2011-06-09 20:06 26
#include "menu/MenuItem.hpp"
26ddb424 sago007 2011-06-09 20:06 27
#include "MenuSystem.h"
c9dd376f sago007 2012-01-20 17:13 28
#include "common.h"
26ddb424 sago007 2011-06-09 20:06 29
26ddb424 sago007 2011-06-09 20:06 30
using namespace std;
26ddb424 sago007 2011-06-09 20:06 31
26ddb424 sago007 2011-06-09 20:06 32
//Menu
26ddb424 sago007 2011-06-09 20:06 33
void PrintHi()
26ddb424 sago007 2011-06-09 20:06 34
{
26ddb424 sago007 2011-06-09 20:06 35
    cout << "Hi" <<endl;
26ddb424 sago007 2011-06-09 20:06 36
}
26ddb424 sago007 2011-06-09 20:06 37
593aeae4 sago007 2011-06-25 22:42 38
//Stores the controls
593aeae4 sago007 2011-06-25 22:42 39
struct control
593aeae4 sago007 2011-06-25 22:42 40
{
593aeae4 sago007 2011-06-25 22:42 41
    SDLKey up;
593aeae4 sago007 2011-06-25 22:42 42
    SDLKey down;
593aeae4 sago007 2011-06-25 22:42 43
    SDLKey left;
593aeae4 sago007 2011-06-25 22:42 44
    SDLKey right;
593aeae4 sago007 2011-06-25 22:42 45
    SDLKey change;
593aeae4 sago007 2011-06-25 22:42 46
    SDLKey push;
593aeae4 sago007 2011-06-25 22:42 47
};
593aeae4 sago007 2011-06-25 22:42 48
26ddb424 sago007 2011-06-09 20:06 49
bool OpenDialogbox(int x, int y, char *name);
26ddb424 sago007 2011-06-09 20:06 50
void OpenScoresDisplay();
593aeae4 sago007 2011-06-25 22:42 51
extern control keySettings[3];
593aeae4 sago007 2011-06-25 22:42 52
593aeae4 sago007 2011-06-25 22:42 53
//Function to return the name of a key, to be displayed...
593aeae4 sago007 2011-06-25 22:42 54
static string getKeyName(SDLKey key)
593aeae4 sago007 2011-06-25 22:42 55
{
593aeae4 sago007 2011-06-25 22:42 56
    string keyname(SDL_GetKeyName(key));
593aeae4 sago007 2011-06-25 22:42 57
    cout << key << " translated to " << keyname << endl;
593aeae4 sago007 2011-06-25 22:42 58
    return keyname;
593aeae4 sago007 2011-06-25 22:42 59
}
593aeae4 sago007 2011-06-25 22:42 60
593aeae4 sago007 2011-06-25 22:42 61
class Button_changekey : public Button {
593aeae4 sago007 2011-06-25 22:42 62
private:
593aeae4 sago007 2011-06-25 22:42 63
   SDLKey *m_key2change; 
593aeae4 sago007 2011-06-25 22:42 64
   string m_keyname;
593aeae4 sago007 2011-06-25 22:42 65
public:
593aeae4 sago007 2011-06-25 22:42 66
    Button_changekey(SDLKey *key, string keyname);
593aeae4 sago007 2011-06-25 22:42 67
    void doAction();
593aeae4 sago007 2011-06-25 22:42 68
};
593aeae4 sago007 2011-06-25 22:42 69
593aeae4 sago007 2011-06-25 22:42 70
Button_changekey::Button_changekey(SDLKey* key, string keyname) {
593aeae4 sago007 2011-06-25 22:42 71
    m_key2change = key;
593aeae4 sago007 2011-06-25 22:42 72
    m_keyname = keyname;
593aeae4 sago007 2011-06-25 22:42 73
    setLabel(m_keyname+" : "+getKeyName(*m_key2change));
593aeae4 sago007 2011-06-25 22:42 74
}
593aeae4 sago007 2011-06-25 22:42 75
593aeae4 sago007 2011-06-25 22:42 76
void Button_changekey::doAction() {
cc3ef158 sago007 2011-07-03 16:13 77
    SDL_Event event;
cc3ef158 sago007 2011-07-03 16:13 78
cc3ef158 sago007 2011-07-03 16:13 79
    bool finnish = false;
cc3ef158 sago007 2011-07-03 16:13 80
    while (!finnish) {
cc3ef158 sago007 2011-07-03 16:13 81
        SDL_Delay(10);
cc3ef158 sago007 2011-07-03 16:13 82
        while ( SDL_PollEvent(&event) )
cc3ef158 sago007 2011-07-03 16:13 83
        {
cc3ef158 sago007 2011-07-03 16:13 84
            if (event.type == SDL_KEYDOWN)
cc3ef158 sago007 2011-07-03 16:13 85
            {
cc3ef158 sago007 2011-07-03 16:13 86
                if (event.key.keysym.sym != SDLK_ESCAPE)
cc3ef158 sago007 2011-07-03 16:13 87
                    *m_key2change = event.key.keysym.sym;
cc3ef158 sago007 2011-07-03 16:13 88
                finnish = true;
cc3ef158 sago007 2011-07-03 16:13 89
            }
cc3ef158 sago007 2011-07-03 16:13 90
        }
cc3ef158 sago007 2011-07-03 16:13 91
    }
593aeae4 sago007 2011-06-25 22:42 92
    setLabel(m_keyname+" : "+getKeyName(*m_key2change));
593aeae4 sago007 2011-06-25 22:42 93
}
26ddb424 sago007 2011-06-09 20:06 94
26ddb424 sago007 2011-06-09 20:06 95
void InitMenues()
26ddb424 sago007 2011-06-09 20:06 96
{
26ddb424 sago007 2011-06-09 20:06 97
    ButtonGfx::setSurfaces(menuMarked,menuUnmarked);
26ddb424 sago007 2011-06-09 20:06 98
    ButtonGfx::thefont = nf_scoreboard_font;
26ddb424 sago007 2011-06-09 20:06 99
}
26ddb424 sago007 2011-06-09 20:06 100
26ddb424 sago007 2011-06-09 20:06 101
void runGame(int gametype);
26ddb424 sago007 2011-06-09 20:06 102
26ddb424 sago007 2011-06-09 20:06 103
void runSinglePlayerEndless(Button* b) {
26ddb424 sago007 2011-06-09 20:06 104
    runGame(0);
26ddb424 sago007 2011-06-09 20:06 105
}
26ddb424 sago007 2011-06-09 20:06 106
26ddb424 sago007 2011-06-09 20:06 107
void runSinglePlayerTimeTrial(Button* b) {
26ddb424 sago007 2011-06-09 20:06 108
    runGame(1);
26ddb424 sago007 2011-06-09 20:06 109
}
26ddb424 sago007 2011-06-09 20:06 110
26ddb424 sago007 2011-06-09 20:06 111
void runSinglePlayerPuzzle(Button* b) {
26ddb424 sago007 2011-06-09 20:06 112
    runGame(3);
26ddb424 sago007 2011-06-09 20:06 113
}
26ddb424 sago007 2011-06-09 20:06 114
26ddb424 sago007 2011-06-09 20:06 115
void runSinglePlayerVs(Button* b) {
26ddb424 sago007 2011-06-09 20:06 116
    runGame(4);
26ddb424 sago007 2011-06-09 20:06 117
}
26ddb424 sago007 2011-06-09 20:06 118
26ddb424 sago007 2011-06-09 20:06 119
void buttonActionMusic(Button* b) {
26ddb424 sago007 2011-06-09 20:06 120
    MusicEnabled = !MusicEnabled;
26ddb424 sago007 2011-06-09 20:06 121
    b->setLabel(MusicEnabled? "Music: On" : "Music: Off");
26ddb424 sago007 2011-06-09 20:06 122
}
26ddb424 sago007 2011-06-09 20:06 123
26ddb424 sago007 2011-06-09 20:06 124
void buttonActionSound(Button* b) {
26ddb424 sago007 2011-06-09 20:06 125
    SoundEnabled = !SoundEnabled;
c9dd376f sago007 2012-01-20 17:13 126
    b->setLabel(SoundEnabled? _("Sound: On") : _("Sound: Off") );
26ddb424 sago007 2011-06-09 20:06 127
}
26ddb424 sago007 2011-06-09 20:06 128
26ddb424 sago007 2011-06-09 20:06 129
void buttonActionFullscreen(Button* b) {
26ddb424 sago007 2011-06-09 20:06 130
    bFullscreen = !bFullscreen;
c9dd376f sago007 2012-01-20 17:13 131
    b->setLabel(bFullscreen? _("Fullscreen: On") : _("Fullscreen: Off") );
26ddb424 sago007 2011-06-09 20:06 132
    ResetFullscreen();
26ddb424 sago007 2011-06-09 20:06 133
}
26ddb424 sago007 2011-06-09 20:06 134
26ddb424 sago007 2011-06-09 20:06 135
void buttonActionPlayer1Name(Button *b) {
26ddb424 sago007 2011-06-09 20:06 136
   if (OpenDialogbox(200,100,player1name))
26ddb424 sago007 2011-06-09 20:06 137
        return; //must save if true
26ddb424 sago007 2011-06-09 20:06 138
}
26ddb424 sago007 2011-06-09 20:06 139
26ddb424 sago007 2011-06-09 20:06 140
void buttonActionPlayer2Name(Button *b) {
26ddb424 sago007 2011-06-09 20:06 141
   if (OpenDialogbox(200,100,player2name))
26ddb424 sago007 2011-06-09 20:06 142
        return; //must save if true
26ddb424 sago007 2011-06-09 20:06 143
}
26ddb424 sago007 2011-06-09 20:06 144
26ddb424 sago007 2011-06-09 20:06 145
void buttonActionHighscores(Button *b) {
26ddb424 sago007 2011-06-09 20:06 146
    OpenScoresDisplay();
26ddb424 sago007 2011-06-09 20:06 147
}
26ddb424 sago007 2011-06-09 20:06 148
26ddb424 sago007 2011-06-09 20:06 149
static void ChangeKeysMenu(long playernumber) {
c9dd376f sago007 2012-01-20 17:13 150
    Menu km(&screen,_("Change key bindings"),true);
c9dd376f sago007 2012-01-20 17:13 151
    Button_changekey bLeft(&keySettings[playernumber].left,_("Left") );
c9dd376f sago007 2012-01-20 17:13 152
    Button_changekey bRight(&keySettings[playernumber].right,_("Right") );
c9dd376f sago007 2012-01-20 17:13 153
    Button_changekey bUp(&keySettings[playernumber].up,_("Up") );
c9dd376f sago007 2012-01-20 17:13 154
    Button_changekey bDown(&keySettings[playernumber].down,_("Down") );
c9dd376f sago007 2012-01-20 17:13 155
    Button_changekey bPush(&keySettings[playernumber].push,_("Push") );
c9dd376f sago007 2012-01-20 17:13 156
    Button_changekey bSwitch(&keySettings[playernumber].change,_("Change") );
fc8e3d6a sago007 2011-06-25 16:31 157
    km.addButton(&bLeft);
fc8e3d6a sago007 2011-06-25 16:31 158
    km.addButton(&bRight);
fc8e3d6a sago007 2011-06-25 16:31 159
    km.addButton(&bUp);
fc8e3d6a sago007 2011-06-25 16:31 160
    km.addButton(&bDown);
593aeae4 sago007 2011-06-25 22:42 161
    km.addButton(&bPush);
593aeae4 sago007 2011-06-25 22:42 162
    km.addButton(&bSwitch);
fc8e3d6a sago007 2011-06-25 16:31 163
    km.run();
26ddb424 sago007 2011-06-09 20:06 164
}
26ddb424 sago007 2011-06-09 20:06 165
593aeae4 sago007 2011-06-25 22:42 166
static void ChangeKeysMenu1(Button *b) {
593aeae4 sago007 2011-06-25 22:42 167
    ChangeKeysMenu(0);
593aeae4 sago007 2011-06-25 22:42 168
}
593aeae4 sago007 2011-06-25 22:42 169
593aeae4 sago007 2011-06-25 22:42 170
static void ChangeKeysMenu2(Button *b) {
593aeae4 sago007 2011-06-25 22:42 171
    ChangeKeysMenu(2);
593aeae4 sago007 2011-06-25 22:42 172
}
fc8e3d6a sago007 2011-06-25 16:31 173
26ddb424 sago007 2011-06-09 20:06 174
void ConfigureMenu(Button *b) {
c9dd376f sago007 2012-01-20 17:13 175
    Menu cm(&screen,_("Configuration"),true);
26ddb424 sago007 2011-06-09 20:06 176
    Button bMusic,bSound,buttonFullscreen,bPlayer1Name,bPlayer2Name;
593aeae4 sago007 2011-06-25 22:42 177
    Button bPlayer1Keys, bPlayer2Keys;
c9dd376f sago007 2012-01-20 17:13 178
    bMusic.setLabel(MusicEnabled? _("Music: On") : _("Music: Off") );
26ddb424 sago007 2011-06-09 20:06 179
    bMusic.setAction(buttonActionMusic);
c9dd376f sago007 2012-01-20 17:13 180
    bSound.setLabel(SoundEnabled? _("Music: On") : _("Music: Off") );
26ddb424 sago007 2011-06-09 20:06 181
    bSound.setAction(buttonActionSound);
c9dd376f sago007 2012-01-20 17:13 182
    buttonFullscreen.setLabel(bFullscreen? _("Fullscreen: On") : _("Fullscreen: Off") );
26ddb424 sago007 2011-06-09 20:06 183
    buttonFullscreen.setAction(buttonActionFullscreen);
26ddb424 sago007 2011-06-09 20:06 184
    bPlayer1Name.setAction(buttonActionPlayer1Name);
c9dd376f sago007 2012-01-20 17:13 185
    bPlayer1Name.setLabel(_("Change player 1's name") );
26ddb424 sago007 2011-06-09 20:06 186
    bPlayer2Name.setAction(buttonActionPlayer2Name);
c9dd376f sago007 2012-01-20 17:13 187
    bPlayer2Name.setLabel(_("Change player 2's name") );
593aeae4 sago007 2011-06-25 22:42 188
    bPlayer1Keys.setAction(ChangeKeysMenu1);
c9dd376f sago007 2012-01-20 17:13 189
    bPlayer1Keys.setLabel(_("Change player 1's keys") );
593aeae4 sago007 2011-06-25 22:42 190
    bPlayer2Keys.setAction(ChangeKeysMenu2);
c9dd376f sago007 2012-01-20 17:13 191
    bPlayer2Keys.setLabel(_("Change player 2's keys") );
fc8e3d6a sago007 2011-06-25 16:31 192
    cm.addButton(&bMusic);
fc8e3d6a sago007 2011-06-25 16:31 193
    cm.addButton(&bSound);
fc8e3d6a sago007 2011-06-25 16:31 194
    cm.addButton(&buttonFullscreen);
fc8e3d6a sago007 2011-06-25 16:31 195
    cm.addButton(&bPlayer1Name);
fc8e3d6a sago007 2011-06-25 16:31 196
    cm.addButton(&bPlayer2Name);
593aeae4 sago007 2011-06-25 22:42 197
    cm.addButton(&bPlayer1Keys);
593aeae4 sago007 2011-06-25 22:42 198
    cm.addButton(&bPlayer2Keys);
26ddb424 sago007 2011-06-09 20:06 199
    cm.run();
26ddb424 sago007 2011-06-09 20:06 200
}
26ddb424 sago007 2011-06-09 20:06 201
26ddb424 sago007 2011-06-09 20:06 202
void MainMenu()
26ddb424 sago007 2011-06-09 20:06 203
{
26ddb424 sago007 2011-06-09 20:06 204
    InitMenues();
c9dd376f sago007 2012-01-20 17:13 205
    Menu m(&screen,_("Block Attack - Rise of the blocks"),false);
26ddb424 sago007 2011-06-09 20:06 206
    Button bHi,bTimetrial1, bPuzzle, bVs1, bConfigure,bHighscore;
c9dd376f sago007 2012-01-20 17:13 207
    bHi.setLabel(_("Single player - endless") );
26ddb424 sago007 2011-06-09 20:06 208
    bHi.setAction(runSinglePlayerEndless);
c9dd376f sago007 2012-01-20 17:13 209
    bTimetrial1.setLabel(_("Single player - time trial") );
26ddb424 sago007 2011-06-09 20:06 210
    bTimetrial1.setAction(runSinglePlayerTimeTrial);
c9dd376f sago007 2012-01-20 17:13 211
    bPuzzle.setLabel(_("Single player - puzzle mode") );
26ddb424 sago007 2011-06-09 20:06 212
    bPuzzle.setAction(runSinglePlayerPuzzle);
c9dd376f sago007 2012-01-20 17:13 213
    bVs1.setLabel(_("Single player - vs") );
26ddb424 sago007 2011-06-09 20:06 214
    bVs1.setAction(runSinglePlayerVs);
c9dd376f sago007 2012-01-20 17:13 215
    bConfigure.setLabel(_("Configure") );
26ddb424 sago007 2011-06-09 20:06 216
    bConfigure.setAction(ConfigureMenu);
c9dd376f sago007 2012-01-20 17:13 217
    bHighscore.setLabel(_("Highscores") );
26ddb424 sago007 2011-06-09 20:06 218
    bHighscore.setAction(buttonActionHighscores);
fc8e3d6a sago007 2011-06-25 16:31 219
    m.addButton(&bHi);
fc8e3d6a sago007 2011-06-25 16:31 220
    m.addButton(&bTimetrial1);
fc8e3d6a sago007 2011-06-25 16:31 221
    m.addButton(&bPuzzle);
fc8e3d6a sago007 2011-06-25 16:31 222
    m.addButton(&bVs1);
fc8e3d6a sago007 2011-06-25 16:31 223
    m.addButton(&bConfigure);
fc8e3d6a sago007 2011-06-25 16:31 224
    m.addButton(&bHighscore);
26ddb424 sago007 2011-06-09 20:06 225
    m.run();
593aeae4 sago007 2011-06-25 22:42 226
}
1970-01-01 00:00 227