mirror of https://github.com/zeldaret/tp.git
357 lines
13 KiB
C++
357 lines
13 KiB
C++
/**
|
|
* d_meter_hakusha.cpp
|
|
* UI Epona Dash Spurs
|
|
*/
|
|
|
|
#include "d/d_meter_hakusha.h"
|
|
#include "JSystem/J2DGraph/J2DGrafContext.h"
|
|
#include "JSystem/J2DGraph/J2DScreen.h"
|
|
#include "d/d_com_inf_game.h"
|
|
#include "d/d_meter2_draw.h"
|
|
#include "d/d_meter2_info.h"
|
|
#include "d/d_meter_HIO.h"
|
|
#include "d/d_pane_class.h"
|
|
|
|
/* 8020C320-8020C384 206C60 0064+00 0/0 1/1 0/0 .text __ct__15dMeterHakusha_cFPv */
|
|
dMeterHakusha_c::dMeterHakusha_c(void* i_screen) {
|
|
field_0x004 = (J2DScreen*)i_screen;
|
|
_create();
|
|
}
|
|
|
|
/* 8020C384-8020C400 206CC4 007C+00 1/0 0/0 0/0 .text __dt__15dMeterHakusha_cFv */
|
|
dMeterHakusha_c::~dMeterHakusha_c() {
|
|
_delete();
|
|
}
|
|
|
|
/* 8020C400-8020C808 206D40 0408+00 1/0 0/0 0/0 .text _create__15dMeterHakusha_cFv */
|
|
int dMeterHakusha_c::_create() {
|
|
static u64 haku_tag[] = {
|
|
'haku_n00', 'haku_n01', 'haku_n02', 'haku_n03', 'haku_n04', 'haku_n05',
|
|
};
|
|
|
|
for (int i = 0; i < 6; i++) {
|
|
mpHakushaPos[i] = new CPaneMgr(field_0x004, haku_tag[i], 0, NULL);
|
|
JUT_ASSERT(0, mpHakushaPos[i] != 0);
|
|
}
|
|
|
|
mpHakushaParent = new CPaneMgr(field_0x004, 'hakunall', 0, NULL);
|
|
JUT_ASSERT(0, mpHakushaParent != 0);
|
|
|
|
mpHakushaScreen = new J2DScreen();
|
|
JUT_ASSERT(0, mpHakushaScreen != 0);
|
|
|
|
bool fg = mpHakushaScreen->setPriority("zelda_game_image_hakusha_parts.blo", 0x20000,
|
|
dComIfGp_getMain2DArchive());
|
|
JUT_ASSERT(0, fg != false);
|
|
dPaneClass_showNullPane(mpHakushaScreen);
|
|
|
|
mpHakushaOn = new CPaneMgr(mpHakushaScreen, 'haku_n', 2, NULL);
|
|
JUT_ASSERT(0, mpHakushaOn != 0);
|
|
|
|
mpHakushaOff = new CPaneMgr(mpHakushaScreen, 'haku_b_n', 2, NULL);
|
|
JUT_ASSERT(0, mpHakushaOff != 0);
|
|
|
|
mpHakushaOn->setAlphaRate(0.0f);
|
|
mpHakushaOff->setAlphaRate(0.0f);
|
|
mpHakushaOn->hide();
|
|
mpHakushaOff->hide();
|
|
|
|
for (int i = 0; i < 12; i++) {
|
|
mHakushaData[i].pos_x = 0.0f;
|
|
mHakushaData[i].pos_y = 0.0f;
|
|
mHakushaData[i].flags = 0;
|
|
mHakushaAnimFrame[i] = 0.0f;
|
|
mHakushaStatus[i] = 0;
|
|
}
|
|
|
|
mHakushaNum = dMeter2Info_getHorseLifeCount();
|
|
|
|
mpButtonScreen = new J2DScreen();
|
|
JUT_ASSERT(0, mpButtonScreen != 0);
|
|
|
|
fg = mpButtonScreen->setPriority("zelda_game_image_hakusha_a_btn.blo", 0x20000,
|
|
dComIfGp_getMain2DArchive());
|
|
JUT_ASSERT(0, fg != false);
|
|
dPaneClass_showNullPane(mpButtonScreen);
|
|
|
|
mpButtonA = new CPaneMgr(mpButtonScreen, 'abtn_n', 2, NULL);
|
|
JUT_ASSERT(0, mpButtonA != 0);
|
|
mpButtonA->show();
|
|
mpButtonA->setAlphaRate(0.0f);
|
|
|
|
mpButtonScreen->search('info_n')->translate(0.0f, 0.0f);
|
|
field_0x100 = g_drawHIO.mButtonAHorsePosX;
|
|
field_0x104 = g_drawHIO.mButtonAHorsePosY;
|
|
|
|
if (strcmp(dComIfGp_getStartStageName(), "F_SP108") == 0) {
|
|
mpHakushaParent->paneTrans(g_drawHIO.mSpurBarPosX + 28.4f, g_drawHIO.mSpurBarPosY);
|
|
} else {
|
|
mpHakushaParent->paneTrans(g_drawHIO.mSpurBarPosX, g_drawHIO.mSpurBarPosY);
|
|
}
|
|
mpHakushaParent->scale(g_drawHIO.mSpurBarScale, g_drawHIO.mSpurBarScale);
|
|
|
|
mpButtonA->paneTrans(g_drawHIO.mButtonAHorsePosX, g_drawHIO.mButtonAHorsePosY);
|
|
mpButtonA->scale(g_drawHIO.mButtonAHorseScale, g_drawHIO.mButtonAHorseScale);
|
|
|
|
mpHakushaOn->scale(g_drawHIO.mSpurIconScale, g_drawHIO.mSpurIconScale);
|
|
mpHakushaOff->scale(g_drawHIO.mUsedSpurIconScale, g_drawHIO.mUsedSpurIconScale);
|
|
|
|
mButtonAPosX = 0.0f;
|
|
mButtonAPosY = 0.0f;
|
|
return cPhs_COMPLEATE_e;
|
|
}
|
|
|
|
/* 8020C808-8020C850 207148 0048+00 1/0 0/0 0/0 .text _execute__15dMeterHakusha_cFUl */
|
|
int dMeterHakusha_c::_execute(u32 i_flags) {
|
|
updateHakusha();
|
|
alphaAnimeHakusha(i_flags);
|
|
return 1;
|
|
}
|
|
|
|
/* 8020C850-8020CABC 207190 026C+00 1/0 0/0 0/0 .text draw__15dMeterHakusha_cFv */
|
|
void dMeterHakusha_c::draw() {
|
|
J2DGrafContext* graf_ctx = dComIfGp_getCurrentGrafPort();
|
|
graf_ctx->setup2D();
|
|
|
|
mpButtonA->translate(mButtonAPosX, mButtonAPosY);
|
|
mpButtonScreen->draw(0.0f, 0.0f, graf_ctx);
|
|
|
|
for (int i = 0; i < getHakushaNum(); i++) {
|
|
if (mHakushaData[i].flags & 1) {
|
|
mpHakushaOn->show();
|
|
} else {
|
|
mpHakushaOn->hide();
|
|
}
|
|
|
|
if (mHakushaData[i].flags & 2) {
|
|
mpHakushaOff->show();
|
|
} else {
|
|
mpHakushaOff->hide();
|
|
}
|
|
|
|
mpHakushaOn->translate(mHakushaData[i].pos_x, mHakushaData[i].pos_y);
|
|
mpHakushaOff->translate(mHakushaData[i].pos_x, mHakushaData[i].pos_y);
|
|
mpHakushaScreen->draw(0.0f, 0.0f, graf_ctx);
|
|
|
|
if (mHakushaData[i].flags != 0 && mHakushaAnimFrame[i] != 0.0f) {
|
|
Vec center = mpHakushaOn->getGlobalVtxCenter(false, 0);
|
|
|
|
if (mHakushaStatus[i] == 0) {
|
|
dMeter2Info_getMeterClass()->getMeterDrawPtr()->drawPikariHakusha(
|
|
center.x, center.y, mHakushaAnimFrame[i], g_drawHIO.mSpurIconPikariScale,
|
|
g_drawHIO.mSpurIconPikariFrontOuter, g_drawHIO.mSpurIconPikariFrontInner,
|
|
g_drawHIO.mSpurIconPikariBackOuter, g_drawHIO.mSpurIconPikariBackInner);
|
|
} else {
|
|
dMeter2Info_getMeterClass()->getMeterDrawPtr()->drawPikariHakusha(
|
|
center.x, center.y, mHakushaAnimFrame[i],
|
|
g_drawHIO.mSpurIconRevivePikariScale,
|
|
g_drawHIO.mSpurIconRevivePikariFrontOuter,
|
|
g_drawHIO.mSpurIconRevivePikariFrontInner,
|
|
g_drawHIO.mSpurIconRevivePikariBackOuter,
|
|
g_drawHIO.mSpurIconRevivePikariBackInner);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
/* 8020CABC-8020CC58 2073FC 019C+00 1/0 0/0 0/0 .text _delete__15dMeterHakusha_cFv */
|
|
int dMeterHakusha_c::_delete() {
|
|
for (int i = 0; i < 6; i++) {
|
|
delete mpHakushaPos[i];
|
|
mpHakushaPos[i] = NULL;
|
|
}
|
|
|
|
mpHakushaParent->paneTrans(0.0f, 0.0f);
|
|
mpHakushaParent->scale(1.0f, 1.0f);
|
|
delete mpHakushaParent;
|
|
mpHakushaParent = NULL;
|
|
|
|
delete mpHakushaScreen;
|
|
mpHakushaScreen = NULL;
|
|
|
|
delete mpHakushaOn;
|
|
mpHakushaOn = NULL;
|
|
|
|
delete mpHakushaOff;
|
|
mpHakushaOff = NULL;
|
|
|
|
delete mpButtonScreen;
|
|
mpButtonScreen = NULL;
|
|
|
|
delete mpButtonA;
|
|
mpButtonA = NULL;
|
|
return 1;
|
|
}
|
|
|
|
/* 8020CC58-8020CD6C 207598 0114+00 1/1 0/0 0/0 .text alphaAnimeHakusha__15dMeterHakusha_cFUl */
|
|
void dMeterHakusha_c::alphaAnimeHakusha(u32 i_flags) {
|
|
if ((i_flags & 0x4000) || (i_flags & 0x40) || (i_flags & 0x100000) || (i_flags & 0x1000) ||
|
|
(i_flags & 8) || (i_flags & 0x10) || (i_flags & 0x20) || (i_flags & 0x04000000) ||
|
|
(i_flags & 0x08000000) || (i_flags & 0x01000000) || !(i_flags & 0x02000000) ||
|
|
(strcmp(dComIfGp_getStartStageName(), "F_SP00") == 0 &&
|
|
dComIfG_play_c::getLayerNo(0) == 4) ||
|
|
(dComIfGp_getDoStatus() != 9 && dComIfGp_getDoStatus() != 0))
|
|
{
|
|
setAlphaHakushaAnimeMin();
|
|
setAlphaButtonAnimeMin();
|
|
return;
|
|
}
|
|
|
|
setAlphaHakushaAnimeMax();
|
|
if (dComIfGp_getDoStatus() == 9) {
|
|
setAlphaButtonAnimeMax();
|
|
} else {
|
|
setAlphaButtonAnimeMin();
|
|
}
|
|
}
|
|
|
|
/* 8020CD6C-8020D258 2076AC 04EC+00 1/1 0/0 0/0 .text updateHakusha__15dMeterHakusha_cFv
|
|
*/
|
|
void dMeterHakusha_c::updateHakusha() {
|
|
Vec sp2C = mpHakushaPos[0]->getGlobalVtxCenter(false, 0);
|
|
Vec sp20 = mpHakushaPos[5]->getGlobalVtxCenter(false, 0);
|
|
|
|
f32 abtn_x_offset = sp2C.x;
|
|
f32 abtn_y_offset = sp2C.y;
|
|
|
|
f32 temp_f28 = (sp20.x - sp2C.x) / (f32)getHakushaNum();
|
|
|
|
if (mHakushaNum != dMeter2Info_getHorseLifeCount()) {
|
|
if (mHakushaNum > dMeter2Info_getHorseLifeCount()) {
|
|
mHakushaAnimFrame[dMeter2Info_getHorseLifeCount()] =
|
|
18.0f - g_drawHIO.mSpurIconPikariAnimSpeed;
|
|
mHakushaStatus[dMeter2Info_getHorseLifeCount()] = 0;
|
|
} else if (mHakushaNum < dMeter2Info_getHorseLifeCount()) {
|
|
for (int i = mHakushaNum; i < dMeter2Info_getHorseLifeCount(); i++) {
|
|
mHakushaAnimFrame[i] = 18.0f - g_drawHIO.mSpurIconRevivePikariAnimSpeed;
|
|
mHakushaStatus[i] = 1;
|
|
}
|
|
}
|
|
|
|
mHakushaNum = dMeter2Info_getHorseLifeCount();
|
|
}
|
|
|
|
for (int i = 0; i < getHakushaNum(); i++) {
|
|
if (mHakushaAnimFrame[i] > 0.0f) {
|
|
if (mHakushaStatus[i] == 0) {
|
|
mHakushaAnimFrame[i] += g_drawHIO.mSpurIconPikariAnimSpeed;
|
|
} else {
|
|
mHakushaAnimFrame[i] += g_drawHIO.mSpurIconRevivePikariAnimSpeed;
|
|
}
|
|
|
|
if (mHakushaAnimFrame[i] > 28.0f) {
|
|
mHakushaAnimFrame[i] = 0.0f;
|
|
}
|
|
}
|
|
|
|
mHakushaData[i].pos_x = abtn_x_offset;
|
|
mHakushaData[i].pos_y = abtn_y_offset;
|
|
|
|
if (mpHakushaOn->getAlpha() == 0) {
|
|
mHakushaData[i].flags &= ~0x1;
|
|
} else if (i < dMeter2Info_getHorseLifeCount() ||
|
|
(mHakushaAnimFrame[i] != 0.0f && mHakushaAnimFrame[i] <= 20.0f &&
|
|
mHakushaStatus[i] == 0) ||
|
|
(mHakushaAnimFrame[i] != 0.0f && mHakushaAnimFrame[i] > 20.0f &&
|
|
mHakushaStatus[i] == 1))
|
|
{
|
|
mHakushaData[i].flags |= 0x1;
|
|
} else {
|
|
mHakushaData[i].flags &= ~0x1;
|
|
}
|
|
|
|
if (mpHakushaOff->getAlpha() == 0) {
|
|
mHakushaData[i].flags &= ~0x2;
|
|
} else if (i < dMeter2Info_getHorseLifeCount() ||
|
|
(mHakushaAnimFrame[i] != 0.0f && mHakushaAnimFrame[i] <= 20.0f &&
|
|
mHakushaStatus[i] == 0) ||
|
|
(mHakushaAnimFrame[i] != 0.0f && mHakushaAnimFrame[i] > 20.0f &&
|
|
mHakushaStatus[i] == 1))
|
|
{
|
|
mHakushaData[i].flags &= ~0x2;
|
|
} else {
|
|
mHakushaData[i].flags |= 0x2;
|
|
}
|
|
|
|
abtn_x_offset += temp_f28;
|
|
}
|
|
|
|
mButtonAPosX = abtn_x_offset + field_0x100;
|
|
mButtonAPosY = abtn_y_offset + field_0x104;
|
|
|
|
if (g_drawHIO.mSpurDebug) {
|
|
field_0x100 = g_drawHIO.mButtonAHorsePosX;
|
|
field_0x104 = g_drawHIO.mButtonAHorsePosY;
|
|
|
|
if (strcmp(dComIfGp_getStartStageName(), "F_SP108") == 0) {
|
|
mpHakushaParent->paneTrans(g_drawHIO.mSpurBarPosX + 28.4f, g_drawHIO.mSpurBarPosY);
|
|
} else {
|
|
mpHakushaParent->paneTrans(g_drawHIO.mSpurBarPosX, g_drawHIO.mSpurBarPosY);
|
|
}
|
|
mpHakushaParent->scale(g_drawHIO.mSpurBarScale, g_drawHIO.mSpurBarScale);
|
|
|
|
mpButtonA->paneTrans(g_drawHIO.mButtonAHorsePosX, g_drawHIO.mButtonAHorsePosY);
|
|
mpButtonA->scale(g_drawHIO.mButtonAHorseScale, g_drawHIO.mButtonAHorseScale);
|
|
|
|
mpHakushaOn->scale(g_drawHIO.mSpurIconScale, g_drawHIO.mSpurIconScale);
|
|
mpHakushaOff->scale(g_drawHIO.mUsedSpurIconScale, g_drawHIO.mUsedSpurIconScale);
|
|
}
|
|
}
|
|
|
|
/* 8020D258-8020D308 207B98 00B0+00 1/1 0/0 0/0 .text setAlphaHakushaAnimeMin__15dMeterHakusha_cFv
|
|
*/
|
|
void dMeterHakusha_c::setAlphaHakushaAnimeMin() {
|
|
if (mpHakushaOn->getAlphaRate() != 0.0f) {
|
|
mpHakushaOn->setAlphaRate(g_drawHIO.mSpurIconAlpha);
|
|
dMeter2Info_getMeterClass()->getMeterDrawPtr()->setAlphaAnimeMin(mpHakushaOn, 5);
|
|
}
|
|
|
|
if (mpHakushaOff->getAlphaRate() != 0.0f) {
|
|
mpHakushaOff->setAlphaRate(g_drawHIO.mUsedSpurIconAlpha);
|
|
dMeter2Info_getMeterClass()->getMeterDrawPtr()->setAlphaAnimeMin(mpHakushaOff, 5);
|
|
}
|
|
}
|
|
|
|
/* 8020D308-8020D3B8 207C48 00B0+00 1/1 0/0 0/0 .text setAlphaHakushaAnimeMax__15dMeterHakusha_cFv
|
|
*/
|
|
void dMeterHakusha_c::setAlphaHakushaAnimeMax() {
|
|
if (mpHakushaOn->getAlphaRate() != g_drawHIO.mSpurIconAlpha) {
|
|
mpHakushaOn->setAlphaRate(g_drawHIO.mSpurIconAlpha);
|
|
dMeter2Info_getMeterClass()->getMeterDrawPtr()->setAlphaAnimeMax(mpHakushaOn, 5);
|
|
}
|
|
|
|
if (mpHakushaOff->getAlphaRate() != g_drawHIO.mUsedSpurIconAlpha) {
|
|
mpHakushaOff->setAlphaRate(g_drawHIO.mUsedSpurIconAlpha);
|
|
dMeter2Info_getMeterClass()->getMeterDrawPtr()->setAlphaAnimeMax(mpHakushaOff, 5);
|
|
}
|
|
}
|
|
|
|
/* 8020D3B8-8020D41C 207CF8 0064+00 1/1 0/0 0/0 .text setAlphaButtonAnimeMin__15dMeterHakusha_cFv
|
|
*/
|
|
void dMeterHakusha_c::setAlphaButtonAnimeMin() {
|
|
if (mpButtonA->getAlphaRate() != 0.0f) {
|
|
mpButtonA->setAlphaRate(1.0f);
|
|
dMeter2Info_getMeterClass()->getMeterDrawPtr()->setAlphaAnimeMin(mpButtonA, 5);
|
|
}
|
|
}
|
|
|
|
/* 8020D41C-8020D480 207D5C 0064+00 1/1 0/0 0/0 .text setAlphaButtonAnimeMax__15dMeterHakusha_cFv
|
|
*/
|
|
void dMeterHakusha_c::setAlphaButtonAnimeMax() {
|
|
if (mpButtonA->getAlphaRate() != 1.0f) {
|
|
mpButtonA->setAlphaRate(1.0f);
|
|
dMeter2Info_getMeterClass()->getMeterDrawPtr()->setAlphaAnimeMax(mpButtonA, 5);
|
|
}
|
|
}
|
|
|
|
/* 8020D480-8020D49C 207DC0 001C+00 2/2 0/0 0/0 .text getHakushaNum__15dMeterHakusha_cFv
|
|
*/
|
|
int dMeterHakusha_c::getHakushaNum() {
|
|
int hakusha_num = g_drawHIO.mMaxSpurAmount;
|
|
if (hakusha_num > 12) {
|
|
hakusha_num = 12;
|
|
}
|
|
|
|
return hakusha_num;
|
|
}
|