summaryrefslogtreecommitdiff
path: root/src/f_op/f_op_scene.cpp
blob: e35b32c7689d02ab5ed2b82b8651fa123d3fc4c6 (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
/**
 * f_op_scene.cpp
 * Scene Process Framework
 */

#include "f_op/f_op_scene.h"
#include "f_pc/f_pc_manager.h"
#include "m_Do/m_Do_hostIO.h"

static BOOL fopScn_Draw(scene_class* i_this) {
    return fpcNd_DrawMethod((nodedraw_method_class*)i_this->mpMtd, i_this);
}

static BOOL fopScn_Execute(scene_class* i_this) {
    return fpcMtd_Execute((process_method_class*)i_this->mpMtd, i_this);
}

static BOOL fopScn_IsDelete(void* i_this) {
    return fpcMtd_IsDelete((process_method_class*)((scene_class*)i_this)->mpMtd, i_this);
}

static BOOL fopScn_Delete(void* i_this) {
    scene_class* scene = static_cast<scene_class*>(i_this);
    BOOL ret = fpcMtd_Delete((process_method_class*)scene->mpMtd, scene);
    if (ret == TRUE) {
        fopScnTg_QueueTo(&scene->mScnTg);
    }
    mDoHIO_root.update();
    return ret;
}

static cPhs_State fopScn_Create(void* i_this) {
    scene_class* scene = static_cast<scene_class*>(i_this);
    if (fpcM_IsFirstCreating(i_this)) {
        scene_process_profile_definition* profile = (scene_process_profile_definition*)fpcM_GetProfile(i_this);
        scene->mpMtd = profile->sub_method;
        fopScnTg_Init(&scene->mScnTg, i_this);
        fopScnTg_ToQueue(&scene->mScnTg);

        u32* append = (u32*)fpcM_GetAppend(i_this);
        if (append != NULL) {
            scene->base.base.mParameters = *append;
        }
    }

    return fpcMtd_Create((process_method_class*)scene->mpMtd, i_this);
}

leafdraw_method_class g_fopScn_Method = {
    (process_method_func)fopScn_Create,
    (process_method_func)fopScn_Delete,
    (process_method_func)fopScn_Execute,
    (process_method_func)fopScn_IsDelete,
    (process_method_func)fopScn_Draw,
};