mirror of
https://github.com/MonsterDruide1/OdysseyDecomp
synced 2026-04-23 09:04:21 +00:00
Library/Controller: Implement JoyPadAccelerometerAddon (#933)
This commit is contained in:
parent
ee3a42d98c
commit
032ed048d7
|
|
@ -158818,7 +158818,7 @@ Util/StageInputFunction.o:
|
|||
- offset: 0x57770c
|
||||
size: 140
|
||||
label: _ZNK4sead15RuntimeTypeInfo6DeriveINS_13ControlDeviceEE9isDerivedEPKNS0_9InterfaceE
|
||||
status: NotDecompiled
|
||||
status: Matching
|
||||
lazy: true
|
||||
Util/StageLayoutFunction.o:
|
||||
'.text':
|
||||
|
|
@ -291414,25 +291414,25 @@ Project/Controller/JoyPadAccelerometerAddon.o:
|
|||
label:
|
||||
- _ZN2al24JoyPadAccelerometerAddonC1EPN4sead10ControllerEi
|
||||
- _ZN2al24JoyPadAccelerometerAddonC2EPN4sead10ControllerEi
|
||||
status: NotDecompiled
|
||||
status: Matching
|
||||
- offset: 0xa4d6d0
|
||||
size: 420
|
||||
label: _ZN2al24JoyPadAccelerometerAddon4calcEv
|
||||
status: NotDecompiled
|
||||
status: Matching
|
||||
- offset: 0xa4d874
|
||||
size: 204
|
||||
label: _ZNK4sead18AccelerometerAddon27checkDerivedRuntimeTypeInfoEPKNS_15RuntimeTypeInfo9InterfaceE
|
||||
status: NotDecompiled
|
||||
status: Matching
|
||||
lazy: true
|
||||
- offset: 0xa4d940
|
||||
size: 92
|
||||
label: _ZNK4sead18AccelerometerAddon18getRuntimeTypeInfoEv
|
||||
status: NotDecompiled
|
||||
status: Matching
|
||||
lazy: true
|
||||
- offset: 0xa4d99c
|
||||
size: 4
|
||||
label: _ZN2al24JoyPadAccelerometerAddonD0Ev
|
||||
status: NotDecompiled
|
||||
status: Matching
|
||||
lazy: true
|
||||
Project/Controller/PadDataArcReader.o:
|
||||
'.text':
|
||||
|
|
|
|||
54
lib/al/Library/Controller/JoyPadAccelerometerAddon.cpp
Normal file
54
lib/al/Library/Controller/JoyPadAccelerometerAddon.cpp
Normal file
|
|
@ -0,0 +1,54 @@
|
|||
#include "Library/Controller/JoyPadAccelerometerAddon.h"
|
||||
|
||||
#include <controller/nin/seadNinJoyNpadDevice.h>
|
||||
#include <controller/seadControllerMgr.h>
|
||||
|
||||
#include "Library/Controller/NpadController.h"
|
||||
|
||||
namespace al {
|
||||
JoyPadAccelerometerAddon::JoyPadAccelerometerAddon(sead::Controller* controller, s32 index)
|
||||
: sead::AccelerometerAddon(controller), mIndex(index) {}
|
||||
|
||||
bool JoyPadAccelerometerAddon::calc() {
|
||||
sead::ControllerMgr* mgr = sead::ControllerMgr::instance();
|
||||
sead::NinJoyNpadDevice* npadDevice = mgr->getControlDeviceAs<sead::NinJoyNpadDevice*>();
|
||||
NpadController* npad = static_cast<NpadController*>(mController);
|
||||
|
||||
mIsEnable = false;
|
||||
mAcceleration = {0.0f, 0.0, 0.0f};
|
||||
|
||||
if (!npad->isConnected())
|
||||
return false;
|
||||
|
||||
s64 index = mIndex;
|
||||
if (index >= npad->getSixAxisSensorCount())
|
||||
return false;
|
||||
|
||||
const sead::NinJoyNpadDevice::NpadState& npadState =
|
||||
npadDevice->getNpadState(npad->getNpadId());
|
||||
const nn::hid::SixAxisSensorState& sixAxisState =
|
||||
npadState.mSixAxisSensorStates[index].state[0];
|
||||
|
||||
mAcceleration.set(-sixAxisState.mAcceleration[0], sixAxisState.mAcceleration[2],
|
||||
sixAxisState.mAcceleration[1]);
|
||||
|
||||
if (npadDevice->getNpadJoyHoldType() == nn::hid::NpadJoyHoldType::Horizontal) {
|
||||
nn::hid::NpadStyleTag style = npad->getStyleIndex();
|
||||
if (style == nn::hid::NpadStyleTag::NpadStyleJoyLeft ||
|
||||
style == nn::hid::NpadStyleTag::NpadStyleJoyRight) {
|
||||
f32 temp = -mAcceleration.x;
|
||||
if (style == nn::hid::NpadStyleTag::NpadStyleJoyRight) {
|
||||
mAcceleration.x = -mAcceleration.z;
|
||||
mAcceleration.z = -temp;
|
||||
} else {
|
||||
mAcceleration.x = mAcceleration.z;
|
||||
mAcceleration.z = temp;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
mIsEnable = true;
|
||||
return false;
|
||||
}
|
||||
|
||||
} // namespace al
|
||||
18
lib/al/Library/Controller/JoyPadAccelerometerAddon.h
Normal file
18
lib/al/Library/Controller/JoyPadAccelerometerAddon.h
Normal file
|
|
@ -0,0 +1,18 @@
|
|||
#pragma once
|
||||
|
||||
#include <basis/seadTypes.h>
|
||||
#include <controller/seadAccelerometerAddon.h>
|
||||
|
||||
namespace al {
|
||||
class JoyPadAccelerometerAddon : public sead::AccelerometerAddon {
|
||||
public:
|
||||
JoyPadAccelerometerAddon(sead::Controller* controller, s32 index);
|
||||
|
||||
bool calc() override;
|
||||
|
||||
private:
|
||||
s32 mIndex;
|
||||
};
|
||||
|
||||
static_assert(sizeof(JoyPadAccelerometerAddon) == 0x40);
|
||||
} // namespace al
|
||||
41
lib/al/Library/Controller/NpadController.h
Normal file
41
lib/al/Library/Controller/NpadController.h
Normal file
|
|
@ -0,0 +1,41 @@
|
|||
#pragma once
|
||||
|
||||
#include <basis/seadTypes.h>
|
||||
#include <controller/seadController.h>
|
||||
#include <nn/hid.h>
|
||||
|
||||
namespace nn::hid {
|
||||
struct VibrationDeviceHandle;
|
||||
}
|
||||
|
||||
namespace al {
|
||||
class NpadController : public sead::Controller {
|
||||
SEAD_RTTI_OVERRIDE(NpadController, Controller)
|
||||
public:
|
||||
NpadController(sead::ControllerMgr* mgr);
|
||||
|
||||
bool isConnected() const override;
|
||||
bool isValidNpadId() const;
|
||||
s32 getNpadId() const;
|
||||
void setAnyControllerMode();
|
||||
void setIndexControllerMode(s32 modeIndex);
|
||||
const nn::hid::VibrationDeviceHandle& getVibrationDeviceHandle(s32 index) const;
|
||||
|
||||
nn::hid::NpadStyleTag getStyleIndex() const { return mNpadStyleIndex; }
|
||||
|
||||
s64 getSixAxisSensorCount() const { return mSixAxisSensorCount; }
|
||||
|
||||
private:
|
||||
void calcImpl_() override;
|
||||
|
||||
s32 mControllerModeIndex = -1;
|
||||
s32 mNpadId = -1;
|
||||
nn::hid::NpadStyleTag mNpadStyleIndex = nn::hid::NpadStyleTag::NpadStyleInvalid;
|
||||
s32 mSixAxisSensorCount = 0;
|
||||
s32 _188 = 0;
|
||||
bool mIsConnected = false;
|
||||
s64 mSamplingNumber = 0;
|
||||
};
|
||||
|
||||
static_assert(sizeof(NpadController) == 0x198);
|
||||
} // namespace al
|
||||
Loading…
Reference in a new issue