From f8e51876b5b05642539b1cb4fd46260756b7fe4f Mon Sep 17 00:00:00 2001 From: stephena Date: Mon, 9 Jan 2006 00:42:12 +0000 Subject: [PATCH] Removed all reference to analog vs. digital joysticks, since we really don't care what type they are (this is good, since the detection code was crap anyway). Events are now designated as being digital or analog. If an event is analog and the stick also happens to be analog, then it will get analog values; otherwise it won't. Hopefully this will speed up analog processing in Win32 (which I swear is the bane of my existence, since every time I boot into Windows I feel my blood pressure rising :( ) Fixed typo which caused the joymap to be saved incorrectly. git-svn-id: svn://svn.code.sf.net/p/stella/code/trunk@943 8b62c5a3-ac7e-4cc8-8f21-d9a121418aba --- stella/src/emucore/EventHandler.cxx | 88 +++++++++++------------------ stella/src/emucore/EventHandler.hxx | 13 +---- 2 files changed, 35 insertions(+), 66 deletions(-) diff --git a/stella/src/emucore/EventHandler.cxx b/stella/src/emucore/EventHandler.cxx index 275c7d664..1a5ba3d19 100644 --- a/stella/src/emucore/EventHandler.cxx +++ b/stella/src/emucore/EventHandler.cxx @@ -13,7 +13,7 @@ // See the file "license" for information on usage and redistribution of // this file, and for a DISCLAIMER OF ALL WARRANTIES. // -// $Id: EventHandler.cxx,v 1.141 2006-01-08 02:28:03 stephena Exp $ +// $Id: EventHandler.cxx,v 1.142 2006-01-09 00:42:11 stephena Exp $ //============================================================================ #include @@ -94,15 +94,10 @@ EventHandler::EventHandler(OSystem* osystem) for(j = 0; j < kNumJoyButtons; ++j) myJoyTable[i][j] = Event::NoType; - // Erase the joystick axis mapping and type arrays + // Erase the joystick axis mapping array for(i = 0; i < kNumJoysticks; ++i) - { for(j = 0; j < kNumJoyAxis; ++j) - { myJoyAxisTable[i][j][0] = myJoyAxisTable[i][j][1] = Event::NoType; - myJoyAxisType[i][j] = JA_NONE; - } - } // Erase the Message array for(i = 0; i < Event::LastType; ++i) @@ -893,55 +888,38 @@ void EventHandler::handleJoyAxisEvent(int stick, int axis, int value) Event::Type eventAxisNeg = myJoyAxisTable[stick][axis][0]; Event::Type eventAxisPos = myJoyAxisTable[stick][axis][1]; - // Determine what type of axis we're dealing with - // Figure out the actual type if it's undefined - JoyAxisType type = myJoyAxisType[stick][axis]; - if(type == JA_NONE) + // Check for analog events, which are handled differently + switch((int)eventAxisNeg) { - // TODO - will this always work?? - if(value > 32767 - JOY_DEADZONE || value < -32767 + JOY_DEADZONE) - type = myJoyAxisType[stick][axis] = JA_DIGITAL; - else - type = myJoyAxisType[stick][axis] = JA_ANALOG; + case Event::PaddleZeroAnalog: + myEvent->set(Event::PaddleZeroResistance, + (int)(1000000.0 * (32767 - value) / 65534)); + break; + case Event::PaddleOneAnalog: + myEvent->set(Event::PaddleOneResistance, + (int)(1000000.0 * (32767 - value) / 65534)); + break; + case Event::PaddleTwoAnalog: + myEvent->set(Event::PaddleTwoResistance, + (int)(1000000.0 * (32767 - value) / 65534)); + break; + case Event::PaddleThreeAnalog: + myEvent->set(Event::PaddleThreeResistance, + (int)(1000000.0 * (32767 - value) / 65534)); + break; + default: + // Otherwise, we know the event is digital + if(value > -JOY_DEADZONE && value < JOY_DEADZONE) + { + // Turn off both events, since we don't know exactly which one + // was previously activated. + handleEvent(eventAxisNeg, 0); + handleEvent(eventAxisPos, 0); + } + else + handleEvent(value < 0 ? eventAxisNeg : eventAxisPos, 1); + break; } - - // Paddle emulation *REALLY* complicates this method - if(type == JA_ANALOG) - { - int idx = -1; - switch((int)eventAxisNeg) - { - case Event::PaddleZeroAnalog: - idx = 0; - break; - case Event::PaddleOneAnalog: - idx = 1; - break; - case Event::PaddleTwoAnalog: - idx = 2; - break; - case Event::PaddleThreeAnalog: - idx = 3; - break; - } - if(idx >= 0) - { - int resistance = (int)(1000000.0 * (32767 - value) / 65534); - myEvent->set(Paddle_Resistance[idx], resistance); - return; - } - } - - // Otherwise, we know the event is digital - if(value == 0) - { - // Turn off both events, since we don't know exactly which one - // was previously activated. - handleEvent(eventAxisNeg, 0); - handleEvent(eventAxisPos, 0); - } - else - handleEvent(value < 0 ? eventAxisNeg : eventAxisPos, 1); } // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -1344,7 +1322,7 @@ void EventHandler::setJoymap() // Fill the joymap table with events int idx = 0; for(int i = 0; i < kNumJoysticks; ++i) - for(int j = 0; j < kNumJoyAxis; ++j) + for(int j = 0; j < kNumJoyButtons; ++j) myJoyTable[i][j] = (Event::Type) map[idx++]; } else diff --git a/stella/src/emucore/EventHandler.hxx b/stella/src/emucore/EventHandler.hxx index ec36f7bbf..ee7282f1b 100644 --- a/stella/src/emucore/EventHandler.hxx +++ b/stella/src/emucore/EventHandler.hxx @@ -13,7 +13,7 @@ // See the file "license" for information on usage and redistribution of // this file, and for a DISCLAIMER OF ALL WARRANTIES. // -// $Id: EventHandler.hxx,v 1.72 2006-01-08 02:28:03 stephena Exp $ +// $Id: EventHandler.hxx,v 1.73 2006-01-09 00:42:12 stephena Exp $ //============================================================================ #ifndef EVENTHANDLER_HXX @@ -94,12 +94,6 @@ enum JoyType { JT_STELLADAPTOR_RIGHT }; -enum JoyAxisType { - JA_NONE, - JA_DIGITAL, - JA_ANALOG -}; - struct Stella_Joystick { SDL_Joystick* stick; JoyType type; @@ -128,7 +122,7 @@ struct JoyMouse { mapping can take place. @author Stephen Anthony - @version $Id: EventHandler.hxx,v 1.72 2006-01-08 02:28:03 stephena Exp $ + @version $Id: EventHandler.hxx,v 1.73 2006-01-09 00:42:12 stephena Exp $ */ class EventHandler { @@ -465,9 +459,6 @@ class EventHandler // Array of joystick axis events Event::Type myJoyAxisTable[kNumJoysticks][kNumJoyAxis][2]; - // Array of joystick axis types (analog or digital) - JoyAxisType myJoyAxisType[kNumJoysticks][kNumJoyAxis]; - // Array of messages for each Event string ourMessageTable[Event::LastType];