view mde/input/joystick.d @ 26:611f7b9063c6

Changed the licensing and removed a few dead files. Changed licensing to "GPL version 2 or later" to avoid future compatibility issues. Also a unittest fix to the previous commit. committer: Diggory Hardy <diggory.hardy@gmail.com>
author Diggory Hardy <diggory.hardy@gmail.com>
date Thu, 03 Apr 2008 18:15:02 +0100
parents 32eff0e01c05
children f985c28c0ec9
line wrap: on
line source

/* LICENSE BLOCK
Part of mde: a Modular D game-oriented Engine
Copyright © 2007-2008 Diggory Hardy

This program is free software: you can redistribute it and/or modify it under the terms
of the GNU General Public License as published by the Free Software Foundation, either
version 2 of the License, or (at your option) any later version.

This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
See the GNU General Public License for more details.

You should have received a copy of the GNU General Public License
along with this program.  If not, see <http://www.gnu.org/licenses/>. */

/** Opens SDL joysticks ready for use.
* May be extended later to include other input devices and remap devices as per config.
*/
module mde.input.joystick;

import tango.util.log.Log : Log, Logger;

import derelict.sdl.joystick;

private Logger logger;
static this() {
    logger = Log.getLogger ("mde.input.joystick");
}
private SDL_Joystick*[] joysticks;	// pointers to all joystick structs, whether successfully opened or not

/** Open joysticks ready for use.
*
* This is simply required for SDL to handle joystick events. It can fail, but won't affect anything
* else, except for the controller not working.
*
* closeJoysticks must be run to cleanup afterwards.
*/
void openJoysticks () {
    joysticks = new SDL_Joystick*[SDL_NumJoysticks ()];
    char tmp[128] = void;
    
    for (int i = 0; i < joysticks.length; ++i) {
        if ((joysticks[i] = SDL_JoystickOpen (i)) is null) {	// null on failure
            logger.error (logger.format (tmp, "Unable to open joystick {} via SDL", i));
        }
    }
    
    logger.info (logger.format (tmp, "Opened {} joysticks via SDL, succesfully unless preceding warnings say otherwise.", joysticks.length));
}

/// Cleanup fct.
void closeJoysticks () {
    foreach (js; joysticks) {
        if(js) SDL_JoystickClose(js);	// only close if successfully opened
    }
}