Add a Androind ControllerInterface class for allowing input in a non-hacky way. Add a default GCPad.ini file so it actually works.
This commit is contained in:
parent
37b67971e7
commit
44bbb54a62
|
@ -0,0 +1,29 @@
|
|||
[GCPad1]
|
||||
Device = Android/0/Touchscreen
|
||||
Buttons/A = Button 0
|
||||
Buttons/B = Button 1
|
||||
Buttons/X = C
|
||||
Buttons/Y = S
|
||||
Buttons/Z = D
|
||||
Buttons/Start = Button 2
|
||||
Main Stick/Up = Up
|
||||
Main Stick/Down = Down
|
||||
Main Stick/Left = Left
|
||||
Main Stick/Right = Right
|
||||
Main Stick/Modifier = Shift_L
|
||||
Main Stick/Modifier/Range = 50.000000
|
||||
C-Stick/Up = I
|
||||
C-Stick/Down = K
|
||||
C-Stick/Left = J
|
||||
C-Stick/Right = L
|
||||
C-Stick/Modifier = Control_L
|
||||
C-Stick/Modifier/Range = 50.000000
|
||||
Triggers/L = Q
|
||||
Triggers/R = W
|
||||
D-Pad/Up = T
|
||||
D-Pad/Down = G
|
||||
D-Pad/Left = F
|
||||
D-Pad/Right = H
|
||||
[GCPad2]
|
||||
[GCPad3]
|
||||
[GCPad4]
|
|
@ -59,6 +59,7 @@ public class DolphinEmulator<MainActivity> extends Activity
|
|||
out.write(buffer, 0, read);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onStop()
|
||||
{
|
||||
|
@ -85,22 +86,15 @@ public class DolphinEmulator<MainActivity> extends Activity
|
|||
@Override
|
||||
public void onCreate(Bundle savedInstanceState) {
|
||||
super.onCreate(savedInstanceState);
|
||||
|
||||
if (savedInstanceState == null)
|
||||
{
|
||||
Intent ListIntent = new Intent(this, NativeListView.class);
|
||||
startActivityForResult(ListIntent, 1);
|
||||
|
||||
// Make the assets directory
|
||||
try
|
||||
{
|
||||
File directory = new File(Environment.getExternalStorageDirectory()+File.separator+"dolphin-emu");
|
||||
File directory = new File(
|
||||
Environment.getExternalStorageDirectory()+File.separator+"dolphin-emu"+File.separator+"Config");
|
||||
directory.mkdirs();
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
Log.w("me", ex.toString());
|
||||
}
|
||||
|
||||
// Copy assets if needed
|
||||
java.io.File file = new java.io.File(
|
||||
|
@ -108,11 +102,17 @@ public class DolphinEmulator<MainActivity> extends Activity
|
|||
if(!file.exists())
|
||||
{
|
||||
CopyAsset("ButtonA.png",
|
||||
Environment.getExternalStorageDirectory()+File.separator+"dolphin-emu" + File.separator + "ButtonA.png");
|
||||
Environment.getExternalStorageDirectory()+File.separator+
|
||||
"dolphin-emu" + File.separator + "ButtonA.png");
|
||||
CopyAsset("ButtonB.png",
|
||||
Environment.getExternalStorageDirectory()+File.separator+"dolphin-emu" + File.separator + "ButtonB.png");
|
||||
Environment.getExternalStorageDirectory()+File.separator+
|
||||
"dolphin-emu" + File.separator + "ButtonB.png");
|
||||
CopyAsset("ButtonStart.png",
|
||||
Environment.getExternalStorageDirectory()+File.separator+"dolphin-emu" + File.separator + "ButtonStart.png");
|
||||
Environment.getExternalStorageDirectory()+File.separator+
|
||||
"dolphin-emu" + File.separator + "ButtonStart.png");
|
||||
CopyAsset("GCPadNew.ini",
|
||||
Environment.getExternalStorageDirectory()+File.separator+
|
||||
"dolphin-emu" + File.separator +"Config"+ File.separator +"GCPadNew.ini");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -87,24 +87,6 @@ void GetStatus(u8 _numPAD, SPADStatus* _pPADStatus)
|
|||
|
||||
// get input
|
||||
((GCPad*)g_plugin.controllers[_numPAD])->GetInput(_pPADStatus);
|
||||
|
||||
#ifdef ANDROID
|
||||
// XXX: This /really/ needs to be moved to a controller interface
|
||||
if (Host_GetKeyState(0))
|
||||
{
|
||||
_pPADStatus->button |= PAD_BUTTON_A;
|
||||
_pPADStatus->analogA = 255;
|
||||
}
|
||||
if (Host_GetKeyState(1))
|
||||
{
|
||||
_pPADStatus->button |= PAD_BUTTON_B;
|
||||
_pPADStatus->analogB = 255;
|
||||
}
|
||||
if (Host_GetKeyState(2))
|
||||
{
|
||||
_pPADStatus->button |= PAD_BUTTON_START;
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
// __________________________________________________________________________________________________
|
||||
|
|
|
@ -92,7 +92,6 @@ if(wxWidgets_FOUND)
|
|||
else()
|
||||
if(ANDROID)
|
||||
set(SRCS Src/Android/TextureLoader.cpp
|
||||
Src/Android/ButtonManager.cpp
|
||||
Src/MainAndroid.cpp)
|
||||
else()
|
||||
set(SRCS Src/MainNoGUI.cpp)
|
||||
|
|
|
@ -21,6 +21,10 @@ elseif(X11_FOUND)
|
|||
set(SRCS ${SRCS}
|
||||
Src/ControllerInterface/SDL/SDL.cpp
|
||||
Src/ControllerInterface/Xlib/Xlib.cpp)
|
||||
elseif(ANDROID)
|
||||
set(SRCS ${SRCS}
|
||||
Src/ControllerInterface/Android/Android.cpp
|
||||
Src/Android/ButtonManager.cpp)
|
||||
endif()
|
||||
|
||||
add_library(inputcommon ${SRCS})
|
||||
|
|
|
@ -0,0 +1,67 @@
|
|||
// Copyright (C) 2003 Dolphin Project.
|
||||
|
||||
// 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, version 2.0.
|
||||
|
||||
// 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 2.0 for more details.
|
||||
|
||||
// A copy of the GPL 2.0 should have been included with the program.
|
||||
// If not, see http://www.gnu.org/licenses/
|
||||
|
||||
// Official SVN repository and contact information can be found at
|
||||
// http://code.google.com/p/dolphin-emu/
|
||||
|
||||
#include "Android.h"
|
||||
|
||||
namespace ciface
|
||||
{
|
||||
|
||||
namespace Android
|
||||
{
|
||||
|
||||
void Init( std::vector<ControllerInterface::Device*>& devices )
|
||||
{
|
||||
devices.push_back(new Touchscreen());
|
||||
}
|
||||
|
||||
// Touchscreens and stuff
|
||||
std::string Touchscreen::GetName() const
|
||||
{
|
||||
return "Touchscreen";
|
||||
}
|
||||
|
||||
std::string Touchscreen::GetSource() const
|
||||
{
|
||||
return "Android";
|
||||
}
|
||||
|
||||
int Touchscreen::GetId() const
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
Touchscreen::Touchscreen()
|
||||
{
|
||||
AddInput(new Button(ButtonManager::BUTTON_A));
|
||||
AddInput(new Button(ButtonManager::BUTTON_B));
|
||||
AddInput(new Button(ButtonManager::BUTTON_START));
|
||||
}
|
||||
// Buttons and stuff
|
||||
|
||||
std::string Touchscreen::Button::GetName() const
|
||||
{
|
||||
std::ostringstream ss;
|
||||
ss << "Button " << (int)m_index;
|
||||
return ss.str();
|
||||
}
|
||||
|
||||
ControlState Touchscreen::Button::GetState() const
|
||||
{
|
||||
return ButtonManager::GetButtonPressed(m_index);
|
||||
}
|
||||
|
||||
}
|
||||
}
|
|
@ -0,0 +1,57 @@
|
|||
// Copyright (C) 2003 Dolphin Project.
|
||||
|
||||
// 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, version 2.0.
|
||||
|
||||
// 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 2.0 for more details.
|
||||
|
||||
// A copy of the GPL 2.0 should have been included with the program.
|
||||
// If not, see http://www.gnu.org/licenses/
|
||||
|
||||
// Official SVN repository and contact information can be found at
|
||||
// http://code.google.com/p/dolphin-emu/
|
||||
#ifndef _CIFACE_ANDROID_H_
|
||||
#define _CIFACE_ANDROID_H_
|
||||
|
||||
#include "../ControllerInterface.h"
|
||||
#include "Android/ButtonManager.h"
|
||||
|
||||
namespace ciface
|
||||
{
|
||||
namespace Android
|
||||
{
|
||||
|
||||
void Init( std::vector<ControllerInterface::Device*>& devices );
|
||||
class Touchscreen : public ControllerInterface::Device
|
||||
{
|
||||
private:
|
||||
class Button : public Input
|
||||
{
|
||||
public:
|
||||
std::string GetName() const;
|
||||
Button(ButtonManager::ButtonType index) : m_index(index) {}
|
||||
ControlState GetState() const;
|
||||
private:
|
||||
const ButtonManager::ButtonType m_index;
|
||||
};
|
||||
|
||||
public:
|
||||
bool UpdateInput() { return true; }
|
||||
bool UpdateOutput() { return true; }
|
||||
|
||||
Touchscreen();
|
||||
~Touchscreen() {}
|
||||
|
||||
std::string GetName() const;
|
||||
int GetId() const;
|
||||
std::string GetSource() const;
|
||||
};
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
#endif
|
|
@ -15,6 +15,9 @@
|
|||
#ifdef CIFACE_USE_SDL
|
||||
#include "SDL/SDL.h"
|
||||
#endif
|
||||
#ifdef CIFACE_USE_ANDROID
|
||||
#include "Android/Android.h"
|
||||
#endif
|
||||
|
||||
#include "Thread.h"
|
||||
|
||||
|
@ -50,6 +53,9 @@ void ControllerInterface::Initialize()
|
|||
#ifdef CIFACE_USE_SDL
|
||||
ciface::SDL::Init(m_devices);
|
||||
#endif
|
||||
#ifdef CIFACE_USE_ANDROID
|
||||
ciface::Android::Init(m_devices);
|
||||
#endif
|
||||
|
||||
m_is_init = true;
|
||||
}
|
||||
|
@ -100,6 +106,9 @@ void ControllerInterface::Shutdown()
|
|||
// TODO: there seems to be some sort of memory leak with SDL, quit isn't freeing everything up
|
||||
SDL_Quit();
|
||||
#endif
|
||||
#ifdef CIFACE_USE_ANDROID
|
||||
// nothing needed
|
||||
#endif
|
||||
|
||||
m_is_init = false;
|
||||
}
|
||||
|
|
|
@ -29,6 +29,9 @@
|
|||
#if defined(__APPLE__)
|
||||
#define CIFACE_USE_OSX
|
||||
#endif
|
||||
#ifdef ANDROID
|
||||
#define CIFACE_USE_ANDROID
|
||||
#endif
|
||||
|
||||
// idk in case i wanted to change it to double or somethin, idk what's best
|
||||
typedef float ControlState;
|
||||
|
|
Loading…
Reference in New Issue