mirror of
https://github.com/TwilitRealm/dusklight
synced 2026-05-24 15:00:55 -04:00
cb436a727b
* m_Do_controller_pad split * Attempt to match and match mDoCPd_c::recalibrate * Fix Merge Errors * clang-format Co-authored-by: Pheenoh <pheenoh@gmail.com>
194 lines
5.0 KiB
C++
194 lines
5.0 KiB
C++
#include "d/d_lib/d_lib.h"
|
|
#include "JSystem/JUtility/JUTGamePad/JUTGamePad.h"
|
|
#include "d/d_event/d_event/d_event.h"
|
|
#include "m_Do/m_Do_controller_pad/m_Do_controller_pad.h"
|
|
#include "os/OS.h"
|
|
|
|
STControl::STControl(s16 param_1, s16 param_2, s16 param_3, s16 param_4, f32 param_5, f32 param_6,
|
|
s16 param_7, s16 param_8) {
|
|
__vt = (STControl_vtable*)0x803a7260;
|
|
setWaitParm(param_1, param_2, param_3, param_4, param_5, param_6, param_7, param_8);
|
|
init();
|
|
}
|
|
|
|
void STControl::setWaitParm(s16 param_1, s16 param_2, s16 param_3, s16 param_4, f32 param_5,
|
|
f32 param_6, s16 param_7, s16 param_8) {
|
|
field_0x12 = param_1;
|
|
field_0x14 = param_2;
|
|
field_0x16 = param_3;
|
|
field_0x1c = param_4;
|
|
field_0x4 = param_5;
|
|
field_0x8 = param_6;
|
|
field_0x24 = param_7;
|
|
field_0x26 = param_8;
|
|
}
|
|
|
|
STControl* STControl::init(void) {
|
|
field_0xe = 0;
|
|
field_0x10 = 0;
|
|
field_0xd = 0;
|
|
field_0xc = 0;
|
|
field_0x22 = 0;
|
|
field_0x18 = field_0x12;
|
|
field_0x1a = field_0x12;
|
|
field_0x1e = field_0x1c;
|
|
field_0x20 = field_0x1c;
|
|
field_0x28 = 0;
|
|
field_0x2a = field_0x28;
|
|
field_0x2c = field_0x28;
|
|
return this;
|
|
}
|
|
|
|
void STControl::Xinit(void) {
|
|
field_0xe = 0;
|
|
field_0xc = field_0xc & 0xfc;
|
|
field_0x18 = field_0x12;
|
|
field_0x1e = field_0x1c;
|
|
field_0x2a = field_0x28;
|
|
}
|
|
|
|
#ifdef NONMATCHING
|
|
void STControl::Yinit(void) { // produces andi. instead of rlwinm
|
|
field_0x10 = 0;
|
|
field_0xc = field_0xc & 0xf3;
|
|
field_0x1a = field_0x12;
|
|
field_0x20 = field_0x1c;
|
|
field_0x2c = field_0x28;
|
|
}
|
|
#else
|
|
asm void STControl::Yinit(void) {
|
|
nofralloc
|
|
#include "d/d_lib/asm/STControl_NS_Yinit.s"
|
|
}
|
|
#endif
|
|
|
|
double STControl::getValueStick() {
|
|
return m_cpadInfo.interface.length_from_neutral;
|
|
}
|
|
|
|
s16 STControl::getAngleStick() {
|
|
return m_cpadInfo.interface.controlStick_angle;
|
|
}
|
|
|
|
double CSTControl::getValueStick() {
|
|
return m_cpadInfo.interface.cStick_length_from_neutral;
|
|
}
|
|
|
|
s16 CSTControl::getAngleStick() {
|
|
return m_cpadInfo.interface.cStick_angle;
|
|
}
|
|
|
|
asm u32 STControl::checkTrigger() {
|
|
nofralloc
|
|
#include "d/d_lib/asm/STControl_NS_checkTrigger.s"
|
|
}
|
|
|
|
bool STControl::checkLeftTrigger() {
|
|
if ((field_0xe == 0) && ((field_0xc & 1) != 0)) {
|
|
field_0xe = field_0x18 + field_0x2a;
|
|
field_0x2a = 0;
|
|
if ((int)field_0x1e == 0) {
|
|
field_0x18 = field_0x18 - field_0x16;
|
|
if (field_0x18 < field_0x14) {
|
|
field_0x18 = field_0x14;
|
|
}
|
|
} else {
|
|
field_0x1e = field_0x1e + -1;
|
|
}
|
|
return true;
|
|
}
|
|
return false;
|
|
}
|
|
|
|
bool STControl::checkRightTrigger() {
|
|
if ((field_0xe == 0) && ((field_0xc & 2) != 0)) {
|
|
field_0xe = field_0x18 + field_0x2a;
|
|
field_0x2a = 0;
|
|
if ((int)field_0x1e == 0) {
|
|
field_0x18 = field_0x18 - field_0x16;
|
|
if (field_0x18 < field_0x14) {
|
|
field_0x18 = field_0x14;
|
|
}
|
|
} else {
|
|
field_0x1e = field_0x1e + -1;
|
|
}
|
|
return true;
|
|
}
|
|
return false;
|
|
}
|
|
|
|
bool STControl::checkUpTrigger() {
|
|
if ((field_0x10 == 0) && ((field_0xc & 4) != 0)) {
|
|
field_0x10 = field_0x1a + field_0x2c;
|
|
field_0x2c = 0;
|
|
if ((int)field_0x20 == 0) {
|
|
field_0x1a = field_0x1a - field_0x16;
|
|
if (field_0x1a < field_0x14) {
|
|
field_0x1a = field_0x14;
|
|
}
|
|
} else {
|
|
field_0x20 = field_0x20 + -1;
|
|
}
|
|
return true;
|
|
}
|
|
return false;
|
|
}
|
|
|
|
bool STControl::checkDownTrigger() {
|
|
if ((field_0x10 == 0) && ((field_0xc & 8) != 0)) {
|
|
field_0x10 = field_0x1a + field_0x2c;
|
|
field_0x2c = 0;
|
|
if ((int)field_0x20 == 0) {
|
|
field_0x1a = field_0x1a - field_0x16;
|
|
if (field_0x1a < field_0x14) {
|
|
field_0x1a = field_0x14;
|
|
}
|
|
} else {
|
|
field_0x20 = field_0x20 + -1;
|
|
}
|
|
return true;
|
|
}
|
|
return false;
|
|
}
|
|
|
|
asm u32 dLib_getEventSwitchNo(int param_1) {
|
|
nofralloc
|
|
#include "d/d_lib/asm/dLib_getEventSwitchNo.s"
|
|
}
|
|
|
|
asm bool dLib_checkActorInRectangle(fopAc_ac_c* param_1, fopAc_ac_c* param_2, cXyz const* param_3,
|
|
cXyz const* param_4) {
|
|
nofralloc
|
|
#include "d/d_lib/asm/dLib_checkActorInRectangle.s"
|
|
}
|
|
|
|
asm u32 dLib_getExpandSizeFromAramArchive(JKRAramArchive* param_1, char const* param_2) {
|
|
nofralloc
|
|
#include "d/d_lib/asm/dLib_getExpandSizeFromAramArchive.s"
|
|
}
|
|
|
|
asm s64 dLib_time_c::getTime(void) {
|
|
nofralloc
|
|
#include "d/d_lib/asm/dLib_time_c_NS_getTime.s"
|
|
}
|
|
|
|
#ifdef NONMATCHING
|
|
void dLib_time_c::stopTime(void) { // way off
|
|
if (lbl_80450DE8 == 0) {
|
|
OSTime time = OSGetTime();
|
|
lbl_80450DE4 = time >> 0x20;
|
|
lbl_80450DE8 = 1;
|
|
lbl_80450DE0 = this;
|
|
}
|
|
}
|
|
#else
|
|
asm void dLib_time_c::stopTime(void) {
|
|
nofralloc
|
|
#include "d/d_lib/asm/dLib_time_c_NS_stopTime.s"
|
|
}
|
|
#endif
|
|
|
|
asm void dLib_time_c::startTime(void) {
|
|
nofralloc
|
|
#include "d/d_lib/asm/dLib_time_c_NS_startTime.s"
|
|
} |