Skip to content

Commit

Permalink
Add a Androind ControllerInterface class for allowing input in a non-…
Browse files Browse the repository at this point in the history
…hacky way. Add a default GCPad.ini file so it actually works.
  • Loading branch information
Sonicadvance1 committed Apr 15, 2013
1 parent 37b6797 commit 44bbb54
Show file tree
Hide file tree
Showing 11 changed files with 183 additions and 33 deletions.
29 changes: 29 additions & 0 deletions Source/Android/assets/GCPadNew.ini
@@ -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]
26 changes: 13 additions & 13 deletions Source/Android/src/org/dolphinemu/dolphinemu/DolphinEmulator.java
Expand Up @@ -59,6 +59,7 @@ private void copyFile(InputStream in, OutputStream out) throws IOException {
out.write(buffer, 0, read);
}
}

@Override
public void onStop()
{
Expand All @@ -85,34 +86,33 @@ public void onResume()
@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(
Environment.getExternalStorageDirectory()+File.separator+"dolphin-emu" + File.separator + "ButtonStart.png");
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");
}
}
}
Expand Down
18 changes: 0 additions & 18 deletions Source/Core/Core/Src/HW/GCPad.cpp
Expand Up @@ -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
}

// __________________________________________________________________________________________________
Expand Down
1 change: 0 additions & 1 deletion Source/Core/DolphinWX/CMakeLists.txt
Expand Up @@ -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)
Expand Down
4 changes: 4 additions & 0 deletions Source/Core/InputCommon/CMakeLists.txt
Expand Up @@ -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);
}

}
}
57 changes: 57 additions & 0 deletions Source/Core/InputCommon/Src/ControllerInterface/Android/Android.h
@@ -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
Expand Up @@ -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"

Expand Down Expand Up @@ -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;
}
Expand Down Expand Up @@ -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;
}
Expand Down
Expand Up @@ -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;

Expand Down

0 comments on commit 44bbb54

Please sign in to comment.