// // Generated By: dol2asm // Translation Unit: d/d_simple_model // #include "d/d_simple_model.h" #include "d/com/d_com_inf_game.h" #include "m_Do/m_Do_mtx.h" // // External References: // // // Declarations: // /* 80048C54-80048CB4 043594 0060+00 1/1 0/0 0/0 .text dSmplMdl_modelUpdateDL__FP8J3DModel */ static void dSmplMdl_modelUpdateDL(J3DModel* i_model) { 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) { 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++; } } /* 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) { for (int i = 0; i < 8; i++) { if (mModel[i].isSame(i_modelData, roomNo)) { return mModel[i].create(i_modelData, roomNo, drawBG) ? TRUE : FALSE; } } for (int i = 0; i < 8; i++) { if (mModel[i].getModelData() == NULL) { return mModel[i].create(i_modelData, roomNo, drawBG) ? TRUE : FALSE; } } 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; } } 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) { if (mpHeap == NULL) { mpHeap = mDoExt_createSolidHeapFromGameToCurrent(0x2000, 0x20); if (mpHeap != NULL) { mpModel = mDoExt_J3DModel__create(i_modelData, 0x80000, 0x11000084); if (mpModel == NULL) { remove(1); mDoExt_restoreCurrentHeap(); } else { mpModel->setBaseScale(cXyz(0.0f, 0.0f, 0.0f)); mpModel->i_setBaseTRMtx(g_mDoMtx_identity); mCreateNum++; mDoExt_adjustSolidHeapToSystem(mpHeap); mRoomNo = roomNo; mDrawBG = drawBG; 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) { JKRSolidHeap* heap = mpHeap; if (heap != NULL) { mDoExt_destroySolidHeap(heap); 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) { if (dComIfGp_roomControl_checkStatusFlag(getRoomNo(), 0x10)) { dKy_tevstr_c* tevstr = dComIfGp_roomControl_getTevStr(getRoomNo()); g_env_light.setLightTevColorType_MAJI(mpModel, tevstr); if (mDrawBG == 1) { dComIfGd_setListBG(); } for (; list != NULL; list = list->field_0x4) { dSmplMdl_modelUpdateDL(list->mpModel); } mDoExt_modelUpdateDL(mpModel); dComIfGd_setList(); } } } /* 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; }