mirror of https://github.com/zeldaret/tp.git
134 lines
4.0 KiB
C++
134 lines
4.0 KiB
C++
/**
|
|
* m_Do_controller_pad.cpp
|
|
* JUTGamePad Wrapper and Conversion
|
|
*/
|
|
|
|
#include "m_Do/m_Do_controller_pad.h"
|
|
#include "SSystem/SComponent/c_lib.h"
|
|
#include "f_ap/f_ap_game.h"
|
|
#include "m_Do/m_Do_Reset.h"
|
|
#include "m_Do/m_Do_main.h"
|
|
|
|
JUTGamePad* mDoCPd_c::m_gamePad[4];
|
|
|
|
interface_of_controller_pad mDoCPd_c::m_cpadInfo[4];
|
|
|
|
void mDoCPd_c::create() {
|
|
#if PLATFORM_GCN || PLATFORM_SHIELD
|
|
JUTGamePad* pad = new JUTGamePad(JUTGamePad::EPort1);
|
|
m_gamePad[0] = pad;
|
|
#endif
|
|
|
|
if (mDoMain::developmentMode != 0) {
|
|
#if PLATFORM_WII
|
|
m_gamePad[0] = new JUTGamePad(JUTGamePad::EPort1);
|
|
#endif
|
|
|
|
m_gamePad[1] = new JUTGamePad(JUTGamePad::EPort2);
|
|
m_gamePad[2] = new JUTGamePad(JUTGamePad::EPort3);
|
|
m_gamePad[3] = new JUTGamePad(JUTGamePad::EPort4);
|
|
} else {
|
|
#if PLATFORM_WII
|
|
m_gamePad[0] = NULL;
|
|
#endif
|
|
|
|
m_gamePad[1] = NULL;
|
|
m_gamePad[2] = NULL;
|
|
m_gamePad[3] = NULL;
|
|
}
|
|
|
|
#if PLATFORM_GCN || PLATFORM_SHIELD
|
|
if (!mDoRst::isReset()) {
|
|
JUTGamePad::clearResetOccurred();
|
|
JUTGamePad::setResetCallback(mDoRst_resetCallBack, NULL);
|
|
}
|
|
#endif
|
|
JUTGamePad::setAnalogMode(3);
|
|
|
|
interface_of_controller_pad* cpad = &m_cpadInfo[0];
|
|
for (int i = 0; i < 4; i++) {
|
|
cpad->mTrigLockL = false;
|
|
cpad->mHoldLockL = false;
|
|
cpad->mTrigLockR = false;
|
|
cpad->mHoldLockR = false;
|
|
cpad++;
|
|
}
|
|
}
|
|
|
|
void mDoCPd_c::read() {
|
|
JUTGamePad::read();
|
|
|
|
if (!mDoRst::isReset() && mDoRst::is3ButtonReset()) {
|
|
JUTGamePad* pad = JUTGamePad::getGamePad(mDoRst::get3ButtonResetPort());
|
|
|
|
if (!pad->isPushing3ButtonReset()) {
|
|
mDoRst::off3ButtonReset();
|
|
}
|
|
}
|
|
|
|
JUTGamePad** pad = m_gamePad;
|
|
interface_of_controller_pad* interface = m_cpadInfo;
|
|
|
|
for (u32 i = 0; i < 4; i++) {
|
|
if (*pad == NULL) {
|
|
cLib_memSet(interface, 0, sizeof(interface_of_controller_pad));
|
|
} else {
|
|
convert(interface, *pad);
|
|
LRlockCheck(interface);
|
|
}
|
|
|
|
pad++;
|
|
interface++;
|
|
}
|
|
}
|
|
|
|
void mDoCPd_c::convert(interface_of_controller_pad* pInterface, JUTGamePad* pPad) {
|
|
pInterface->mButtonFlags = pPad->getButton();
|
|
pInterface->mPressedButtonFlags = pPad->getTrigger();
|
|
pInterface->mMainStickPosX = pPad->getMainStickX();
|
|
pInterface->mMainStickPosY = pPad->getMainStickY();
|
|
pInterface->mMainStickValue = pPad->getMainStickValue();
|
|
pInterface->mMainStickAngle = pPad->getMainStickAngle();
|
|
pInterface->mCStickPosX = pPad->getSubStickX();
|
|
pInterface->mCStickPosY = pPad->getSubStickY();
|
|
pInterface->mCStickValue = pPad->getSubStickValue();
|
|
pInterface->mCStickAngle = pPad->getSubStickAngle();
|
|
|
|
mDoCPd_ANALOG_CONV(pPad->getAnalogA(), pInterface->mAnalogA);
|
|
mDoCPd_ANALOG_CONV(pPad->getAnalogB(), pInterface->mAnalogB);
|
|
mDoCPd_TRIGGER_CONV(pPad->getAnalogL(), pInterface->mTriggerLeft);
|
|
mDoCPd_TRIGGER_CONV(pPad->getAnalogR(), pInterface->mTriggerRight);
|
|
|
|
pInterface->mGamepadErrorFlags = pPad->getErrorStatus();
|
|
}
|
|
|
|
void mDoCPd_c::LRlockCheck(interface_of_controller_pad* interface) {
|
|
f32 trig_left = interface->mTriggerLeft;
|
|
interface->mTrigLockL = false;
|
|
interface->mTrigLockR = false;
|
|
|
|
if (trig_left > fapGmHIO_getLROnValue()) {
|
|
if (interface->mHoldLockL != true) {
|
|
interface->mTrigLockL = true;
|
|
}
|
|
interface->mHoldLockL = true;
|
|
} else if (trig_left < fapGmHIO_getLROffValue()) {
|
|
interface->mHoldLockL = false;
|
|
}
|
|
|
|
f32 trig_right = interface->mTriggerRight;
|
|
if (trig_right > fapGmHIO_getLROnValue()) {
|
|
if (interface->mHoldLockR != true) {
|
|
interface->mTrigLockR = true;
|
|
}
|
|
interface->mHoldLockR = true;
|
|
} else if (trig_right < fapGmHIO_getLROffValue()) {
|
|
interface->mHoldLockR = false;
|
|
}
|
|
}
|
|
|
|
void mDoCPd_c::recalibrate(void) {
|
|
JUTGamePad::clearForReset();
|
|
JUTGamePad::CRumble::setEnabled(PAD_CHAN3_BIT | PAD_CHAN2_BIT | PAD_CHAN1_BIT | PAD_CHAN0_BIT);
|
|
}
|