mirror of
https://github.com/cemu-project/Cemu.git
synced 2025-01-28 01:25:32 +01:00
31 lines
798 B
C
31 lines
798 B
C
|
#pragma once
|
|||
|
|
|||
|
#include <bitset>
|
|||
|
#include <glm/vec2.hpp>
|
|||
|
|
|||
|
struct ControllerState
|
|||
|
{
|
|||
|
// when does a axis counts as pressed
|
|||
|
constexpr static float kAxisThreshold = 0.1f;
|
|||
|
|
|||
|
// on the real console the stick x or y values never really reach 0.0 if one of the axis is moved
|
|||
|
// some games rely on this due to incorrectly checking if the stick is tilted via if (vstick.x != 0 && vstick.y != 0)
|
|||
|
// here we simulate a slight bias if the axis is almost perfectly centered
|
|||
|
constexpr static float kMinAxisValue = 0.0000001f;
|
|||
|
|
|||
|
// [-1; 1]
|
|||
|
glm::vec2 axis{ };
|
|||
|
glm::vec2 rotation{ };
|
|||
|
glm::vec2 trigger{ };
|
|||
|
|
|||
|
std::bitset<256> buttons{};
|
|||
|
|
|||
|
uint64 last_state = 0;
|
|||
|
|
|||
|
bool operator==(const ControllerState& other) const;
|
|||
|
bool operator!=(const ControllerState& other) const
|
|||
|
{
|
|||
|
return !(*this == other);
|
|||
|
}
|
|||
|
};
|