Hosting courtesy of Sourceforge

SourceForge Logo
Main Page   Namespace List   Class Hierarchy   Compound List   File List   Namespace Members   Compound Members   File Members  

PlayerController.cpp

Go to the documentation of this file.
00001 //
00002 //                                 PlayerController.cpp
00003 //                             -------------------
00004 //    begin                : Fri Apr 26 2002
00005 //    copyright           : (C) 2002 by Rob Renaud
00006 //    email                : rrenaud@eden.rutgers.edu
00007 //
00008 //   This program is free software; you can redistribute it and/or modify
00009 //   it under the terms of the GNU General Public License as published by
00010 //   the Free Software Foundation; either version 2 of the License, or
00011 //   (at your option) any later version.
00012 //
00013 
00014 #include "PlayerController.h"
00015 
00016 #include "../Util/GeneralException.h"
00017 #include "../Util/StringUtil.h"
00018 #include "../Menu/MenuManager.h"
00019 
00020 using namespace Game;
00021 
00022 ReadKey::ReadKey(SDLKey& key_) :
00023 key(key_)
00024 { }
00025 
00026 void ReadKey::getValue(std::istream& in) {
00027         std::string keyString;
00028         in >> keyString;
00029         Util::makeLowercase(keyString);
00030         const Menu::StringToKeyMap_t::const_iterator i = Menu::KeyMapContainer::getStringToKeyMap().find(keyString);
00031         if (i != Menu::KeyMapContainer::getStringToKeyMap().end()) {
00032                 key = i->second;
00033         }
00034 }
00035 
00036 Parse::Parser* KeyboardController::makeParserToParseMe(std::istream& in) {
00037         Parse::Parser* parser = new Parse::SimpleParser(in);
00038         
00039         parser->addAction("rightkey",   new ReadKey(right));
00040         parser->addAction("leftkey",    new ReadKey(left));
00041         parser->addAction("downkey",    new ReadKey(down));
00042         parser->addAction("upkey",              new ReadKey(up));
00043         parser->addAction("bombkey",    new ReadKey(bomb));
00044 
00045         return parser;
00046 }
00047 
00048 bool KeyboardController::actionIsEnabled(PlayerAction p) {
00049         Uint8* keys = SDL_GetKeyState(NULL);
00050         switch (p) {
00051         case Constants::MOVE_RIGHT: return keys[right] != 0;
00052         case Constants::MOVE_LEFT:      return keys[left] != 0;
00053         case Constants::MOVE_UP:        return keys[up] != 0;
00054         case Constants::MOVE_DOWN:      return keys[down] != 0;
00055         case Constants::DROP_BOMB:      return keys[bomb] != 0;
00056         }
00057         return false;
00058 }
00059 
00060 JoyPortOpener::JoyPortOpener(JoystickController* jc) :
00061 joyController(jc),
00062 index(0)
00063 { }
00064 
00065 void JoyPortOpener::finishingAction() {
00066         if (index < SDL_NumJoysticks()) {
00067                 joyController->setJoystick(SDL_JoystickOpen(index));
00068         } else {
00069         throw Util::GeneralException("Could not open joystick " + Util::toString(index) + " only " +
00070                 Util::toString(SDL_NumJoysticks()) + " joysticks in the system", __FILE__, __LINE__);
00071         }
00072 }
00073 
00074 void JoyPortOpener::getValue(std::istream& in) {
00075         in >> index;
00076 }
00077 
00078 bool JoystickController::actionIsEnabled(PlayerAction p) {
00079         switch(p) {
00080         case Constants::MOVE_RIGHT: return SDL_JoystickGetAxis(joy, 0) > Constants::MIN_JOY_AXIS_VALUE;
00081         case Constants::MOVE_LEFT:  return SDL_JoystickGetAxis(joy, 0) < -Constants::MIN_JOY_AXIS_VALUE;
00082         case Constants::MOVE_UP:        return SDL_JoystickGetAxis(joy, 1) < -Constants::MIN_JOY_AXIS_VALUE;
00083         case Constants::MOVE_DOWN:      return SDL_JoystickGetAxis(joy, 1) > Constants::MIN_JOY_AXIS_VALUE;
00084         case Constants::DROP_BOMB:      return SDL_JoystickGetButton(joy, bombButton) != 0;
00085         }
00086         return false;
00087 }
00088 
00089 void JoystickController::setJoystick(SDL_Joystick* j) {
00090         joy = j;
00091 }
00092 
00093 Parse::Parser* JoystickController::makeParserToParseMe(std::istream& in) {
00094         Parse::Parser* parser = new Parse::SimpleParser(in);
00095         parser->addAction("BombButton",         new Parse::StdRead<int>(bombButton));
00096         parser->addAction("JoyPort",            new JoyPortOpener(this));
00097         return parser;
00098 }

Generated on Tue May 21 07:26:51 2002 for BomberLAN by doxygen1.2.12 written by Dimitri van Heesch, © 1997-2001