summaryrefslogtreecommitdiff
path: root/src/d/d_bg_s_movebg_actor.cpp
blob: c1d7246dc16bbdbf0f7dd71691de6fe6032bd0c8 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
//
// Generated by dtk
// Translation Unit: d_bg_s_movebg_actor.cpp
//

#include "d/d_bg_s_movebg_actor.h"
#include "d/d_bg_w.h"
#include "d/d_com_inf_game.h"
#include "m_Do/m_Do_mtx.h"

/* 800A56B8-800A56FC       .text __ct__16dBgS_MoveBgActorFv */
dBgS_MoveBgActor::dBgS_MoveBgActor() {
    mpBgW = NULL;
}

/* 800A56FC-800A571C       .text CheckCreateHeap__FP10fopAc_ac_c */
static int CheckCreateHeap(fopAc_ac_c* i_actor) {
    return static_cast<dBgS_MoveBgActor*>(i_actor)->MoveBGCreateHeap();
}

const char* dBgS_MoveBgActor::m_name;

int dBgS_MoveBgActor::m_dzb_id;

MoveBGActor_SetFunc dBgS_MoveBgActor::m_set_func;

/* 800A571C-800A57F4       .text MoveBGCreateHeap__16dBgS_MoveBgActorFv */
BOOL dBgS_MoveBgActor::MoveBGCreateHeap() {
    if (!CreateHeap()) {
        return FALSE;
    }

    mpBgW = new dBgW();
    if (mpBgW && !mpBgW->Set((cBgD_t*)dComIfG_getObjectRes(m_name, m_dzb_id), cBgW::MOVE_BG_e, &mBgMtx)) {
        if (m_set_func != NULL) {
            mpBgW->SetCrrFunc(m_set_func);
        }
    } else {
#if VERSION > VERSION_DEMO
        mpBgW = NULL;
#endif
        return FALSE;
    }

    return TRUE;
}

/* 800A57F4-800A58F4       .text MoveBGCreate__16dBgS_MoveBgActorFPCciPFP4dBgWPvR13cBgS_PolyInfobP4cXyzP5csXyzP5csXyz_vUl */
cPhs_State dBgS_MoveBgActor::MoveBGCreate(const char* i_arcName, int i_dzb_id,
                                          MoveBGActor_SetFunc i_setFunc, u32 i_heapSize) {
    mDoMtx_stack_c::transS(current.pos.x, current.pos.y, current.pos.z);
    mDoMtx_stack_c::YrotM(shape_angle.y);
    mDoMtx_stack_c::scaleM(scale.x, scale.y, scale.z);
    MTXCopy(mDoMtx_stack_c::get(), mBgMtx);

    m_name = i_arcName;
    m_dzb_id = i_dzb_id;
    m_set_func = i_setFunc;

    if (!fopAcM_entrySolidHeap(this, CheckCreateHeap, i_heapSize)) {
        return cPhs_ERROR_e;
    }

    if (dComIfG_Bgsp()->Regist(mpBgW, this)) {
        return cPhs_ERROR_e;
    }

    if (Create()) {
        return cPhs_COMPLEATE_e;
    } else {
        return cPhs_ERROR_e;
    }
}

/* 800A58F4-800A5980       .text MoveBGDelete__16dBgS_MoveBgActorFv */
BOOL dBgS_MoveBgActor::MoveBGDelete() {
    BOOL ret = Delete();

    if (mpBgW != NULL && mpBgW->ChkUsed()) {
        dComIfG_Bgsp()->Release(mpBgW);
    }
    return ret;
}

/* 800A5980-800A5A3C       .text MoveBGExecute__16dBgS_MoveBgActorFv */
BOOL dBgS_MoveBgActor::MoveBGExecute() {
    Mtx* new_mtx = NULL;

    BOOL ret = Execute(&new_mtx);
    if (new_mtx == NULL) {
        mDoMtx_stack_c::transS(current.pos.x, current.pos.y, current.pos.z);
        mDoMtx_stack_c::YrotM(shape_angle.y);
        mDoMtx_stack_c::scaleM(scale.x, scale.y, scale.z);
        MTXCopy(mDoMtx_stack_c::get(), mBgMtx);
    } else {
        MTXCopy(*new_mtx, mBgMtx);
    }

    mpBgW->Move();

    return ret;
}