mirror of
https://github.com/MonsterDruide1/OdysseyDecomp
synced 2026-04-26 10:34:30 +00:00
55 lines
1.8 KiB
C++
55 lines
1.8 KiB
C++
#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
|