mirror of
https://github.com/cemu-project/Cemu.git
synced 2025-12-19 04:37:05 +00:00
Add all the files
This commit is contained in:
parent
e3db07a16a
commit
d60742f52b
1445 changed files with 430238 additions and 0 deletions
88
src/input/api/ControllerProvider.h
Normal file
88
src/input/api/ControllerProvider.h
Normal file
|
|
@ -0,0 +1,88 @@
|
|||
#pragma once
|
||||
|
||||
#include "input/api/InputAPI.h"
|
||||
|
||||
class ControllerBase;
|
||||
|
||||
struct ControllerProviderSettings
|
||||
{
|
||||
virtual ~ControllerProviderSettings() = default;
|
||||
virtual bool operator==(const ControllerProviderSettings&) const = 0;
|
||||
};
|
||||
|
||||
class ControllerProviderBase
|
||||
{
|
||||
public:
|
||||
ControllerProviderBase() = default;
|
||||
virtual ~ControllerProviderBase() = default;
|
||||
|
||||
virtual InputAPI::Type api() const = 0;
|
||||
std::string_view api_name() const { return to_string(api()); }
|
||||
|
||||
virtual std::vector<std::shared_ptr<ControllerBase>> get_controllers() = 0;
|
||||
|
||||
virtual bool has_settings() const
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
virtual bool operator==(const ControllerProviderBase& p) const
|
||||
{
|
||||
return api() == p.api();
|
||||
}
|
||||
virtual bool operator==(const ControllerProviderSettings& p) const
|
||||
{
|
||||
return false;
|
||||
}
|
||||
};
|
||||
|
||||
using ControllerProviderPtr = std::shared_ptr<ControllerProviderBase>;
|
||||
|
||||
template <typename TSettings>
|
||||
class ControllerProvider : public ControllerProviderBase
|
||||
{
|
||||
using base_type = ControllerProviderBase;
|
||||
public:
|
||||
ControllerProvider() = default;
|
||||
|
||||
ControllerProvider(const TSettings& settings)
|
||||
: m_settings(settings)
|
||||
{}
|
||||
|
||||
bool has_settings() const override
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
const TSettings& get_settings() const
|
||||
{
|
||||
return m_settings;
|
||||
}
|
||||
|
||||
bool operator==(const ControllerProviderBase& p) const override
|
||||
{
|
||||
if (!base_type::operator==(p))
|
||||
return false;
|
||||
|
||||
if (!p.has_settings())
|
||||
return false;
|
||||
|
||||
auto* ptr = dynamic_cast<const ControllerProvider<TSettings>*>(&p);
|
||||
if (!ptr)
|
||||
return false;
|
||||
|
||||
return base_type::operator==(p) && m_settings == ptr->m_settings;
|
||||
}
|
||||
|
||||
bool operator==(const ControllerProviderSettings& p) const override
|
||||
{
|
||||
auto* ptr = dynamic_cast<const TSettings*>(&p);
|
||||
if (!ptr)
|
||||
return false;
|
||||
|
||||
return m_settings == *ptr;
|
||||
}
|
||||
|
||||
protected:
|
||||
TSettings m_settings{};
|
||||
};
|
||||
Loading…
Add table
Add a link
Reference in a new issue