2
0
mirror of https://github.com/AxioDL/metaforce.git synced 2025-12-14 09:26:09 +00:00

Start integrating new controller classes

This commit is contained in:
2022-03-20 17:30:47 -07:00
parent 22c9b55300
commit e3c8fa1d8f
14 changed files with 379 additions and 165 deletions

View File

@@ -3,6 +3,7 @@
#include <array>
#include "Runtime/Input/CKeyboardMouseController.hpp"
#include "Runtime/Input/CControllerGamepadData.hpp"
#include "Runtime/RetroTypes.hpp"
namespace metaforce {
@@ -30,22 +31,13 @@ struct CFinalInput {
float x18_anaLeftTrigger = 0.0f;
float x1c_anaRightTrigger = 0.0f;
/* These were originally per-axis bools, requiring two logical tests
* at read-time; now they're logical cardinal-direction states
* (negative values indicated) */
bool x20_enableAnaLeftXP : 1 = false;
bool x20_enableAnaLeftNegXP : 1 = false;
bool x21_enableAnaLeftYP : 1 = false;
bool x21_enableAnaLeftNegYP : 1 = false;
bool x22_enableAnaRightXP : 1 = false;
bool x22_enableAnaRightNegXP : 1 = false;
bool x23_enableAnaRightYP : 1 = false;
bool x23_enableAnaRightNegYP : 1 = false;
bool x20_enableAnaLeftXP = false;
bool x21_enableAnaLeftYP = false;
bool x22_enableAnaRightXP = false;
bool x23_enableAnaRightYP = false;
/* These were originally redundantly-compared floats;
* now the logical state is stored directly */
bool x24_anaLeftTriggerP : 1 = false;
bool x28_anaRightTriggerP : 1 = false;
float x24_anaLeftTriggerP;
float x28_anaRightTriggerP;
bool x2c_b24_A : 1 = false;
bool x2c_b25_B : 1 = false;
@@ -79,19 +71,12 @@ struct CFinalInput {
std::array<bool, size_t(aurora::SpecialKey::MAX)> m_PSpecialKeys{};
std::array<bool, 6> m_PMouseButtons{};
float m_leftMul = 1.f;
float m_rightMul = 1.f;
u32 m_which = -1;
CFinalInput();
// CFinalInput(int cIdx, float dt, const boo::DolphinControllerState& data, const CFinalInput& prevInput, float
// leftDiv,
// float rightDiv);
CFinalInput(int cIdx, float dt, const SAuroraControllerState& data, const CFinalInput& prevInput, float leftDiv,
float rightDiv);
CFinalInput(int cIdx, float dt, const CControllerGamepadData& data, float leftDiv, float rightDiv);
CFinalInput(int cIdx, float dt, const CKeyboardMouseControllerData& data, const CFinalInput& prevInput);
CFinalInput& operator|=(const CFinalInput& other);
//CFinalInput& operator|=(const CFinalInput& other);
bool operator==(const CFinalInput& other) const { return memcmp(this, &other, sizeof(CFinalInput)) == 0; }
bool operator!=(const CFinalInput& other) const { return !operator==(other); }
@@ -111,16 +96,16 @@ struct CFinalInput {
bool PDPLeft() const { return x2e_b30_PDPLeft; }
bool PDPDown() const { return x2e_b29_PDPDown; }
bool PDPUp() const { return x2e_b27_PDPUp; }
bool PRTrigger() const { return x28_anaRightTriggerP; }
bool PLTrigger() const { return x24_anaLeftTriggerP; }
bool PRARight() const { return x22_enableAnaRightXP; }
bool PRALeft() const { return x22_enableAnaRightNegXP; }
bool PRADown() const { return x23_enableAnaRightNegYP; }
bool PRAUp() const { return x23_enableAnaRightYP; }
bool PLARight() const { return x20_enableAnaLeftXP; }
bool PLALeft() const { return x20_enableAnaLeftNegXP; }
bool PLADown() const { return x21_enableAnaLeftNegYP; }
bool PLAUp() const { return x21_enableAnaLeftYP; }
bool PRTrigger() const { return x28_anaRightTriggerP > 0.5f; }
bool PLTrigger() const { return x24_anaLeftTriggerP > 0.5f; }
bool PRARight() const { return x10_anaRightX > 0.7f && x22_enableAnaRightXP; }
bool PRALeft() const { return x10_anaRightX < -0.7f && x22_enableAnaRightXP; }
bool PRADown() const { return x14_anaRightY < -0.7f && x23_enableAnaRightYP; }
bool PRAUp() const { return x14_anaRightY > 0.7f && x23_enableAnaRightYP; }
bool PLARight() const { return x8_anaLeftX > 0.7f && x20_enableAnaLeftXP; }
bool PLALeft() const { return x8_anaLeftX < -0.7f && x20_enableAnaLeftXP; }
bool PLADown() const { return xc_anaLeftY < -0.7f && x21_enableAnaLeftYP; }
bool PLAUp() const { return xc_anaLeftY > 0.7f && x21_enableAnaLeftYP; }
bool DStart() const { return x2d_b27_Start; }
bool DR() const { return x2c_b30_R; }
bool DL() const { return x2c_b29_L; }
@@ -174,6 +159,7 @@ struct CFinalInput {
float ARightTrigger() const { return x1c_anaRightTrigger; }
CFinalInput ScaleAnalogueSticks(float leftDiv, float rightDiv) const;
void InitializeAnalog(float leftDiv, float rightDiv);
bool PKey(char k) const { return m_kbm && m_PCharKeys[size_t(k)]; }
bool PSpecialKey(aurora::SpecialKey k) const { return m_kbm && m_PSpecialKeys[size_t(k)]; }