summaryrefslogtreecommitdiff
path: root/include/d/actor/d_a_obj_eff.h
blob: efe3f7b1545ec1fa2dbe93dfcfb01e9015a0022c (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
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
#ifndef D_A_OBJ_EFF_H
#define D_A_OBJ_EFF_H

#include "d/d_a_obj.h"
#include "f_op/f_op_actor.h"
#include "f_op/f_op_actor_mng.h"
#include "d/d_particle.h"

namespace daObjEff {
    class Act_c : public fopAc_ac_c {
    public:
        typedef bool (Act_c::*CreateHeapProc)();
        typedef BOOL (Act_c::*SetProc)();
        typedef void (Act_c::*RemoveProc)();
        typedef void (Act_c::*DieProc)();

        enum Prm_e {
            PRM_TYPE_W = 8,
            PRM_TYPE_S = 0,
        };

        enum Type_e {
            Type_BARREL_SMOKE_e = 0,
            Type_STOOL_SMOKE_e = 1,
            Type_SKULL_SMOKE_e = 2,
            Type_LAND_SMOKE_e = 3,
            Type_PINECONE_SMOKE_e = 4,
            Type_WOODBOX_SMOKE_e = 5,
        };

        int prm_get_type() const { return daObj::PrmAbstract(this, PRM_TYPE_W, PRM_TYPE_S); }

        static void make_barrel_smoke(cXyz* pos) { fopAcM_create(fpcNm_Obj_Eff_e, Type_BARREL_SMOKE_e, pos); }
        static void make_stool_smoke(cXyz* pos) { fopAcM_create(fpcNm_Obj_Eff_e, Type_STOOL_SMOKE_e, pos); }
        static void make_skull_smoke(cXyz* pos) { fopAcM_create(fpcNm_Obj_Eff_e, Type_SKULL_SMOKE_e, pos); }
        static void make_land_smoke(cXyz* i_pos, f32 i_scale) {
            cXyz scale(i_scale, i_scale, i_scale);
            scale *= (5.0f / 3.0f);
            fopAcM_create(fpcNm_Obj_Eff_e, Type_LAND_SMOKE_e, i_pos, -1, NULL, &scale);
        }
        static void make_pinecone_smoke(cXyz* pos) { fopAcM_create(fpcNm_Obj_Eff_e, Type_PINECONE_SMOKE_e, pos); }
        static void make_woodBox_smoke(cXyz* pos) { fopAcM_create(fpcNm_Obj_Eff_e, Type_WOODBOX_SMOKE_e, pos); }

        static BOOL solidHeapCB(fopAc_ac_c*);
        bool create_heap_barrel_smoke();
        bool create_heap_stool_smoke();
        bool create_heap_skull_smoke();
        bool create_heap_land_smoke();
        bool create_heap_pinecone_smoke();
        bool create_heap_woodBox_smoke();
        bool create_heap();
        BOOL eff_set_barrel_smoke();
        BOOL eff_set_stool_smoke();
        BOOL eff_set_skull_smoke();
        BOOL eff_set_land_smoke();
        BOOL eff_set_pinecone_smoke();
        BOOL eff_set_woodBox_smoke();
        BOOL eff_set();
        cPhs_State _create();
        void remove_barrel_smoke();
        void remove_stool_smoke();
        void remove_skull_smoke();
        void remove_land_smoke();
        void remove_pinecone_smoke();
        void remove_woodBox_smoke();
        void remove();
        bool _delete();
        void die_barrel_smoke();
        void die_stool_smoke();
        void die_skull_smoke();
        void die_land_smoke();
        void die_pinecone_smoke();
        void die_woodBox_smoke();
        void die();
        bool _execute();
    
    public:
        /* 0x290 */ int mType;
        /* 0x294 */ dPa_followEcallBack* mParticleCallback;
    };

    class BarrelSmokeCB : public dPa_smokeEcallBack {
    public:
        BarrelSmokeCB();
        void execute(JPABaseEmitter*);
    public:
        /* 0x20 */ int field_0x20;
        /* 0x24 */ static const GXColor original_color;
    };

    class StoolSmokeCB : public dPa_smokeEcallBack {
    public:
        StoolSmokeCB();
        void execute(JPABaseEmitter*);
    public:
        /* 0x20 */ int field_0x20;
        /* 0x24 */ static const GXColor original_color;
    };

    class SkullSmokeCB : public dPa_smokeEcallBack {
    public:
        SkullSmokeCB();
        void execute(JPABaseEmitter*);
    public:
        /* 0x20 */ int field_0x20;
        /* 0x24 */ static const GXColor original_color;
    };

    class LandSmokeCB : public dPa_smokeEcallBack {
    public:
        LandSmokeCB();
    };

    class PineconeSmokeCB : public dPa_smokeEcallBack {
    public:
        PineconeSmokeCB();
        void execute(JPABaseEmitter*);
    public:
        /* 0x20 */ int field_0x20;
        /* 0x24 */ static const GXColor original_color;
    };

    class WoodBoxSmokeCB : public dPa_smokeEcallBack {
    public:
        WoodBoxSmokeCB();
        void execute(JPABaseEmitter*);
    public:
        /* 0x20 */ int field_0x20;
        /* 0x24 */ static const GXColor original_color;
    };
};

#endif /* D_A_OBJ_EFF_H */