mirror of
https://github.com/dolphin-emu/dolphin.git
synced 2025-07-23 14:19:46 -06:00
Build fix
git-svn-id: https://dolphin-emu.googlecode.com/svn/trunk@4983 8ced0084-cf51-0410-be5f-012b33b47a6e
This commit is contained in:
@ -1,16 +1,5 @@
|
|||||||
|
|
||||||
// Project description
|
|
||||||
// -------------------
|
|
||||||
// Name: Input Configuration and Calibration
|
|
||||||
// Description: Common SDL Input Functions
|
|
||||||
//
|
|
||||||
// Author: Falcon4ever (nJoy@falcon4ever.com, www.multigesture.net), JPeterson etc
|
|
||||||
// Copyright (C) 2003 Dolphin Project.
|
// Copyright (C) 2003 Dolphin Project.
|
||||||
//
|
|
||||||
|
|
||||||
//
|
|
||||||
// Licensetype: GNU General Public License (GPL)
|
|
||||||
//
|
|
||||||
// This program is free software: you can redistribute it and/or modify
|
// 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
|
// it under the terms of the GNU General Public License as published by
|
||||||
// the Free Software Foundation, version 2.0.
|
// the Free Software Foundation, version 2.0.
|
||||||
@ -27,8 +16,6 @@
|
|||||||
// http://code.google.com/p/dolphin-emu/
|
// http://code.google.com/p/dolphin-emu/
|
||||||
//
|
//
|
||||||
|
|
||||||
// Include
|
|
||||||
// -------------------
|
|
||||||
#if defined HAVE_WX && HAVE_WX
|
#if defined HAVE_WX && HAVE_WX
|
||||||
#include <wx/wx.h>
|
#include <wx/wx.h>
|
||||||
#endif
|
#endif
|
||||||
@ -38,14 +25,13 @@
|
|||||||
#include <Windows.h>
|
#include <Windows.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#include "SDL.h" // Local
|
#include "SDL_Util.h" // Local
|
||||||
|
|
||||||
|
|
||||||
namespace InputCommon
|
namespace InputCommon
|
||||||
{
|
{
|
||||||
|
|
||||||
// Degree to radian and back
|
// Degree to radian and back
|
||||||
// -------------
|
|
||||||
float Deg2Rad(float Deg)
|
float Deg2Rad(float Deg)
|
||||||
{
|
{
|
||||||
return Deg * (float)M_PI / 180.0f;
|
return Deg * (float)M_PI / 180.0f;
|
||||||
@ -56,7 +42,6 @@ float Rad2Deg(float Rad)
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Check if the pad is within the dead zone, we assume the range is 0x8000
|
// Check if the pad is within the dead zone, we assume the range is 0x8000
|
||||||
// ----------------
|
|
||||||
float CoordinatesToRadius(int x, int y)
|
float CoordinatesToRadius(int x, int y)
|
||||||
{
|
{
|
||||||
return sqrt(pow((float)x, 2) + pow((float)y, 2));
|
return sqrt(pow((float)x, 2) + pow((float)y, 2));
|
||||||
@ -77,17 +62,18 @@ bool IsDeadZone(float DeadZone, int x, int y)
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Scale down stick values from 0x8000 to 0x80
|
// Scale down stick values from 0x8000 to 0x80
|
||||||
/* ----------------
|
/*
|
||||||
The value returned by SDL_JoystickGetAxis is a signed integer s16
|
The value returned by SDL_JoystickGetAxis is a signed integer s16 (-32768 to
|
||||||
(-32768 to 32767). The value used for the gamecube controller is an unsigned
|
32767). The value used for the gamecube controller is an unsigned char u8 (0
|
||||||
char u8 (0 to 255) with neutral at 0x80 (128), so that it's equivalent to a signed
|
to 255) with neutral at 0x80 (128), so that it's equivalent to a signed -128
|
||||||
-128 to 127.
|
to 127. */
|
||||||
*/
|
//
|
||||||
// ---------------------
|
|
||||||
int Pad_Convert(int _val)
|
int Pad_Convert(int _val)
|
||||||
{
|
{
|
||||||
/* If the limits on PadState[].axis[] actually is a u16 then we don't need this
|
|
||||||
but if it's not actually limited to that we need to apply these limits */
|
/* If the limits on PadState[].axis[] actually is a u16 then we don't need
|
||||||
|
this but if it's not actually limited to that we need to apply these
|
||||||
|
limits */
|
||||||
if(_val > 32767) _val = 32767; // upper limit
|
if(_val > 32767) _val = 32767; // upper limit
|
||||||
if(_val < -32768) _val = -32768; // lower limit
|
if(_val < -32768) _val = -32768; // lower limit
|
||||||
|
|
||||||
@ -103,7 +89,6 @@ int Pad_Convert(int _val)
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Adjust the radius
|
// Adjust the radius
|
||||||
// ----------------
|
|
||||||
void RadiusAdjustment(s8 &_x, s8 &_y, int _Radius)
|
void RadiusAdjustment(s8 &_x, s8 &_y, int _Radius)
|
||||||
{
|
{
|
||||||
// Get the radius setting
|
// Get the radius setting
|
||||||
@ -115,13 +100,14 @@ void RadiusAdjustment(s8 &_x, s8 &_y, int _Radius)
|
|||||||
_y = (s8)y;
|
_y = (s8)y;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Convert the stick raidus from a square or rounded box to a circular radius. I don't know what
|
/* Convert the stick raidus from a square or rounded box to a circular
|
||||||
input values the actual GC controller produce for the GC, it may be a square, a circle or
|
radius. I don't know what input values the actual GC controller produce for
|
||||||
something in between. But one thing that is certain is that PC pads differ in their output
|
the GC, it may be a square, a circle or something in between. But one thing
|
||||||
(as shown in the list below), so it may be beneficiary to convert whatever radius they
|
that is certain is that PC pads differ in their output (as shown in the list
|
||||||
produce to the radius the GC games expect. This is the first implementation of this
|
below), so it may be beneficiary to convert whatever radius they produce to
|
||||||
that convert a square radius to a circual radius. Use the advanced settings to enable
|
the radius the GC games expect. This is the first implementation of this
|
||||||
and calibrate it.
|
that convert a square radius to a circual radius. Use the advanced settings
|
||||||
|
to enable and calibrate it.
|
||||||
|
|
||||||
Observed diagonals:
|
Observed diagonals:
|
||||||
Perfect circle: 71% = sin(45)
|
Perfect circle: 71% = sin(45)
|
||||||
@ -130,11 +116,11 @@ void RadiusAdjustment(s8 &_x, s8 &_y, int _Radius)
|
|||||||
XBox 360 Wireless: 85%
|
XBox 360 Wireless: 85%
|
||||||
GameCube Controller (Third Party) with EMS Trio Linker Plus II: 60%
|
GameCube Controller (Third Party) with EMS Trio Linker Plus II: 60%
|
||||||
*/
|
*/
|
||||||
// ---------------------
|
|
||||||
|
|
||||||
/* Calculate the distance from the outer edges of the box to the outer edges of the circle inside the box
|
/* Calculate the distance from the outer edges of the box to the outer edges of
|
||||||
at any angle from 0 to 360. The returned value is 1 + Distance, for example at most sqrt(2) in the
|
the circle inside the box at any angle from 0 to 360. The returned value is
|
||||||
corners and at least 1.0 at the horizontal and vertical angles. */
|
1 + Distance, for example at most sqrt(2) in the corners and at least 1.0 at
|
||||||
|
the horizontal and vertical angles. */
|
||||||
float Square2CircleDistance(float deg)
|
float Square2CircleDistance(float deg)
|
||||||
{
|
{
|
||||||
// See if we have to adjust the angle
|
// See if we have to adjust the angle
|
||||||
@ -157,9 +143,7 @@ void Square2Circle(int &_x, int &_y, int _Diagonal, bool Circle2Square)
|
|||||||
if(_x > 32767) _x = 32767; if(_y > 32767) _y = 32767; // upper limit
|
if(_x > 32767) _x = 32767; if(_y > 32767) _y = 32767; // upper limit
|
||||||
if(_x < -32768) _x = -32768; if(_y < -32768) _y = -32768; // lower limit
|
if(_x < -32768) _x = -32768; if(_y < -32768) _y = -32768; // lower limit
|
||||||
|
|
||||||
// ====================================
|
|
||||||
// Convert to circle
|
// Convert to circle
|
||||||
// -----------
|
|
||||||
// Get the manually configured diagonal distance
|
// Get the manually configured diagonal distance
|
||||||
float Diagonal = (float)_Diagonal / 100.0f;
|
float Diagonal = (float)_Diagonal / 100.0f;
|
||||||
|
|
||||||
@ -167,8 +151,9 @@ void Square2Circle(int &_x, int &_y, int _Diagonal, bool Circle2Square)
|
|||||||
float OrigDist = sqrt( pow((float)_y, 2) + pow((float)_x, 2) ); // Get current distance
|
float OrigDist = sqrt( pow((float)_y, 2) + pow((float)_x, 2) ); // Get current distance
|
||||||
float deg = Rad2Deg(atan2((float)_y, (float)_x)); // Get current angle
|
float deg = Rad2Deg(atan2((float)_y, (float)_x)); // Get current angle
|
||||||
|
|
||||||
/* Calculate the actual distance between the maxium diagonal values, and the outer edges of the
|
/* Calculate the actual distance between the maxium diagonal values, and
|
||||||
square. A diagonal of 85% means a maximum distance of 0.85 * sqrt(2) ~1.2 in the diagonals. */
|
the outer edges of the square. A diagonal of 85% means a maximum
|
||||||
|
distance of 0.85 * sqrt(2) ~1.2 in the diagonals. */
|
||||||
float corner_circle_dist = ( Diagonal / sin(Deg2Rad(45.0f)) );
|
float corner_circle_dist = ( Diagonal / sin(Deg2Rad(45.0f)) );
|
||||||
float SquareDist = Square2CircleDistance(deg);
|
float SquareDist = Square2CircleDistance(deg);
|
||||||
// The original-to-square distance adjustment
|
// The original-to-square distance adjustment
|
||||||
@ -203,7 +188,6 @@ void Square2Circle(int &_x, int &_y, int _Diagonal, bool Circle2Square)
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Windows Virtual Key Codes Names
|
// Windows Virtual Key Codes Names
|
||||||
// ---------------------
|
|
||||||
#ifdef _WIN32
|
#ifdef _WIN32
|
||||||
std::string VKToString(int keycode)
|
std::string VKToString(int keycode)
|
||||||
{
|
{
|
||||||
|
Reference in New Issue
Block a user