summaryrefslogtreecommitdiff
path: root/include/d/actor/d_a_obj_pillar.h
blob: a0dfda521677ba7cc8c7c746a50f1b4260c9b9bb (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
#ifndef D_A_OBJ_PILLAR_H
#define D_A_OBJ_PILLAR_H

#include "f_op/f_op_actor_mng.h"
#include "d/d_bg_s_movebg_actor.h"
#include "d/d_cc_d.h"

/**
 * @ingroup actors-objects
 * @class daPillar_c
 * @brief Forest Temple Totem Pole
 *
 * @details
 *
 */
class daPillar_c : public dBgS_MoveBgActor {
public:
    enum shake_e {
        SHAKE_CRASH,
        SHAKE_STRONG,
        SHAKE_WEAK,
        SHAKE_CRASH_LV1,
        SHAKE_IRONBALL,
        SHAKE_NONE = 0xFF,
    };

    struct sdata_t {
        /* 0x0 */ u8 mPower;
        /* 0x1 */ u8 field_0x1;
        /* 0x2 */ s16 mInitAngleX;
        /* 0x4 */ s16 mTime;
        /* 0x6 */ s16 mSpeedY;
        /* 0x8 */ s16 mMaxChangeX;
        /* 0xA */ s16 mMinChangeX;
    };

    void setBaseMtx();
    int create1st();
    bool checkAttacked();
    void on_switch();
    int checkShake();
    void setShake_rcrash();
    void setShake_strong();
    void setShake_weak();
    void switch_proc_call();
    void actionSwOnWait();
    void actionSwOn();
    void actionEnd();
    
    virtual int CreateHeap();
    virtual int Create();
    virtual int Execute(Mtx**);
    virtual int Draw();
    virtual int Delete();

    u16 getTimer() { return fopAcM_GetParamBit(this, 0x18, 8); }
    u8 checkShadow() { return fopAcM_GetParamBit(this, 8, 8); }
    u8 getSwbit() { return fopAcM_GetParamBit(this, 0, 8); }
    u8 getType() { return fopAcM_GetParamBit(this, 0x10, 8); }


    u8 getMdlType() { return field_0x73e & 0xF; }
    bool checkRollAttack() { return mIsRollAttack == true; }
    void setShake(int i_shake) { mShake = i_shake; }
    void setAction(u8 i_action) { mAction = i_action; }

    /* 0x5A0 */ request_of_phase_process_class mPhase;
    /* 0x5A8 */ J3DModel* mpModel;
    /* 0x5AC */ dCcD_Stts mColliderStts;
    /* 0x5E8 */ dCcD_Cyl mCylCollider;
    /* 0x724 */ J3DModel* mpShadowModel;
    /* 0x728 */ u8 field_0x728[0x72D - 0x728];
    /* 0x72D */ u8 mIsPrmInit;
    /* 0x72E */ s16 mRotY;
    /* 0x730 */ u8 field_0x730[0x732 - 0x730];
    /* 0x732 */ u8 mIsRollAttack;
    /* 0x733 */ u8 mAction;
    /* 0x734 */ s16 field_0x734;
    /* 0x736 */ s16 mTimer;
    /* 0x738 */ int mShake;
    /* 0x73C */ s16 field_0x73c;
    /* 0x73E */ u16 field_0x73e;
    /* 0x740 */ u8 mMdlType;
    /* 0x741 */ u8 mShakeMode;
    /* 0x742 */ sdata_t mShakeData;
    /* 0x74E */ s16 mQuakeTimer;
};

STATIC_ASSERT(sizeof(daPillar_c) == 0x750);

class daPillar_HIO_c : public mDoHIO_entry_c {
public:
    daPillar_HIO_c();
    virtual ~daPillar_HIO_c() {}

    void genMessage(JORMContext*);

    /* 0x04 */ daPillar_c::sdata_t mShakeData;
    /* 0x10 */ u8 field_0x10[0x1C - 0x10];
    /* 0x1C */ f32 field_0x1c;
    /* 0x20 */ f32 field_0x20;
    /* 0x24 */ u8 field_0x24;
    /* 0x25 */ u8 field_0x25;
    /* 0x26 */ u8 field_0x26;
    /* 0x27 */ u8 mIsAdjust;
};


#endif /* D_A_OBJ_PILLAR_H */