git repos / blockattack-game

blame: source/code/joypad.cpp

normal view · raw

89c4a3a6 sago007 2008-08-29 14:32 1
/*
89c4a3a6 sago007 2008-08-29 14:32 2
joypad.cpp - Enables joypad support
89c4a3a6 sago007 2008-08-29 14:32 3
Copyright (C) 2005 Poul Sander
89c4a3a6 sago007 2008-08-29 14:32 4
89c4a3a6 sago007 2008-08-29 14:32 5
    This program is free software; you can redistribute it and/or modify
89c4a3a6 sago007 2008-08-29 14:32 6
    it under the terms of the GNU General Public License as published by
89c4a3a6 sago007 2008-08-29 14:32 7
    the Free Software Foundation; either version 2 of the License, or
89c4a3a6 sago007 2008-08-29 14:32 8
    (at your option) any later version.
89c4a3a6 sago007 2008-08-29 14:32 9
89c4a3a6 sago007 2008-08-29 14:32 10
    This program is distributed in the hope that it will be useful,
89c4a3a6 sago007 2008-08-29 14:32 11
    but WITHOUT ANY WARRANTY; without even the implied warranty of
89c4a3a6 sago007 2008-08-29 14:32 12
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
89c4a3a6 sago007 2008-08-29 14:32 13
    GNU General Public License for more details.
89c4a3a6 sago007 2008-08-29 14:32 14
89c4a3a6 sago007 2008-08-29 14:32 15
    You should have received a copy of the GNU General Public License
89c4a3a6 sago007 2008-08-29 14:32 16
    along with this program; if not, write to the Free Software
89c4a3a6 sago007 2008-08-29 14:32 17
    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
89c4a3a6 sago007 2008-08-29 14:32 18
89c4a3a6 sago007 2008-08-29 14:32 19
    Poul Sander
d07b805e sago007 2009-01-27 13:15 20
    R�veh�jvej 36, V. 1111
89c4a3a6 sago007 2008-08-29 14:32 21
    2800 Kgs. Lyngby
89c4a3a6 sago007 2008-08-29 14:32 22
    DENMARK
89c4a3a6 sago007 2008-08-29 14:32 23
    blockattack@poulsander.com
89c4a3a6 sago007 2008-08-29 14:32 24
*/
89c4a3a6 sago007 2008-08-29 14:32 25
89c4a3a6 sago007 2008-08-29 14:32 26
#include "joypad.h"
89c4a3a6 sago007 2008-08-29 14:32 27
89c4a3a6 sago007 2008-08-29 14:32 28
bool Joypad_init()
89c4a3a6 sago007 2008-08-29 14:32 29
{
89c4a3a6 sago007 2008-08-29 14:32 30
    if (0==SDL_InitSubSystem(SDL_INIT_JOYSTICK))
89c4a3a6 sago007 2008-08-29 14:32 31
        return true;
89c4a3a6 sago007 2008-08-29 14:32 32
    else
89c4a3a6 sago007 2008-08-29 14:32 33
        return false;
89c4a3a6 sago007 2008-08-29 14:32 34
}
89c4a3a6 sago007 2008-08-29 14:32 35
89c4a3a6 sago007 2008-08-29 14:32 36
Joypad_status Joypad_getStatus(SDL_Joystick *joystick)
89c4a3a6 sago007 2008-08-29 14:32 37
{
89c4a3a6 sago007 2008-08-29 14:32 38
    Joypad_status status;
89c4a3a6 sago007 2008-08-29 14:32 39
    for (int i=0; i<NRofPADS; i++)
89c4a3a6 sago007 2008-08-29 14:32 40
    {
89c4a3a6 sago007 2008-08-29 14:32 41
        //cout << SDL_JoystickNumAxes(joystick) << endl;
89c4a3a6 sago007 2008-08-29 14:32 42
        if (i*2>=SDL_JoystickNumAxes(joystick))
89c4a3a6 sago007 2008-08-29 14:32 43
        {
89c4a3a6 sago007 2008-08-29 14:32 44
            status.padDown[i]=false;
89c4a3a6 sago007 2008-08-29 14:32 45
            status.padUp[i] = false;
89c4a3a6 sago007 2008-08-29 14:32 46
            status.padLeft[i] = false;
89c4a3a6 sago007 2008-08-29 14:32 47
            status.padRight[i] = false;
89c4a3a6 sago007 2008-08-29 14:32 48
        }
89c4a3a6 sago007 2008-08-29 14:32 49
        else
89c4a3a6 sago007 2008-08-29 14:32 50
        {
89c4a3a6 sago007 2008-08-29 14:32 51
            //cout << SDL_JoystickGetAxis(joystick,i*2+1)<< endl;
89c4a3a6 sago007 2008-08-29 14:32 52
            if (SDL_JoystickGetAxis(joystick,i*2)<(-8000))
89c4a3a6 sago007 2008-08-29 14:32 53
                status.padLeft[i]=1;
89c4a3a6 sago007 2008-08-29 14:32 54
            else
89c4a3a6 sago007 2008-08-29 14:32 55
                status.padLeft[i]=0;
89c4a3a6 sago007 2008-08-29 14:32 56
            if (SDL_JoystickGetAxis(joystick,i*2)>(8000))
89c4a3a6 sago007 2008-08-29 14:32 57
                status.padRight[i]=1;
89c4a3a6 sago007 2008-08-29 14:32 58
            else
89c4a3a6 sago007 2008-08-29 14:32 59
                status.padRight[i]=0;
89c4a3a6 sago007 2008-08-29 14:32 60
            if (SDL_JoystickGetAxis(joystick,i*2+1)<(-8000))
89c4a3a6 sago007 2008-08-29 14:32 61
                status.padUp[i]=1;
89c4a3a6 sago007 2008-08-29 14:32 62
            else
89c4a3a6 sago007 2008-08-29 14:32 63
                status.padUp[i]=0;
89c4a3a6 sago007 2008-08-29 14:32 64
            if (SDL_JoystickGetAxis(joystick,i*2+1)>(8000))
89c4a3a6 sago007 2008-08-29 14:32 65
                status.padDown[i]=1;
89c4a3a6 sago007 2008-08-29 14:32 66
            else
89c4a3a6 sago007 2008-08-29 14:32 67
                status.padDown[i]=0;
89c4a3a6 sago007 2008-08-29 14:32 68
        }
89c4a3a6 sago007 2008-08-29 14:32 69
    }//NRofPADS
89c4a3a6 sago007 2008-08-29 14:32 70
    for (int i=0; i<NRofBUTTONS; i++)
89c4a3a6 sago007 2008-08-29 14:32 71
    {
89c4a3a6 sago007 2008-08-29 14:32 72
        if (i>=SDL_JoystickNumButtons(joystick))
89c4a3a6 sago007 2008-08-29 14:32 73
            status.button[i]=false;
89c4a3a6 sago007 2008-08-29 14:32 74
        else
89c4a3a6 sago007 2008-08-29 14:32 75
            if (1==SDL_JoystickGetButton(joystick,i))
89c4a3a6 sago007 2008-08-29 14:32 76
                status.button[i] = true;
89c4a3a6 sago007 2008-08-29 14:32 77
            else
89c4a3a6 sago007 2008-08-29 14:32 78
                status.button[i] = false;
89c4a3a6 sago007 2008-08-29 14:32 79
    }
89c4a3a6 sago007 2008-08-29 14:32 80
    return status;
89c4a3a6 sago007 2008-08-29 14:32 81
}
89c4a3a6 sago007 2008-08-29 14:32 82
89c4a3a6 sago007 2008-08-29 14:32 83
Joypad::Joypad()
89c4a3a6 sago007 2008-08-29 14:32 84
{
89c4a3a6 sago007 2008-08-29 14:32 85
    up=false;
89c4a3a6 sago007 2008-08-29 14:32 86
    down=false;
89c4a3a6 sago007 2008-08-29 14:32 87
    left=false;
89c4a3a6 sago007 2008-08-29 14:32 88
    right=false;
89c4a3a6 sago007 2008-08-29 14:32 89
    but1=false;
89c4a3a6 sago007 2008-08-29 14:32 90
    but2=false;
89c4a3a6 sago007 2008-08-29 14:32 91
    upREL=true;
89c4a3a6 sago007 2008-08-29 14:32 92
    downREL=true;
89c4a3a6 sago007 2008-08-29 14:32 93
    leftREL=true;
89c4a3a6 sago007 2008-08-29 14:32 94
    rightREL=true;
89c4a3a6 sago007 2008-08-29 14:32 95
    but1REL=true;
89c4a3a6 sago007 2008-08-29 14:32 96
    but2REL=true;
89c4a3a6 sago007 2008-08-29 14:32 97
    int joynum = 0;
89c4a3a6 sago007 2008-08-29 14:32 98
    while ((SDL_JoystickOpened(joynum))&&(joynum<Joypad_number))
89c4a3a6 sago007 2008-08-29 14:32 99
        joynum++;
89c4a3a6 sago007 2008-08-29 14:32 100
    if (joynum>=Joypad_number)
89c4a3a6 sago007 2008-08-29 14:32 101
        working = false;
89c4a3a6 sago007 2008-08-29 14:32 102
    else
89c4a3a6 sago007 2008-08-29 14:32 103
    {
89c4a3a6 sago007 2008-08-29 14:32 104
        joystick=SDL_JoystickOpen(joynum);
89c4a3a6 sago007 2008-08-29 14:32 105
        if (joystick==NULL)
89c4a3a6 sago007 2008-08-29 14:32 106
            working =false;
89c4a3a6 sago007 2008-08-29 14:32 107
        else
89c4a3a6 sago007 2008-08-29 14:32 108
            working=true;
89c4a3a6 sago007 2008-08-29 14:32 109
    }
89c4a3a6 sago007 2008-08-29 14:32 110
}
89c4a3a6 sago007 2008-08-29 14:32 111
89c4a3a6 sago007 2008-08-29 14:32 112
Joypad::~Joypad()
89c4a3a6 sago007 2008-08-29 14:32 113
{
d07b805e sago007 2009-01-27 13:15 114
	if(working)
d07b805e sago007 2009-01-27 13:15 115
    		SDL_JoystickClose(joystick);
89c4a3a6 sago007 2008-08-29 14:32 116
}
89c4a3a6 sago007 2008-08-29 14:32 117
89c4a3a6 sago007 2008-08-29 14:32 118
void Joypad::update()
89c4a3a6 sago007 2008-08-29 14:32 119
{
89c4a3a6 sago007 2008-08-29 14:32 120
    SDL_JoystickUpdate();
89c4a3a6 sago007 2008-08-29 14:32 121
    Joypad_status status = Joypad_getStatus(joystick);
89c4a3a6 sago007 2008-08-29 14:32 122
    if ((upREL)&&((status.padUp[0])||(status.padUp[1])||(status.padUp[2])||(status.padUp[3])))
89c4a3a6 sago007 2008-08-29 14:32 123
    {
89c4a3a6 sago007 2008-08-29 14:32 124
        up=true;
89c4a3a6 sago007 2008-08-29 14:32 125
        upREL=false;
89c4a3a6 sago007 2008-08-29 14:32 126
    }
89c4a3a6 sago007 2008-08-29 14:32 127
    else
89c4a3a6 sago007 2008-08-29 14:32 128
        up=false;
89c4a3a6 sago007 2008-08-29 14:32 129
    if ((downREL)&&((status.padDown[0])||(status.padDown[1])||(status.padDown[2])||(status.padDown[3])))
89c4a3a6 sago007 2008-08-29 14:32 130
    {
89c4a3a6 sago007 2008-08-29 14:32 131
        down=true;
89c4a3a6 sago007 2008-08-29 14:32 132
        downREL=false;
89c4a3a6 sago007 2008-08-29 14:32 133
    }
89c4a3a6 sago007 2008-08-29 14:32 134
    else
89c4a3a6 sago007 2008-08-29 14:32 135
        down=false;
89c4a3a6 sago007 2008-08-29 14:32 136
    if ((leftREL)&&((status.padLeft[0])||(status.padLeft[1])||(status.padLeft[2])||(status.padLeft[3])))
89c4a3a6 sago007 2008-08-29 14:32 137
    {
89c4a3a6 sago007 2008-08-29 14:32 138
        left=true;
89c4a3a6 sago007 2008-08-29 14:32 139
        leftREL=false;
89c4a3a6 sago007 2008-08-29 14:32 140
    }
89c4a3a6 sago007 2008-08-29 14:32 141
    else
89c4a3a6 sago007 2008-08-29 14:32 142
        left=false;
89c4a3a6 sago007 2008-08-29 14:32 143
    if ((rightREL)&&((status.padRight[0])||(status.padRight[1])||(status.padRight[2])||(status.padRight[3])))
89c4a3a6 sago007 2008-08-29 14:32 144
    {
89c4a3a6 sago007 2008-08-29 14:32 145
        right=true;
89c4a3a6 sago007 2008-08-29 14:32 146
        rightREL=false;
89c4a3a6 sago007 2008-08-29 14:32 147
    }
89c4a3a6 sago007 2008-08-29 14:32 148
    else
89c4a3a6 sago007 2008-08-29 14:32 149
        right=false;
89c4a3a6 sago007 2008-08-29 14:32 150
    if ((but1REL)&&((status.button[0])||(status.button[2])||(status.button[4])||(status.button[6])))
89c4a3a6 sago007 2008-08-29 14:32 151
    {
89c4a3a6 sago007 2008-08-29 14:32 152
        but1=true;
89c4a3a6 sago007 2008-08-29 14:32 153
        but1REL=false;
89c4a3a6 sago007 2008-08-29 14:32 154
    }
89c4a3a6 sago007 2008-08-29 14:32 155
    else
89c4a3a6 sago007 2008-08-29 14:32 156
        but1=false;
89c4a3a6 sago007 2008-08-29 14:32 157
    if ((but2REL)&&((status.button[1])||(status.button[3])||(status.button[5])||(status.button[7])))
89c4a3a6 sago007 2008-08-29 14:32 158
    {
89c4a3a6 sago007 2008-08-29 14:32 159
        but2=true;
89c4a3a6 sago007 2008-08-29 14:32 160
        but2REL=false;
89c4a3a6 sago007 2008-08-29 14:32 161
    }
89c4a3a6 sago007 2008-08-29 14:32 162
    else
89c4a3a6 sago007 2008-08-29 14:32 163
        but2=false;
89c4a3a6 sago007 2008-08-29 14:32 164
    //Now testing for up
89c4a3a6 sago007 2008-08-29 14:32 165
    if (!((status.padUp[0])||(status.padUp[1])||(status.padUp[2])||(status.padUp[3])))
89c4a3a6 sago007 2008-08-29 14:32 166
        upREL = true;
89c4a3a6 sago007 2008-08-29 14:32 167
    if (!((status.padDown[0])||(status.padDown[1])||(status.padDown[2])||(status.padDown[3])))
89c4a3a6 sago007 2008-08-29 14:32 168
        downREL = true;
89c4a3a6 sago007 2008-08-29 14:32 169
    if (!((status.padLeft[0])||(status.padLeft[1])||(status.padLeft[2])||(status.padLeft[3])))
89c4a3a6 sago007 2008-08-29 14:32 170
        leftREL = true;
89c4a3a6 sago007 2008-08-29 14:32 171
    if (!((status.padRight[0])||(status.padRight[1])||(status.padRight[2])||(status.padRight[3])))
89c4a3a6 sago007 2008-08-29 14:32 172
        rightREL= true;
89c4a3a6 sago007 2008-08-29 14:32 173
    if (!((status.button[0])||(status.button[2])||(status.button[4])||(status.button[6])))
89c4a3a6 sago007 2008-08-29 14:32 174
        but1REL = true;
89c4a3a6 sago007 2008-08-29 14:32 175
    if (!((status.button[1])||(status.button[3])||(status.button[5])||(status.button[7])))
89c4a3a6 sago007 2008-08-29 14:32 176
        but2REL = true;
89c4a3a6 sago007 2008-08-29 14:32 177
}
1970-01-01 00:00 178