mirror of
https://github.com/dolphin-emu/dolphin.git
synced 2025-07-21 05:09:34 -06:00
Merge pull request #4873 from lioncash/controller-emu
ControllerEmu: Separate ControlGroup from ControllerEmu
This commit is contained in:
@ -2,6 +2,8 @@
|
||||
// Licensed under GPLv2+
|
||||
// Refer to the license.txt file included.
|
||||
|
||||
#include "DolphinWX/Input/InputConfigDiag.h"
|
||||
|
||||
#include <algorithm>
|
||||
#include <array>
|
||||
#include <cctype>
|
||||
@ -38,21 +40,27 @@
|
||||
#include "Common/FileUtil.h"
|
||||
#include "Common/IniFile.h"
|
||||
#include "Common/MsgHandler.h"
|
||||
|
||||
#include "Core/Core.h"
|
||||
#include "Core/HW/GCKeyboard.h"
|
||||
#include "Core/HW/GCPad.h"
|
||||
#include "Core/HW/Wiimote.h"
|
||||
#include "Core/HW/WiimoteEmu/WiimoteEmu.h"
|
||||
#include "Core/HotkeyManager.h"
|
||||
|
||||
#include "DolphinWX/DolphinSlider.h"
|
||||
#include "DolphinWX/Input/ClassicInputConfigDiag.h"
|
||||
#include "DolphinWX/Input/DrumsInputConfigDiag.h"
|
||||
#include "DolphinWX/Input/GuitarInputConfigDiag.h"
|
||||
#include "DolphinWX/Input/InputConfigDiag.h"
|
||||
#include "DolphinWX/Input/NunchukInputConfigDiag.h"
|
||||
#include "DolphinWX/Input/TurntableInputConfigDiag.h"
|
||||
#include "DolphinWX/WxUtils.h"
|
||||
|
||||
#include "InputCommon/ControlReference/ControlReference.h"
|
||||
#include "InputCommon/ControlReference/ExpressionParser.h"
|
||||
#include "InputCommon/ControllerEmu/Control/Control.h"
|
||||
#include "InputCommon/ControllerEmu/ControlGroup/ControlGroup.h"
|
||||
#include "InputCommon/ControllerEmu/ControlGroup/Extension.h"
|
||||
#include "InputCommon/ControllerEmu/ControllerEmu.h"
|
||||
#include "InputCommon/ControllerInterface/ControllerInterface.h"
|
||||
#include "InputCommon/ControllerInterface/Device.h"
|
||||
@ -388,7 +396,7 @@ bool ControlDialog::Validate()
|
||||
{
|
||||
control_reference->expression = WxStrToStr(textctrl->GetValue());
|
||||
|
||||
auto lock = ControllerEmu::GetStateLock();
|
||||
const auto lock = ControllerEmu::EmulatedController::GetStateLock();
|
||||
control_reference->UpdateReference(g_controller_interface,
|
||||
m_parent->GetController()->default_device);
|
||||
|
||||
@ -427,7 +435,7 @@ void ControlDialog::ClearControl(wxCommandEvent&)
|
||||
{
|
||||
control_reference->expression.clear();
|
||||
|
||||
auto lock = ControllerEmu::GetStateLock();
|
||||
const auto lock = ControllerEmu::EmulatedController::GetStateLock();
|
||||
control_reference->UpdateReference(g_controller_interface,
|
||||
m_parent->GetController()->default_device);
|
||||
|
||||
@ -486,7 +494,7 @@ void ControlDialog::SetSelectedControl(wxCommandEvent&)
|
||||
textctrl->WriteText(expr);
|
||||
control_reference->expression = textctrl->GetValue();
|
||||
|
||||
auto lock = ControllerEmu::GetStateLock();
|
||||
const auto lock = ControllerEmu::EmulatedController::GetStateLock();
|
||||
control_reference->UpdateReference(g_controller_interface,
|
||||
m_parent->GetController()->default_device);
|
||||
|
||||
@ -522,7 +530,7 @@ void ControlDialog::AppendControl(wxCommandEvent& event)
|
||||
textctrl->WriteText(expr);
|
||||
control_reference->expression = textctrl->GetValue();
|
||||
|
||||
auto lock = ControllerEmu::GetStateLock();
|
||||
const auto lock = ControllerEmu::EmulatedController::GetStateLock();
|
||||
control_reference->UpdateReference(g_controller_interface,
|
||||
m_parent->GetController()->default_device);
|
||||
|
||||
@ -704,7 +712,7 @@ bool InputConfigDialog::DetectButton(ControlButton* button)
|
||||
wxString expr;
|
||||
GetExpressionForControl(expr, control_name);
|
||||
button->control_reference->expression = expr;
|
||||
auto lock = ControllerEmu::GetStateLock();
|
||||
const auto lock = ControllerEmu::EmulatedController::GetStateLock();
|
||||
button->control_reference->UpdateReference(g_controller_interface,
|
||||
controller->default_device);
|
||||
success = true;
|
||||
@ -834,7 +842,7 @@ void InputConfigDialog::GetProfilePath(std::string& path)
|
||||
}
|
||||
}
|
||||
|
||||
ControllerEmu* InputConfigDialog::GetController() const
|
||||
ControllerEmu::EmulatedController* InputConfigDialog::GetController() const
|
||||
{
|
||||
return controller;
|
||||
}
|
||||
@ -933,8 +941,10 @@ ControlGroupBox::~ControlGroupBox()
|
||||
|
||||
bool ControlGroupBox::HasBitmapHeading() const
|
||||
{
|
||||
return control_group->type == GROUP_TYPE_STICK || control_group->type == GROUP_TYPE_TILT ||
|
||||
control_group->type == GROUP_TYPE_CURSOR || control_group->type == GROUP_TYPE_FORCE;
|
||||
return control_group->type == ControllerEmu::GROUP_TYPE_STICK ||
|
||||
control_group->type == ControllerEmu::GROUP_TYPE_TILT ||
|
||||
control_group->type == ControllerEmu::GROUP_TYPE_CURSOR ||
|
||||
control_group->type == ControllerEmu::GROUP_TYPE_FORCE;
|
||||
}
|
||||
|
||||
ControlGroupBox::ControlGroupBox(ControllerEmu::ControlGroup* const group, wxWindow* const parent,
|
||||
@ -989,10 +999,10 @@ ControlGroupBox::ControlGroupBox(ControllerEmu::ControlGroup* const group, wxWin
|
||||
|
||||
switch (group->type)
|
||||
{
|
||||
case GROUP_TYPE_STICK:
|
||||
case GROUP_TYPE_TILT:
|
||||
case GROUP_TYPE_CURSOR:
|
||||
case GROUP_TYPE_FORCE:
|
||||
case ControllerEmu::GROUP_TYPE_STICK:
|
||||
case ControllerEmu::GROUP_TYPE_TILT:
|
||||
case ControllerEmu::GROUP_TYPE_CURSOR:
|
||||
case ControllerEmu::GROUP_TYPE_FORCE:
|
||||
{
|
||||
wxSize bitmap_size = parent->FromDIP(wxSize(64, 64));
|
||||
m_scale = bitmap_size.GetWidth() / 64.0;
|
||||
@ -1034,7 +1044,7 @@ ControlGroupBox::ControlGroupBox(ControllerEmu::ControlGroup* const group, wxWin
|
||||
Add(h_szr, 0, wxEXPAND | wxLEFT | wxRIGHT, space3);
|
||||
}
|
||||
break;
|
||||
case GROUP_TYPE_BUTTONS:
|
||||
case ControllerEmu::GROUP_TYPE_BUTTONS:
|
||||
{
|
||||
// Draw buttons in rows of 8
|
||||
unsigned int button_cols = group->controls.size() > 8 ? 8 : group->controls.size();
|
||||
@ -1072,17 +1082,17 @@ ControlGroupBox::ControlGroupBox(ControllerEmu::ControlGroup* const group, wxWin
|
||||
Add(static_bitmap, 0, wxALIGN_CENTER_HORIZONTAL | wxLEFT | wxRIGHT, space3);
|
||||
}
|
||||
break;
|
||||
case GROUP_TYPE_MIXED_TRIGGERS:
|
||||
case GROUP_TYPE_TRIGGERS:
|
||||
case GROUP_TYPE_SLIDER:
|
||||
case ControllerEmu::GROUP_TYPE_MIXED_TRIGGERS:
|
||||
case ControllerEmu::GROUP_TYPE_TRIGGERS:
|
||||
case ControllerEmu::GROUP_TYPE_SLIDER:
|
||||
{
|
||||
int height = (int)(12 * group->controls.size());
|
||||
int width = 64;
|
||||
|
||||
if (GROUP_TYPE_MIXED_TRIGGERS == group->type)
|
||||
if (ControllerEmu::GROUP_TYPE_MIXED_TRIGGERS == group->type)
|
||||
width = 64 + 12 + 1;
|
||||
|
||||
if (GROUP_TYPE_TRIGGERS != group->type)
|
||||
if (ControllerEmu::GROUP_TYPE_TRIGGERS != group->type)
|
||||
height /= 2;
|
||||
height += 1;
|
||||
|
||||
@ -1116,7 +1126,7 @@ ControlGroupBox::ControlGroupBox(ControllerEmu::ControlGroup* const group, wxWin
|
||||
Add(static_bitmap, 0, wxALIGN_CENTER_HORIZONTAL | wxLEFT | wxRIGHT, space3);
|
||||
}
|
||||
break;
|
||||
case GROUP_TYPE_EXTENSION:
|
||||
case ControllerEmu::GROUP_TYPE_EXTENSION:
|
||||
{
|
||||
PadSettingExtension* const attachments =
|
||||
new PadSettingExtension(parent, (ControllerEmu::Extension*)group);
|
||||
|
@ -23,10 +23,10 @@
|
||||
#include <wx/spinctrl.h>
|
||||
#include <wx/timer.h>
|
||||
|
||||
#include "InputCommon/ControlReference/ControlReference.h"
|
||||
#include "InputCommon/ControllerEmu/ControllerEmu.h"
|
||||
#include "InputCommon/ControllerEmu/ControlGroup/ControlGroup.h"
|
||||
#include "InputCommon/ControllerInterface/Device.h"
|
||||
|
||||
class ControlReference;
|
||||
class DolphinSlider;
|
||||
class InputConfig;
|
||||
class wxComboBox;
|
||||
@ -35,6 +35,12 @@ class wxStaticBitmap;
|
||||
class wxStaticText;
|
||||
class wxTextCtrl;
|
||||
|
||||
namespace ControllerEmu
|
||||
{
|
||||
class EmulatedController;
|
||||
class Extension;
|
||||
}
|
||||
|
||||
class PadSetting
|
||||
{
|
||||
protected:
|
||||
@ -221,7 +227,7 @@ public:
|
||||
void AdjustBooleanSetting(wxCommandEvent& event);
|
||||
|
||||
void GetProfilePath(std::string& path);
|
||||
ControllerEmu* GetController() const;
|
||||
ControllerEmu::EmulatedController* GetController() const;
|
||||
|
||||
wxComboBox* profile_cbox = nullptr;
|
||||
wxComboBox* device_cbox = nullptr;
|
||||
@ -234,7 +240,7 @@ protected:
|
||||
wxBoxSizer* CreaterResetGroupBox(wxOrientation orientation);
|
||||
wxBoxSizer* CreateProfileChooserGroupBox();
|
||||
|
||||
ControllerEmu* const controller;
|
||||
ControllerEmu::EmulatedController* const controller;
|
||||
|
||||
wxTimer m_update_timer;
|
||||
|
||||
|
@ -22,6 +22,15 @@
|
||||
#include "DolphinWX/Input/InputConfigDiag.h"
|
||||
#include "DolphinWX/WxUtils.h"
|
||||
|
||||
#include "InputCommon/ControllerEmu/Control/Control.h"
|
||||
#include "InputCommon/ControllerEmu/ControlGroup/AnalogStick.h"
|
||||
#include "InputCommon/ControllerEmu/ControlGroup/Buttons.h"
|
||||
#include "InputCommon/ControllerEmu/ControlGroup/ControlGroup.h"
|
||||
#include "InputCommon/ControllerEmu/ControlGroup/Cursor.h"
|
||||
#include "InputCommon/ControllerEmu/ControlGroup/Force.h"
|
||||
#include "InputCommon/ControllerEmu/ControlGroup/Slider.h"
|
||||
#include "InputCommon/ControllerEmu/ControlGroup/Tilt.h"
|
||||
#include "InputCommon/ControllerEmu/ControlGroup/Triggers.h"
|
||||
#include "InputCommon/ControllerEmu/ControllerEmu.h"
|
||||
#include "InputCommon/ControllerInterface/ControllerInterface.h"
|
||||
#include "InputCommon/ControllerInterface/Device.h"
|
||||
@ -150,9 +159,9 @@ static void DrawControlGroupBox(wxGraphicsContext* gc, ControlGroupBox* g)
|
||||
|
||||
switch (g->control_group->type)
|
||||
{
|
||||
case GROUP_TYPE_TILT:
|
||||
case GROUP_TYPE_STICK:
|
||||
case GROUP_TYPE_CURSOR:
|
||||
case ControllerEmu::GROUP_TYPE_TILT:
|
||||
case ControllerEmu::GROUP_TYPE_STICK:
|
||||
case ControllerEmu::GROUP_TYPE_CURSOR:
|
||||
{
|
||||
// this is starting to be a mess combining all these in one case
|
||||
|
||||
@ -160,19 +169,19 @@ static void DrawControlGroupBox(wxGraphicsContext* gc, ControlGroupBox* g)
|
||||
|
||||
switch (g->control_group->type)
|
||||
{
|
||||
case GROUP_TYPE_STICK:
|
||||
case ControllerEmu::GROUP_TYPE_STICK:
|
||||
((ControllerEmu::AnalogStick*)g->control_group)->GetState(&x, &y);
|
||||
break;
|
||||
case GROUP_TYPE_TILT:
|
||||
case ControllerEmu::GROUP_TYPE_TILT:
|
||||
((ControllerEmu::Tilt*)g->control_group)->GetState(&x, &y);
|
||||
break;
|
||||
case GROUP_TYPE_CURSOR:
|
||||
case ControllerEmu::GROUP_TYPE_CURSOR:
|
||||
((ControllerEmu::Cursor*)g->control_group)->GetState(&x, &y, &z);
|
||||
break;
|
||||
}
|
||||
|
||||
// ir cursor forward movement
|
||||
if (GROUP_TYPE_CURSOR == g->control_group->type)
|
||||
if (ControllerEmu::GROUP_TYPE_CURSOR == g->control_group->type)
|
||||
{
|
||||
gc->SetBrush(z ? *wxRED_BRUSH : *wxGREY_BRUSH);
|
||||
wxGraphicsPath path = gc->CreatePath();
|
||||
@ -182,7 +191,7 @@ static void DrawControlGroupBox(wxGraphicsContext* gc, ControlGroupBox* g)
|
||||
|
||||
// input zone
|
||||
gc->SetPen(*wxLIGHT_GREY_PEN);
|
||||
if (GROUP_TYPE_STICK == g->control_group->type)
|
||||
if (ControllerEmu::GROUP_TYPE_STICK == g->control_group->type)
|
||||
{
|
||||
gc->SetBrush(wxColour(0xDDDDDD)); // Light Gray
|
||||
|
||||
@ -222,9 +231,12 @@ static void DrawControlGroupBox(wxGraphicsContext* gc, ControlGroupBox* g)
|
||||
gc->DrawRectangle(16, 16, 32, 32);
|
||||
}
|
||||
|
||||
if (GROUP_TYPE_CURSOR != g->control_group->type)
|
||||
if (ControllerEmu::GROUP_TYPE_CURSOR != g->control_group->type)
|
||||
{
|
||||
int deadzone_idx = g->control_group->type == GROUP_TYPE_STICK ? SETTING_DEADZONE : 0;
|
||||
const int deadzone_idx = g->control_group->type == ControllerEmu::GROUP_TYPE_STICK ?
|
||||
ControllerEmu::AnalogStick::SETTING_DEADZONE :
|
||||
0;
|
||||
|
||||
wxGraphicsPath path = gc->CreatePath();
|
||||
path.AddCircle(VIS_BITMAP_SIZE / 2, VIS_BITMAP_SIZE / 2,
|
||||
g->control_group->numeric_settings[deadzone_idx]->GetValue() *
|
||||
@ -255,7 +267,7 @@ static void DrawControlGroupBox(wxGraphicsContext* gc, ControlGroupBox* g)
|
||||
}
|
||||
break;
|
||||
|
||||
case GROUP_TYPE_FORCE:
|
||||
case ControllerEmu::GROUP_TYPE_FORCE:
|
||||
{
|
||||
ControlState raw_dot[3];
|
||||
ControlState adj_dot[3];
|
||||
@ -320,7 +332,7 @@ static void DrawControlGroupBox(wxGraphicsContext* gc, ControlGroupBox* g)
|
||||
}
|
||||
break;
|
||||
|
||||
case GROUP_TYPE_BUTTONS:
|
||||
case ControllerEmu::GROUP_TYPE_BUTTONS:
|
||||
{
|
||||
const unsigned int button_count = static_cast<unsigned int>(g->control_group->controls.size());
|
||||
std::vector<unsigned int> bitmasks(button_count);
|
||||
@ -349,7 +361,7 @@ static void DrawControlGroupBox(wxGraphicsContext* gc, ControlGroupBox* g)
|
||||
}
|
||||
break;
|
||||
|
||||
case GROUP_TYPE_TRIGGERS:
|
||||
case ControllerEmu::GROUP_TYPE_TRIGGERS:
|
||||
{
|
||||
const unsigned int trigger_count = static_cast<unsigned int>(g->control_group->controls.size());
|
||||
std::vector<ControlState> trigs(trigger_count);
|
||||
@ -391,7 +403,7 @@ static void DrawControlGroupBox(wxGraphicsContext* gc, ControlGroupBox* g)
|
||||
}
|
||||
break;
|
||||
|
||||
case GROUP_TYPE_MIXED_TRIGGERS:
|
||||
case ControllerEmu::GROUP_TYPE_MIXED_TRIGGERS:
|
||||
{
|
||||
const unsigned int trigger_count = ((unsigned int)(g->control_group->controls.size() / 2));
|
||||
|
||||
@ -431,7 +443,7 @@ static void DrawControlGroupBox(wxGraphicsContext* gc, ControlGroupBox* g)
|
||||
}
|
||||
break;
|
||||
|
||||
case GROUP_TYPE_SLIDER:
|
||||
case ControllerEmu::GROUP_TYPE_SLIDER:
|
||||
{
|
||||
const ControlState deadzone = g->control_group->numeric_settings[0]->GetValue();
|
||||
|
||||
@ -488,7 +500,7 @@ void InputConfigDialog::UpdateBitmaps(wxTimerEvent& WXUNUSED(event))
|
||||
g_controller_interface.UpdateInput();
|
||||
|
||||
wxMemoryDC dc;
|
||||
auto lock = ControllerEmu::GetStateLock();
|
||||
const auto lock = ControllerEmu::EmulatedController::GetStateLock();
|
||||
for (ControlGroupBox* g : control_groups)
|
||||
{
|
||||
// Only if this control group has a bitmap
|
||||
|
Reference in New Issue
Block a user