mirror of
https://github.com/zeldaret/tww.git
synced 2026-07-30 07:45:16 -04:00
181 lines
6.8 KiB
C++
181 lines
6.8 KiB
C++
//
|
|
// Generated by dtk
|
|
// Translation Unit: m_Do_controller_pad.cpp
|
|
//
|
|
|
|
#include "m_Do/m_Do_controller_pad.h"
|
|
#include "JSystem/JUtility/JUTGba.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_gba_com.h"
|
|
#include "m_Do/m_Do_main.h"
|
|
|
|
JUTGamePad* g_mDoCPd_gamePad[4];
|
|
interface_of_controller_pad g_mDoCPd_cpadInfo[4];
|
|
|
|
inline void mDoCPd_ANALOG_CONV(u8 analog, f32& param_1) {
|
|
param_1 = analog * (1.0f / 15.0f);
|
|
if (param_1 > 1.0f) {
|
|
param_1 = 1.0f;
|
|
}
|
|
}
|
|
|
|
inline void mDoCPd_TRIGGER_CONV(u8 analog, f32& param_1) {
|
|
param_1 = analog * 0.0071428571827709675f;
|
|
if (param_1 > 1.0f) {
|
|
param_1 = 1.0f;
|
|
}
|
|
}
|
|
|
|
#define MASK_INSERT_BUTTON(field, value, fieldshift, valueshift) \
|
|
temp = (bool)(((value) & (1 << valueshift))); \
|
|
(field) = ((temp << fieldshift) & (1 << fieldshift)) | ((field) & ~(1 << fieldshift))
|
|
|
|
/* 80007598-800078C0 .text mDoCPd_Convert__FP27interface_of_controller_padP10JUTGamePad */
|
|
static s32 mDoCPd_Convert(interface_of_controller_pad* pInterface, JUTGamePad* pPad) {
|
|
// the temp var stuff is hacky but seems required for matching codegen, including the !!temp at the end
|
|
BOOL temp;
|
|
MASK_INSERT_BUTTON(pInterface->mButtonHold0, pPad->mButton.mButton, 4, 3);
|
|
MASK_INSERT_BUTTON(pInterface->mButtonHold0, pPad->mButton.mButton, 5, 2);
|
|
MASK_INSERT_BUTTON(pInterface->mButtonHold0, pPad->mButton.mButton, 7, 0);
|
|
MASK_INSERT_BUTTON(pInterface->mButtonHold0, pPad->mButton.mButton, 6, 1);
|
|
MASK_INSERT_BUTTON(pInterface->mButtonHold0, pPad->mButton.mButton, 3, 4);
|
|
MASK_INSERT_BUTTON(pInterface->mButtonHold0, pPad->mButton.mButton, 2, 5);
|
|
MASK_INSERT_BUTTON(pInterface->mButtonHold0, pPad->mButton.mButton, 1, 6);
|
|
MASK_INSERT_BUTTON(pInterface->mButtonHold0, pPad->mButton.mButton, 0, 8);
|
|
MASK_INSERT_BUTTON(pInterface->mButtonHold1, pPad->mButton.mButton, 7, 9);
|
|
MASK_INSERT_BUTTON(pInterface->mButtonHold1, pPad->mButton.mButton, 6, 10);
|
|
MASK_INSERT_BUTTON(pInterface->mButtonHold1, pPad->mButton.mButton, 5, 11);
|
|
MASK_INSERT_BUTTON(pInterface->mButtonHold1, pPad->mButton.mButton, 4, 12);
|
|
MASK_INSERT_BUTTON(pInterface->mButtonTrig0, pPad->mButton.mTrigger, 4, 3);
|
|
MASK_INSERT_BUTTON(pInterface->mButtonTrig0, pPad->mButton.mTrigger, 5, 2);
|
|
MASK_INSERT_BUTTON(pInterface->mButtonTrig0, pPad->mButton.mTrigger, 7, 0);
|
|
MASK_INSERT_BUTTON(pInterface->mButtonTrig0, pPad->mButton.mTrigger, 6, 1);
|
|
MASK_INSERT_BUTTON(pInterface->mButtonTrig0, pPad->mButton.mTrigger, 3, 4);
|
|
MASK_INSERT_BUTTON(pInterface->mButtonTrig0, pPad->mButton.mTrigger, 2, 5);
|
|
MASK_INSERT_BUTTON(pInterface->mButtonTrig0, pPad->mButton.mTrigger, 1, 6);
|
|
MASK_INSERT_BUTTON(pInterface->mButtonTrig0, pPad->mButton.mTrigger, 0, 8);
|
|
MASK_INSERT_BUTTON(pInterface->mButtonTrig1, pPad->mButton.mTrigger, 7, 9);
|
|
MASK_INSERT_BUTTON(pInterface->mButtonTrig1, pPad->mButton.mTrigger, 6, 10);
|
|
MASK_INSERT_BUTTON(pInterface->mButtonTrig1, pPad->mButton.mTrigger, 5, 11);
|
|
MASK_INSERT_BUTTON(pInterface->mButtonTrig1, pPad->mButton.mTrigger, 4, 12);
|
|
temp = !!temp;
|
|
|
|
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();
|
|
return 1;
|
|
}
|
|
|
|
/* 800078C0-80007A70 .text mDoCPd_Read__Fv */
|
|
int mDoCPd_Read() {
|
|
JUTGamePad::read();
|
|
|
|
if (!mDoRst::isReset() && mDoRst::is3ButtonReset()) {
|
|
JUTGamePad* pad = JUTGamePad::getGamePad(mDoRst::get3ButtonResetPort());
|
|
|
|
if (!pad->isPushing3ButtonReset()) {
|
|
mDoRst::off3ButtonReset();
|
|
}
|
|
}
|
|
|
|
JUTGamePad** pad = g_mDoCPd_gamePad;
|
|
interface_of_controller_pad* interface = g_mDoCPd_cpadInfo;
|
|
|
|
for (int i = 0; i < 4; i++) {
|
|
if (*pad == NULL) {
|
|
cLib_memSet(interface++, 0, sizeof(interface_of_controller_pad));
|
|
} else {
|
|
mDoCPd_Convert(interface++, *pad);
|
|
}
|
|
|
|
pad++;
|
|
}
|
|
|
|
for (int i = 0; i < 4; i++) {
|
|
f32 threshold_lo = g_HIO.mTriggerThreshLo;
|
|
f32 threshold_hi = g_HIO.mTriggerThreshHi;
|
|
|
|
f32 trigL = g_mDoCPd_cpadInfo[i].mTriggerLeft;
|
|
g_mDoCPd_cpadInfo[i].mTrigLockL = false;
|
|
g_mDoCPd_cpadInfo[i].mTrigLockR = false;
|
|
|
|
if (trigL > threshold_lo) {
|
|
if (g_mDoCPd_cpadInfo[i].mHoldLockL != true) {
|
|
g_mDoCPd_cpadInfo[i].mTrigLockL = true;
|
|
}
|
|
|
|
g_mDoCPd_cpadInfo[i].mHoldLockL = true;
|
|
} else if (trigL < threshold_hi) {
|
|
g_mDoCPd_cpadInfo[i].mHoldLockL = false;
|
|
}
|
|
|
|
f32 trigR = g_mDoCPd_cpadInfo[i].mTriggerRight;
|
|
if (trigR > threshold_lo) {
|
|
if (g_mDoCPd_cpadInfo[i].mHoldLockR != true) {
|
|
g_mDoCPd_cpadInfo[i].mTrigLockR = true;
|
|
}
|
|
|
|
g_mDoCPd_cpadInfo[i].mHoldLockR = true;
|
|
} else if (trigR < threshold_hi) {
|
|
g_mDoCPd_cpadInfo[i].mHoldLockR = false;
|
|
}
|
|
}
|
|
|
|
g_mDoGaC_gbaCom.mDoGaC_Connect();
|
|
return 1;
|
|
}
|
|
|
|
/* 80007A70-80007BBC .text mDoCPd_Create__Fv */
|
|
// NONMATCHING - weird ending
|
|
int mDoCPd_Create() {
|
|
JUTGamePad::mSuppressPadReset = 1;
|
|
|
|
JUTGamePad* pad = new JUTGamePad(JUTGamePad::Port_1);
|
|
g_mDoCPd_gamePad[0] = pad;
|
|
g_mDoCPd_gamePad[1] = NULL;
|
|
|
|
if (mDoMain::developmentMode) {
|
|
g_mDoCPd_gamePad[2] = new JUTGamePad(JUTGamePad::Port_3);
|
|
g_mDoCPd_gamePad[3] = new JUTGamePad(JUTGamePad::Port_4);
|
|
} else {
|
|
g_mDoCPd_gamePad[2] = NULL;
|
|
g_mDoCPd_gamePad[3] = NULL;
|
|
}
|
|
|
|
JUTGamePad::setAnalogMode(3);
|
|
|
|
#if VERSION == VERSION_JPN
|
|
JUTGamePad::clearResetOccurred();
|
|
JUTGamePad::setResetCallback(mDoRst_resetCallBack, NULL);
|
|
#else
|
|
if (!mDoRst::isReset()) {
|
|
JUTGamePad::clearResetOccurred();
|
|
JUTGamePad::setResetCallback(mDoRst_resetCallBack, NULL);
|
|
}
|
|
#endif
|
|
|
|
JUTGba::create();
|
|
g_mDoGaC_gbaCom.mDoGaC_Initial(TestDataManager, 16);
|
|
|
|
for (int i = 0; i < 4; i++) {
|
|
g_mDoCPd_cpadInfo[i].mHoldLockL = g_mDoCPd_cpadInfo[i].mTrigLockL = false;
|
|
g_mDoCPd_cpadInfo[i].mHoldLockR = g_mDoCPd_cpadInfo[i].mTrigLockR = false;
|
|
}
|
|
|
|
return 1;
|
|
}
|