summaryrefslogtreecommitdiff
path: root/Source
diff options
context:
space:
mode:
authorJohn Peterson <jpeterson57@gmail.com>2009-07-09 02:23:40 +0000
committerJohn Peterson <jpeterson57@gmail.com>2009-07-09 02:23:40 +0000
commita718ff266ef5d1d15a710df37f6ebcfaea0f3515 (patch)
tree95c5019d275e897db996a586b659d6194c8e0072 /Source
parent8fa315879a934335970e494a13d4140d51323681 (diff)
nJoy: Fixed the radius adjustment
git-svn-id: https://dolphin-emu.googlecode.com/svn/trunk@3717 8ced0084-cf51-0410-be5f-012b33b47a6e
Diffstat (limited to 'Source')
-rw-r--r--Source/Core/InputCommon/Src/Configuration.cpp44
-rw-r--r--Source/Core/InputCommon/Src/SDL.h3
-rw-r--r--Source/Plugins/Plugin_Wiimote/Src/ConfigGamepad.cpp6
-rw-r--r--Source/Plugins/Plugin_Wiimote/Src/EmuPad.cpp5
-rw-r--r--Source/Plugins/Plugin_nJoy_SDL/Src/GUI/ConfigAdvanced.cpp9
-rw-r--r--Source/Plugins/Plugin_nJoy_SDL/Src/nJoy.cpp10
6 files changed, 39 insertions, 38 deletions
diff --git a/Source/Core/InputCommon/Src/Configuration.cpp b/Source/Core/InputCommon/Src/Configuration.cpp
index 3faa4a1d2d..35260fd40c 100644
--- a/Source/Core/InputCommon/Src/Configuration.cpp
+++ b/Source/Core/InputCommon/Src/Configuration.cpp
@@ -113,6 +113,30 @@ int Pad_Convert(int _val)
//////////////////////////////////////////////////////////////////////////////////////////
+// Adjust the radius
+// ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ
+void RadiusAdjustment(int &_x, int &_y, int _pad, std::string SRadius)
+{
+ // Get the radius setting
+ int Tmp = atoi (SRadius.substr(0, SRadius.length() - 1).c_str());
+ float RadiusSetting = Tmp / 100.0f;
+
+ // Get current angle
+ float Deg = Rad2Deg(atan2((float)_y, (float)_x));
+ // Get the current radius
+ float Radius = sqrt((float)(_x*_x + _y*_y));
+ // Adjust radius
+ Radius = Radius * RadiusSetting;
+ // Produce new coordinates
+ float x = Radius * cos(Deg2Rad(Deg));
+ float y = Radius * sin(Deg2Rad(Deg));
+ // Update values
+ _x = (int)x, _y = (int)y;
+}
+/////////////////////////////////////////
+
+
+//////////////////////////////////////////////////////////////////////////////////////////
/* Convert the stick raidus from a square or rounded box to a circular radius. I don't know what
input values the actual GC controller produce for the GC, it may be a square, a circle or
something in between. But one thing that is certain is that PC pads differ in their output
@@ -148,9 +172,9 @@ float Square2CircleDistance(float deg)
return Distance;
}
// Produce a perfect circle from an original square or rounded box
-std::vector<int> Square2Circle(int _x, int _y, int _pad, std::string SDiagonal, bool Circle2Square)
+void Square2Circle(int &_x, int &_y, int _pad, std::string SDiagonal, bool Circle2Square)
{
- // Do we need this?
+ // Do we need to do this check?
if(_x > 32767) _x = 32767; if(_y > 32767) _y = 32767; // upper limit
if(_x < -32768) _x = -32768; if(_y < -32768) _y = -32768; // lower limit
@@ -189,21 +213,15 @@ std::vector<int> Square2Circle(int _x, int _y, int _pad, std::string SDiagonal,
// Calculate x and y and return it
float x = result_dist * cos(Deg2Rad(deg));
float y = result_dist * sin(Deg2Rad(deg));
- // Make integers
- int int_x = (int)floor(x);
- int int_y = (int)floor(y);
+ // Update coordinates
+ _x = (int)floor(x);
+ _y = (int)floor(y);
// Boundaries
- if (int_x < -32768) int_x = -32768; if (int_x > 32767) int_x = 32767;
- if (int_y < -32768) int_y = -32768; if (int_y > 32767) int_y = 32767;
- // Return it
- std::vector<int> vec;
- vec.push_back(int_x);
- vec.push_back(int_y);
+ if (_x < -32768) _x = -32768; if (_x > 32767) _x = 32767;
+ if (_y < -32768) _y = -32768; if (_y > 32767) _y = 32767;
// Debugging
//Console::Print("%f %f %i", corner_circle_dist, Diagonal, Tmp));
-
- return vec;
}
/////////////////////////////////////////////////////////////////////
diff --git a/Source/Core/InputCommon/Src/SDL.h b/Source/Core/InputCommon/Src/SDL.h
index 38f4bd759a..49a4e9fd4c 100644
--- a/Source/Core/InputCommon/Src/SDL.h
+++ b/Source/Core/InputCommon/Src/SDL.h
@@ -239,7 +239,8 @@ float Rad2Deg(float Rad);
int Pad_Convert(int _val);
float SquareDistance(float deg);
bool IsDeadZone(float DeadZone, int x, int y);
-std::vector<int> Square2Circle(int _x, int _y, int _pad, std::string SDiagonal, bool Circle2Square = false);
+void Square2Circle(int &_x, int &_y, int _pad, std::string SDiagonal, bool Circle2Square = false);
+void RadiusAdjustment(int &_x, int &_y, int _pad, std::string SRadius);
// Input configuration
std::string VKToString(int keycode);
diff --git a/Source/Plugins/Plugin_Wiimote/Src/ConfigGamepad.cpp b/Source/Plugins/Plugin_Wiimote/Src/ConfigGamepad.cpp
index 8d36640a31..16593cd555 100644
--- a/Source/Plugins/Plugin_Wiimote/Src/ConfigGamepad.cpp
+++ b/Source/Plugins/Plugin_Wiimote/Src/ConfigGamepad.cpp
@@ -635,11 +635,7 @@ void WiimotePadConfigDialog::PadGetStatus()
// Produce square
if(WiiMoteEmu::PadMapping[Page].bCircle2Square)
{
- std::vector<int> main_xy = InputCommon::Square2Circle(main_x, main_y, Page, WiiMoteEmu::PadMapping[Page].SDiagonal, true);
- main_x_after = main_xy.at(0);
- main_y_after = main_xy.at(1);
- //main_x = main_xy.at(0);
- //main_y = main_xy.at(1);
+ InputCommon::Square2Circle(main_x_after, main_y_after, Page, WiiMoteEmu::PadMapping[Page].SDiagonal, true);
}
// Check dead zone
float DeadZoneLeft = (float)WiiMoteEmu::PadMapping[Page].DeadZoneL / 100.0;
diff --git a/Source/Plugins/Plugin_Wiimote/Src/EmuPad.cpp b/Source/Plugins/Plugin_Wiimote/Src/EmuPad.cpp
index b4ef92ac42..7282d0c5e8 100644
--- a/Source/Plugins/Plugin_Wiimote/Src/EmuPad.cpp
+++ b/Source/Plugins/Plugin_Wiimote/Src/EmuPad.cpp
@@ -83,10 +83,7 @@ void PadStateAdjustments(int &Lx, int &Ly, int &Rx, int &Ry, int &Tl, int &Tr)
// Check the circle to square option
if(PadMapping[Page].bCircle2Square)
{
- std::vector<int> main_xy = InputCommon::Square2Circle(Lx, Ly, Page, PadMapping[Page].SDiagonal, true);
-
- Lx = main_xy.at(0);
- Ly = main_xy.at(1);
+ InputCommon::Square2Circle(Lx, Ly, Page, PadMapping[Page].SDiagonal, true);
}
// Dead zone adjustment
diff --git a/Source/Plugins/Plugin_nJoy_SDL/Src/GUI/ConfigAdvanced.cpp b/Source/Plugins/Plugin_nJoy_SDL/Src/GUI/ConfigAdvanced.cpp
index 4573ec5e60..674d5ebeaf 100644
--- a/Source/Plugins/Plugin_nJoy_SDL/Src/GUI/ConfigAdvanced.cpp
+++ b/Source/Plugins/Plugin_nJoy_SDL/Src/GUI/ConfigAdvanced.cpp
@@ -88,18 +88,13 @@ void PADConfigDialognJoy::PadGetStatus()
int main_x_after = main_x, main_y_after = main_y;
if(PadMapping[notebookpage].bSquareToCircle)
{
- std::vector<int> main_xy = InputCommon::Square2Circle(main_x, main_y, notebookpage, PadMapping[notebookpage].SDiagonal);
- main_x_after = main_xy.at(0);
- main_y_after = main_xy.at(1);
+ InputCommon::Square2Circle(main_x_after, main_y_after, notebookpage, PadMapping[notebookpage].SDiagonal);
}
// Adjust radius
if(PadMapping[notebookpage].bRadiusOnOff)
{
// Get the manually configured diagonal distance
- int Tmp = atoi (PadMapping[notebookpage].SRadius.substr(0, PadMapping[notebookpage].SRadius.length() - 1).c_str());
- float Radius = Tmp / 100.0f;
- main_x_after = (int)((float)main_x_after * Radius);
- main_y_after = (int)((float)main_y_after * Radius);
+ InputCommon::RadiusAdjustment(main_x_after, main_y_after, notebookpage, PadMapping[notebookpage].SRadius);
}
//
diff --git a/Source/Plugins/Plugin_nJoy_SDL/Src/nJoy.cpp b/Source/Plugins/Plugin_nJoy_SDL/Src/nJoy.cpp
index e7a6a6662f..9843dc847c 100644
--- a/Source/Plugins/Plugin_nJoy_SDL/Src/nJoy.cpp
+++ b/Source/Plugins/Plugin_nJoy_SDL/Src/nJoy.cpp
@@ -447,18 +447,12 @@ void PAD_GetStatus(u8 _numPAD, SPADStatus* _pPADStatus)
// Check if we should make adjustments
if (PadMapping[_numPAD].bSquareToCircle)
{
- std::vector<int> main_xy = InputCommon::Square2Circle(i_main_stick_x, i_main_stick_y, _numPAD, PadMapping[_numPAD].SDiagonal);
- i_main_stick_x = main_xy.at(0);
- i_main_stick_y = main_xy.at(1);
+ InputCommon::Square2Circle(i_main_stick_x, i_main_stick_y, _numPAD, PadMapping[_numPAD].SDiagonal);
}
// Radius adjustment
if (PadMapping[_numPAD].bRadiusOnOff)
{
- // Get the manually configured diagonal distance
- int Tmp = atoi (PadMapping[_numPAD].SRadius.substr(0, PadMapping[_numPAD].SRadius.length() - 1).c_str());
- float Radius = Tmp / 100.0f;
- i_main_stick_x = (int)((float)i_main_stick_x * Radius);
- i_main_stick_y = (int)((float)i_main_stick_y * Radius);
+ InputCommon::RadiusAdjustment(i_main_stick_x, i_main_stick_y, _numPAD, PadMapping[_numPAD].SRadius);
}
// Convert axis values