Basic InputCommon setup

This commit is contained in:
Daniel Stuart Baxter 2015-05-23 21:42:48 -05:00
parent 99b1f868a3
commit 82b9dff712
5 changed files with 119 additions and 0 deletions

View file

@ -2,6 +2,7 @@
include_directories(.) include_directories(.)
add_subdirectory(common) add_subdirectory(common)
add_subdirectory(input_common)
add_subdirectory(core) add_subdirectory(core)
add_subdirectory(video_core) add_subdirectory(video_core)
if (ENABLE_GLFW) if (ENABLE_GLFW)

View file

@ -0,0 +1,3 @@
set(SRCS input_common.cpp)
add_library(input_common STATIC ${SRCS})

View file

@ -0,0 +1,36 @@
// Copyright 2015 Citra Emulator Project
// Licensed under GPLv2 or any later version
// Refer to the license.txt file included.
#pragma once
#include "common/common_types.h"
namespace InputCommon {
enum ControllerButtons {
A = 0,
B,
X,
Y,
L,
R,
ZL,
ZR,
START,
SELECT,
HOME,
DPAD_LEFT,
DPAD_RIGHT,
DPAD_UP,
DPAD_DOWN
};
struct ControllerState {
bool buttons[15];
s16 circle_pad_x;
s16 circle_pad_y;
u16 touch_screen_x;
u16 touch_screen_y;
};
} //namespace

View file

@ -0,0 +1,32 @@
// Copyright 2015 Citra Emulator Project
// Licensed under GPLv2 or any later version
// Refer to the license.txt file included.
#include "input_common/input_common.h"
namespace InputCommon {
ControllerBase::ControllerBase() {
device_name = "None";
//Make sure internal 3DS input is in a neutral state before continuing
for(int x = 0; x < 15; x++) {
controller_state.buttons[x] = false;
}
controller_state.circle_pad_x = 0;
controller_state.circle_pad_y = 0;
controller_state.touch_screen_x = 0;
controller_state.touch_screen_y = 0;
}
std::string ControllerBase::GetDeviceName() const {
return device_name;
}
//Set to nullptr until initialized by a backend
ControllerBase* g_user_input = nullptr;
} // namespace

View file

@ -0,0 +1,47 @@
// Copyright 2015 Citra Emulator Project
// Licensed under GPLv2 or any later version
// Refer to the license.txt file included.
#pragma once
#include "common/common_types.h"
#include "controller_state.h"
#include "core/hle/service/hid/hid.h"
namespace InputCommon {
class ControllerBase {
public:
ControllerBase();
virtual ~ControllerBase();
///Initializes input based on specific backends
virtual bool Init() = 0;
///Grabs a list of devices supported by the backend
virtual void DiscoverDevices() = 0;
///Grab and process input
virtual void Poll() = 0;
///Shuts down all backend related data
virtual void ShutDown() = 0;
///Returns internal name of currently selected device. Expose this to the UI
std::string GetDeviceName() const;
private:
///Internal view this specific object will have of 3DS input states, NOT the same as Service::HID::PadState!
ControllerState controller_state;
///Internal name of currently selected device
std::string device_name;
};
///InputCommon 'plugin'
extern ControllerBase* g_user_input;
} // namespace