//
// Generated by dtk
// Translation Unit: d_a_obj_vmsms.cpp
//

#include "d/dolzel_rel.h" // IWYU pragma: keep
#include "d/actor/d_a_obj_vmsms.h"
#include "d/d_com_inf_game.h"
#include "res/Object/VmsMS.h"

const char daObjVmsms_c::M_arcname[6] = "VmsMS";

/* 00000078-00000098       .text solidHeapCB__12daObjVmsms_cFP10fopAc_ac_c */
BOOL daObjVmsms_c::solidHeapCB(fopAc_ac_c* i_this) {
    return ((daObjVmsms_c*)i_this)->create_heap();
}

/* 00000098-0000015C       .text create_heap__12daObjVmsms_cFv */
BOOL daObjVmsms_c::create_heap() {
    J3DModelData* mdl_data;
    BOOL ret = FALSE;

    mdl_data = (J3DModelData*)dComIfG_getObjectRes(M_arcname, dRes_INDEX_VMSMS_BDL_VMSMS_e);
    JUT_ASSERT(0x5b, mdl_data != NULL);

    if (mdl_data != NULL) {
        mModel = mDoExt_J3DModel__create(mdl_data, 0, 0x11020203);
        if (mModel != NULL) {
            ret = TRUE;
        }
    }

    return ret;
}

/* 0000015C-0000021C       .text _create__12daObjVmsms_cFv */
cPhs_State daObjVmsms_c::_create() {
    cPhs_State ret = cPhs_ERROR_e;

    fopAcM_ct(this, daObjVmsms_c);

    if (!check_demo()) {
        ret = dComIfG_resLoad(&mPhs, M_arcname);
        if (ret == cPhs_COMPLEATE_e) {
            ret = cPhs_ERROR_e;
            if (fopAcM_entrySolidHeap(this, solidHeapCB, 0)) {
                fopAcM_SetMtx(this, mModel->getBaseTRMtx());
                init_mtx();
                ret = cPhs_COMPLEATE_e;
            }
        }
    }

    return ret;
}

/* 0000021C-0000024C       .text _delete__12daObjVmsms_cFv */
bool daObjVmsms_c::_delete() {
    dComIfG_resDelete(&mPhs, M_arcname);
    return true;
}

/* 0000024C-0000026C       .text init_mtx__12daObjVmsms_cFv */
void daObjVmsms_c::init_mtx() {
    mModel->setBaseScale(scale);
}

/* 0000026C-000002A8       .text check_demo__12daObjVmsms_cCFv */
bool daObjVmsms_c::check_demo() const {
    return dComIfGs_isEventBit(dSv_event_flag_c::UNK_2D04);
}

/* 000002A8-0000030C       .text _execute__12daObjVmsms_cFv */
bool daObjVmsms_c::_execute() {
    if (dComIfGp_event_runCheck()) {
        if (dComIfGp_evmng_startCheck("master_sword"))
            fopAcM_delete(this);
    }
    return true;
}

/* 0000030C-0000036C       .text _draw__12daObjVmsms_cFv */
bool daObjVmsms_c::_draw() {
    g_env_light.settingTevStruct(TEV_TYPE_ACTOR, &current.pos, &tevStr);
    g_env_light.setLightTevColorType(mModel, &tevStr);
    mDoExt_modelUpdateDL(mModel);
    return true;
}

namespace {
/* 0000036C-0000038C       .text Mthd_Create__27@unnamed@d_a_obj_vmsms_cpp@FPv */
cPhs_State Mthd_Create(void* i_this) {
    return ((daObjVmsms_c*)i_this)->_create();
}

/* 0000038C-000003B0       .text Mthd_Delete__27@unnamed@d_a_obj_vmsms_cpp@FPv */
BOOL Mthd_Delete(void* i_this) {
    return ((daObjVmsms_c*)i_this)->_delete();
}

/* 000003B0-000003D4       .text Mthd_Execute__27@unnamed@d_a_obj_vmsms_cpp@FPv */
BOOL Mthd_Execute(void* i_this) {
    return ((daObjVmsms_c*)i_this)->_execute();
}

/* 000003D4-000003F8       .text Mthd_Draw__27@unnamed@d_a_obj_vmsms_cpp@FPv */
BOOL Mthd_Draw(void* i_this) {
    return ((daObjVmsms_c*)i_this)->_draw();
}

/* 000003F8-00000400       .text Mthd_IsDelete__27@unnamed@d_a_obj_vmsms_cpp@FPv */
BOOL Mthd_IsDelete(void* i_this) {
    UNUSED(i_this);
    return TRUE;
}

static actor_method_class Vmsms_Mthd_Table = {
    (process_method_func)Mthd_Create,
    (process_method_func)Mthd_Delete,
    (process_method_func)Mthd_Execute,
    (process_method_func)Mthd_IsDelete,
    (process_method_func)Mthd_Draw,
};
}; // namespace

actor_process_profile_definition g_profile_Obj_Vmsms = {
    /* Layer ID     */ fpcLy_CURRENT_e,
    /* List ID      */ 0x0003,
    /* List Prio    */ fpcPi_CURRENT_e,
    /* Proc Name    */ fpcNm_Obj_Vmsms_e,
    /* Proc SubMtd  */ &g_fpcLf_Method.base,
    /* Size         */ sizeof(daObjVmsms_c),
    /* Size Other   */ 0,
    /* Parameters   */ 0,
    /* Leaf SubMtd  */ &g_fopAc_Method.base,
    /* Draw Prio    */ fpcDwPi_Obj_Vmsms_e,
    /* Actor SubMtd */ &Vmsms_Mthd_Table,
    /* Status       */ fopAcStts_UNK4000_e | fopAcStts_UNK40000_e,
    /* Group        */ fopAc_ACTOR_e,
    /* Cull Type    */ fopAc_CULLBOX_CUSTOM_e,
};
