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:
Ryan Houdek 2013-04-14 23:02:53 -05:00
parent 37b67971e7
commit 44bbb54a62
11 changed files with 183 additions and 33 deletions

View File

@ -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]

View File

@ -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");
directory.mkdirs();
}
catch (Exception ex)
{
Log.w("me", ex.toString());
}
File directory = new File(
Environment.getExternalStorageDirectory()+File.separator+"dolphin-emu"+File.separator+"Config");
directory.mkdirs();
// 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");
}
}
}

View File

@ -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
}
// __________________________________________________________________________________________________

View File

@ -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)

View File

@ -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})

View File

@ -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);
}
}
}

View File

@ -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

View File

@ -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;
}

View File

@ -29,7 +29,10 @@
#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;