Files
tp/src/d/d_simple_model.cpp
T
LagoLunatic 9eea9289b1 Fix JUT_ASSERT and several other macros (#2711)
* Fix JUT_ASSERT to be a nested define

* Switch names that appear in asserts to be constants instead of defines

* Replace `0` in asserts with `NULL` or `FALSE`

* Fix fpclassify

* Fix ARRAY_SIZE

* Use G_CM3D_F_INF

* More fixes for fpclassify

* Remove FLOAT_LABEL

* Remove incorrect FLAG_ON macro

* Remove UNK_BSS macro

* Silence clangd unused header warning for PCH
2025-09-28 13:11:07 -07:00

263 lines
7.8 KiB
C++

//
// Generated By: dol2asm
// Translation Unit: d/d_simple_model
//
#include "d/dolzel.h" // IWYU pragma: keep
#include "d/d_simple_model.h"
#include "d/d_com_inf_game.h"
/* 80048C54-80048CB4 043594 0060+00 1/1 0/0 0/0 .text dSmplMdl_modelUpdateDL__FP8J3DModel
*/
static void dSmplMdl_modelUpdateDL(J3DModel* i_model) {
JUT_ASSERT(61, i_model != NULL);
J3DModelData* modelData = i_model->getModelData();
if (modelData->getMaterialNodePointer(0)->getMaterialAnm() != NULL) {
OS_REPORT(
"\x1b[43;30mシンプルモデル描画:モデルは\'bmdg\'フォルダに置いていますか?\n\x1b[m");
}
i_model->calc();
i_model->entry();
i_model->viewCalc();
}
/* 80048CB4-80048D60 0435F4 00AC+00 0/0 1/1 0/0 .text __ct__15dSmplMdl_draw_cFv */
dSmplMdl_draw_c::dSmplMdl_draw_c() {
for (int i = 0; i < 8; i++) {
mModel[i].init();
}
for (int i = 0; i < 500; i++) {
mList[i].init();
}
mListCount = 0;
}
/* 80048D60-80048D80 0436A0 0020+00 1/1 0/0 0/0 .text __ct__12diff_model_cFv */
diff_model_c::diff_model_c() {
mpHeap = NULL;
mpModel = NULL;
mCreateNum = 0;
mpList = NULL;
mRoomNo = 63;
}
/* 80048D80-80048E0C 0436C0 008C+00 1/0 0/0 0/0 .text __dt__15dSmplMdl_draw_cFv */
dSmplMdl_draw_c::~dSmplMdl_draw_c() {
for (int i = 0; i < 8; i++) {
if (mModel[i].getModel() != NULL) {
OS_REPORT("\x1b[43;30m差分DL用ダミーモデル削除忘れがあります!!\n");
OS_REPORT("差分DLモデル領域を強制的に削除します。\n", "\x1b[m");
mModel[i].remove(1);
}
}
}
/* 80048E0C-80048EBC 04374C 00B0+00 0/0 1/1 0/0 .text draw__15dSmplMdl_draw_cFv */
void dSmplMdl_draw_c::draw() {
for (int i = 0; i < 8; i++) {
if (mModel[i].getModel() != NULL) {
mModel[i].draw();
}
}
mListCount = 0;
for (int i = 0; i < 500; i++) {
mList[i].init();
}
for (int i = 0; i < 8; i++) {
mModel[i].insert(NULL);
}
}
/* 80048EBC-80048F70 0437FC 00B4+00 0/0 1/1 0/0 .text entry__15dSmplMdl_draw_cFP8J3DModeli */
void dSmplMdl_draw_c::entry(J3DModel* i_model, int roomNo) {
if (i_model != NULL && mListCount < 500) {
mList[mListCount].set(i_model);
for (int i = 0; i < 8; i++) {
if (mModel[i].isSame(i_model->getModelData(), roomNo)) {
mModel[i].insert(&mList[mListCount]);
break;
}
}
mListCount++;
} else {
OS_REPORT("\x1b[43;30mシンプルモデル描画エントリ数オーバー!!(%s, %d)\n\x1b[m",
__FILE__, 278);
}
}
/* 80048F70-80049058 0438B0 00E8+00 0/0 1/1 0/0 .text
* addModel__15dSmplMdl_draw_cFP12J3DModelDataiUc */
BOOL dSmplMdl_draw_c::addModel(J3DModelData* i_modelData, int roomNo, u8 drawBG) {
JUT_ASSERT(307, i_modelData != NULL);
if (roomNo == -1) {
OS_REPORT("\x1b[43;30mシンプルモデル描画差分DLモデル登録:部屋番号指定がありません!!!\n\x1b[m");
}
for (int i = 0; i < 8; i++) {
if (mModel[i].isSame(i_modelData, roomNo)) {
if (mModel[i].create(i_modelData, roomNo, drawBG)) {
return TRUE;
}
return FALSE;
}
}
for (int i = 0; i < 8; i++) {
if (mModel[i].getModelData() == NULL) {
if (mModel[i].create(i_modelData, roomNo, drawBG)) {
return TRUE;
}
return FALSE;
}
}
OS_REPORT(
"\x1b[43;30m差分DL用ダミーモデル空きエントリが見つかりませんでした!(%s, %d)\n\x1b[m",
__FILE__, 349);
return 0;
}
/* 80049058-800490EC 043998 0094+00 0/0 1/1 0/0 .text
* removeModel__15dSmplMdl_draw_cFP12J3DModelDatai */
int dSmplMdl_draw_c::removeModel(J3DModelData* i_modelData, int roomNo) {
if (i_modelData == NULL) {
return 0;
}
for (int i = 0; i < 8; i++) {
if (mModel[i].isSame(i_modelData, roomNo)) {
mModel[i].remove(0);
return 0;
}
}
OS_REPORT_ERROR("シンプルモデルを登録してないのに削除に!\n");
return 0;
}
/* 800490EC-800491F4 043A2C 0108+00 1/1 0/0 0/0 .text create__12diff_model_cFP12J3DModelDataiUc */
BOOL diff_model_c::create(J3DModelData* i_modelData, int roomNo, u8 drawBG) {
JUT_ASSERT(397, i_modelData != NULL);
if (mpHeap == NULL) {
mpHeap = mDoExt_createSolidHeapFromGameToCurrent(0x2000, 0x20);
if (mpHeap != NULL) {
mpModel = mDoExt_J3DModel__create(i_modelData, 0x80000, 0x11000084);
if (mpModel == NULL) {
OS_REPORT("差分DL用モデル モデル生成失敗!(%s, %d)\n", __FILE__, 413);
remove(1);
mDoExt_restoreCurrentHeap();
} else {
cXyz scale(0.0f, 0.0f, 0.0f);
mpModel->setBaseScale(scale);
mpModel->setBaseTRMtx(mDoMtx_getIdentity());
mCreateNum++;
int result = mDoExt_adjustSolidHeapToSystem(mpHeap);
mRoomNo = roomNo;
mDrawBG = drawBG;
#if VERSION == VERSION_SHIELD_DEBUG
field_0x12 = 0;
#endif
return 1;
}
}
} else {
mCreateNum++;
return 1;
}
return 0;
}
/* 800491F4-80049210 043B34 001C+00 2/2 0/0 0/0 .text getModelData__12diff_model_cFv */
J3DModelData* diff_model_c::getModelData() {
if (mpModel != NULL) {
return mpModel->getModelData();
}
return NULL;
}
/* 80049210-80049270 043B50 0060+00 3/3 0/0 0/0 .text remove__12diff_model_cFi */
void diff_model_c::remove(int param_0) {
mCreateNum--;
if (mCreateNum == 0 || param_0 != 0) {
if (mpHeap != NULL) {
#if VERSION == VERSION_SHIELD_DEBUG
if (field_0x12 != 0) {
JUT_WARN(510, "%s", "Simple Model Denger Remove !!\n");
}
#endif
mDoExt_destroySolidHeap(mpHeap);
init();
}
}
}
/* 80049270-80049368 043BB0 00F8+00 1/1 0/0 0/0 .text draw__12diff_model_cFv */
void diff_model_c::draw() {
modelList_c* list = mpList;
if (list != NULL && dComIfGp_roomControl_checkStatusFlag(getRoomNo(), 0x10)) {
g_env_light.setLightTevColorType_MAJI(mpModel, dComIfGp_roomControl_getTevStr(getRoomNo()));
if (mDrawBG == 1) {
dComIfGd_setListBG();
}
for (; list != NULL; list = list->field_0x4) {
dSmplMdl_modelUpdateDL(list->mpModel);
}
mDoExt_modelUpdateDL(mpModel);
dComIfGd_setList();
#if VERSION == VERSION_SHIELD_DEBUG
field_0x12 = 1;
#endif
} else {
#if VERSION == VERSION_SHIELD_DEBUG
field_0x12 = 0;
#endif
}
}
/* 80049368-80049388 043CA8 0020+00 2/2 0/0 0/0 .text init__12diff_model_cFv */
void diff_model_c::init() {
mpModel = NULL;
mpHeap = NULL;
mpList = NULL;
mCreateNum = 0;
mRoomNo = 63;
}
/* 80049388-800493FC 043CC8 0074+00 3/3 0/0 0/0 .text isSame__12diff_model_cFP12J3DModelDatai */
BOOL diff_model_c::isSame(J3DModelData* i_modelData, int roomNo) {
if (mpModel != NULL) {
return getModelData() == i_modelData && roomNo == getRoomNo();
}
return FALSE;
}
/* 800493FC-80049408 043D3C 000C+00 2/2 0/0 0/0 .text getRoomNo__12diff_model_cFv */
s32 diff_model_c::getRoomNo() {
return mRoomNo;
}
/* 80049408-80049420 043D48 0018+00 2/2 0/0 0/0 .text insert__12diff_model_cFP11modelList_c */
void diff_model_c::insert(modelList_c* list) {
modelList_c* prev = mpList;
mpList = list;
if (list == NULL) {
return;
}
list->field_0x4 = prev;
}