mirror of https://github.com/zeldaret/tp.git
250 lines
7.8 KiB
C++
250 lines
7.8 KiB
C++
#include "d/d_home_button.h"
|
|
#include "JSystem/JFramework/JFWDisplay.h"
|
|
#include "Z2AudioLib/Z2AudioCS.h"
|
|
#include "Z2AudioLib/Z2AudioMgr.h"
|
|
#include "d/d_com_inf_game.h"
|
|
#include "m_Do/m_Do_Reset.h"
|
|
#include "m_Do/m_Do_graphic.h"
|
|
#include "m_Do/m_Do_lib.h"
|
|
#include "m_Do/m_Re_controller_pad.h"
|
|
|
|
int SECallback(int param_0, int param_1) {
|
|
if (param_0 == 5) {
|
|
Z2AudioMgr::getInterface()->homeMenuSeCallback(param_1);
|
|
return 1;
|
|
} else {
|
|
OSReport("SECallback: %d, %d\n", param_0, param_1);
|
|
return 0;
|
|
}
|
|
}
|
|
|
|
// NONMATCHING - stack
|
|
void drawCallback(J2DOrthoGraph& param_0, void* param_1) {
|
|
Mtx sp8;
|
|
if (mDoGph_gInf_c::isWide()) {
|
|
MTXOrtho(sp8, 228.0f, -228.0f, -416.0f, 416.0f, 0.0f, 500.0f);
|
|
} else {
|
|
MTXOrtho(sp8, 228.0f, -228.0f, -304.0f, 304.0f, 0.0f, 500.0f);
|
|
}
|
|
|
|
GXSetProjection(sp8, GX_ORTHOGRAPHIC);
|
|
GXClearVtxDesc();
|
|
GXSetVtxAttrFmt(GX_VTXFMT4, GX_VA_POS, GX_POS_XY, GX_F32, 0);
|
|
GXSetVtxAttrFmt(GX_VTXFMT4, GX_VA_CLR0, GX_CLR_RGB, GX_RGB8, 0);
|
|
GXSetVtxDesc(GX_VA_POS, GX_DIRECT);
|
|
GXSetVtxDesc(GX_VA_CLR0, GX_DIRECT);
|
|
GXSetNumChans(1);
|
|
GXSetNumTexGens(0);
|
|
GXSetNumTevStages(1);
|
|
GXSetTevOrder(GX_TEVSTAGE0, GX_TEXCOORD_NULL, GX_TEXMAP_NULL, GX_COLOR0A0);
|
|
GXSetTevOp(GX_TEVSTAGE0, GX_PASSCLR);
|
|
GXSetBlendMode(GX_BM_NONE, GX_BL_ZERO, GX_BL_ZERO, GX_LO_CLEAR);
|
|
GXSetZMode(GX_ENABLE, GX_LEQUAL, GX_ENABLE);
|
|
GXSetCullMode(GX_CULL_NONE);
|
|
GXLoadPosMtxImm(g_mDoMtx_identity, 3);
|
|
GXSetCurrentMtx(3);
|
|
|
|
HBMDraw();
|
|
}
|
|
|
|
dHomeButton_c* dHomeButton_c::m_myObj;
|
|
|
|
u8 dHomeButton_c::lbl_8053A724;
|
|
u8 dHomeButton_c::lbl_8053A725;
|
|
|
|
void dHomeButton_c::create_(int param_0, void* param_1) {
|
|
initCursorPos();
|
|
initHomeButtonInfo(param_0, param_1);
|
|
|
|
m_info.mem = JKRGetRootHeap2()->alloc(0x80000, 0);
|
|
m_info.memSize = 0x80000;
|
|
m_info.pAllocator = 0;
|
|
|
|
HBMCreate(&m_info);
|
|
}
|
|
|
|
// NONMATCHING
|
|
int dHomeButton_c::execute_() {
|
|
if (m_myObj == NULL) {
|
|
return 0;
|
|
}
|
|
|
|
calcCursorPos();
|
|
|
|
if (field_0x7c == 0 && !mDoRst::isReset()) {
|
|
bool var_r30 = false;
|
|
for (u32 i = 0; i < 4; i++) {
|
|
if (mReCPd::chkDevTypeValid(i) && mReCPd::getTrigHome(i)) {
|
|
var_r30 = true;
|
|
}
|
|
}
|
|
|
|
if (var_r30) {
|
|
mReCPd::enableDpd(0);
|
|
Z2AudioCS::disconnect(0);
|
|
|
|
HBMSetAdjustFlag(mDoGph_gInf_c::isWide());
|
|
HBMInit();
|
|
|
|
mDoGph_gInf_c::setTickRate(OS_TIMER_CLOCK / 60);
|
|
field_0x7c = 1;
|
|
lbl_8053A724 = 0;
|
|
}
|
|
}
|
|
|
|
if (field_0x7c) {
|
|
if (lbl_8053A724 == 0 && mDoRst::isReset()) {
|
|
HBMStartBlackOut();
|
|
onReset();
|
|
}
|
|
|
|
if (HBMCalc(&m_controllerData) >= HBM_SELECT_HOMEBTN) {
|
|
int selectBtn = HBMGetSelectBtnNum();
|
|
if (selectBtn == HBM_SELECT_BTN1) {
|
|
mDoRst::onReturnToMenu();
|
|
onReset();
|
|
} else if (selectBtn == HBM_SELECT_BTN2) {
|
|
mDoRst_resetCallBack(-1, NULL);
|
|
onReset();
|
|
}
|
|
|
|
Z2AudioCS::connect(0);
|
|
mDoGph_gInf_c::setTickRate(field_0x78);
|
|
field_0x7c = 0;
|
|
mReCPd::setExtensionCallback();
|
|
} else {
|
|
drawCapture(0xFF, drawCallback, NULL);
|
|
}
|
|
}
|
|
|
|
return field_0x7c;
|
|
}
|
|
|
|
void dHomeButton_c::initHomeButtonInfo(int param_0, void* i_layoutBuf) {
|
|
m_info.layoutBuf = i_layoutBuf;
|
|
m_info.spkSeBuf = dComIfG_getObjectRes("HomeBtn", "SpeakerSe.arc");
|
|
m_info.msgBuf = dComIfG_getObjectRes("HomeBtn", "home.csv");
|
|
m_info.configBuf = dComIfG_getObjectRes("HomeBtn", "config.txt");
|
|
m_info.sound_callback = SECallback;
|
|
m_info.backFlag = 0;
|
|
m_info.region = param_0;
|
|
m_info.cursor = 0;
|
|
|
|
m_info.adjust.x = 1.3684211f;
|
|
m_info.adjust.y = 1.0f;
|
|
m_info.frameDelta = 1.0f;
|
|
}
|
|
|
|
void dHomeButton_c::initCursorPos() {
|
|
for (int i = 0; i < 4; i++) {
|
|
m_controllerData.wiiCon[i].pos.x = 0.0f;
|
|
m_controllerData.wiiCon[i].pos.y = 0.0f;
|
|
m_controllerData.wiiCon[i].use_devtype = 0;
|
|
}
|
|
}
|
|
|
|
void dHomeButton_c::calcCursorPos() {
|
|
for (u32 i = 0; i < 4; i++) {
|
|
WPADDeviceType sp8;
|
|
WPADResult result = WPADProbe(i, &sp8);
|
|
|
|
if (result == -2 || result == -3 || result == 0) {
|
|
m_controllerData.wiiCon[i].kpad = &mReCPd::m_pad[i].field_0x4[0];
|
|
} else {
|
|
m_controllerData.wiiCon[i].kpad = NULL;
|
|
}
|
|
}
|
|
}
|
|
|
|
void dHomeButton_c::onReset() {
|
|
mDoGph_gInf_c::setFadeColor(*(JUtility::TColor*)&g_blackColor);
|
|
lbl_8053A724 = 1;
|
|
}
|
|
|
|
void dHomeButton_c::create(int param_0, void* param_1) {
|
|
m_myObj = new dHomeButton_c();
|
|
m_myObj->create_(param_0, param_1);
|
|
}
|
|
|
|
int dHomeButton_c::execute() {
|
|
if (m_myObj) {
|
|
return m_myObj->execute_();
|
|
}
|
|
|
|
return NULL;
|
|
}
|
|
|
|
// NONMATCHING
|
|
void dHomeButton_c::drawCapture(u8 param_0, void (*param_1)(J2DOrthoGraph&, void*), void* param_2) {
|
|
if (lbl_8053A725 == 0) {
|
|
GXSetTexCopySrc(0, 0, 640, 456);
|
|
GXSetTexCopyDst(640, 456, (GXTexFmt)mDoGph_gInf_c::m_fullFrameBufferTimg->format, GX_FALSE);
|
|
GXCopyTex(mDoGph_gInf_c::m_fullFrameBufferTex, GX_FALSE);
|
|
lbl_8053A725 = 1;
|
|
}
|
|
|
|
JFWDisplay::getManager()->setClearColor(g_clearColor);
|
|
mDoGph_gInf_c::beginRender();
|
|
GXSetAlphaUpdate(GX_DISABLE);
|
|
j3dSys.drawInit();
|
|
|
|
J2DOrthoGraph sp30(0.0f, 0.0f, 640.0f, 456.0f, -1.0f, 1.0f);
|
|
sp30.setOrtho(JGeometry::TBox2<f32>(mDoGph_gInf_c::getMinXF(), mDoGph_gInf_c::getMinYF(),
|
|
mDoGph_gInf_c::getMinXF() + mDoGph_gInf_c::getWidthF(),
|
|
mDoGph_gInf_c::getMinYF() + mDoGph_gInf_c::getHeightF()),
|
|
-1.0f, 1.0f);
|
|
sp30.setPort();
|
|
|
|
dComIfGp_setCurrentGrafPort(&sp30);
|
|
mDoLib_setResTimgObj(mDoGph_gInf_c::m_fullFrameBufferTimg,
|
|
&mDoGph_gInf_c::m_fullFrameBufferTexObj, 0, NULL);
|
|
|
|
GXLoadTexObj(&mDoGph_gInf_c::m_fullFrameBufferTexObj, GX_TEXMAP0);
|
|
GXSetNumChans(0);
|
|
GXSetNumIndStages(0);
|
|
GXSetNumTexGens(1);
|
|
GXSetTexCoordGen(GX_TEXCOORD0, GX_TG_MTX2x4, GX_TG_TEX0, 60);
|
|
GXSetNumTevStages(1);
|
|
|
|
GXColor sp14 = {0, 0, 0, param_0};
|
|
GXSetTevColor(GX_TEVREG0, sp14);
|
|
GXSetTevOrder(GX_TEVSTAGE0, GX_TEXCOORD0, GX_TEXMAP0, GX_COLOR_NULL);
|
|
GXSetTevColorIn(GX_TEVSTAGE0, GX_CC_ZERO, GX_CC_TEXC, GX_CC_A0, GX_CC_ZERO);
|
|
GXSetTevColorOp(GX_TEVSTAGE0, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, GX_TRUE, GX_TEVPREV);
|
|
GXSetTevAlphaIn(GX_TEVSTAGE0, GX_CA_ZERO, GX_CA_ZERO, GX_CA_ZERO, GX_CA_ZERO);
|
|
GXSetTevAlphaOp(GX_TEVSTAGE0, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, GX_TRUE, GX_TEVPREV);
|
|
GXSetZCompLoc(GX_TRUE);
|
|
GXSetZMode(GX_DISABLE, GX_ALWAYS, GX_DISABLE);
|
|
GXSetBlendMode(GX_BM_NONE, GX_BL_SRCALPHA, GX_BL_ONE, GX_LO_CLEAR);
|
|
GXSetAlphaCompare(GX_ALWAYS, 0, GX_AOP_OR, GX_ALWAYS, 0);
|
|
GXSetFog(GX_FOG_NONE, 0.0f, 0.0f, 0.0f, 0.0f, g_clearColor);
|
|
GXSetFogRangeAdj(GX_DISABLE, 0, NULL);
|
|
GXSetCullMode(GX_CULL_NONE);
|
|
GXSetDither(GX_TRUE);
|
|
GXClearVtxDesc();
|
|
GXSetVtxDesc(GX_VA_POS, GX_DIRECT);
|
|
GXSetVtxDesc(GX_VA_TEX0, GX_DIRECT);
|
|
GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_POS, GX_POS_XY, GX_F32, 0);
|
|
GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_TEX0, GX_TEX_ST, GX_S8, 0);
|
|
GXBegin(GX_QUADS, GX_VTXFMT0, 4);
|
|
|
|
GXPosition2f32(mDoGph_gInf_c::getMinXF(), mDoGph_gInf_c::getMinYF());
|
|
GXTexCoord2u8(0, 0);
|
|
|
|
GXPosition2f32(mDoGph_gInf_c::getMaxXF(), mDoGph_gInf_c::getMinYF());
|
|
GXTexCoord2u8(1, 0);
|
|
|
|
GXPosition2f32(mDoGph_gInf_c::getMaxXF(), mDoGph_gInf_c::getMaxYF());
|
|
GXTexCoord2u8(1, 1);
|
|
|
|
GXPosition2f32(mDoGph_gInf_c::getMinXF(), mDoGph_gInf_c::getMaxYF());
|
|
GXTexCoord2u8(0, 1);
|
|
|
|
if (param_1 != NULL) {
|
|
param_1(sp30, param_2);
|
|
}
|
|
|
|
JFWDisplay::getManager()->endRender();
|
|
JFWDisplay::getManager()->setFader(NULL);
|
|
}
|