summaryrefslogtreecommitdiff
path: root/include/d/actor/d_a_obj_wchain.h
blob: b9f791d0586fc81976bfe703f53b155e8f52d2bd (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
#ifndef D_A_OBJ_WCHAIN_H
#define D_A_OBJ_WCHAIN_H

#include "SSystem/SComponent/c_phase.h"
#include "f_op/f_op_actor.h"

class daObjWchain_shape_c : public J3DPacket {
public:
    void draw();
    ~daObjWchain_shape_c() {}
};

/**
 * @ingroup actors-objects
 * @class daObjWchain_c
 * @brief Wolf Chain
 *
 * @details
 *
 */
class daObjWchain_c : public fopAc_ac_c {
public:
    int createHeap();
    cPhs_Step create();
    ~daObjWchain_c();
    void setMatrix();
    s16 getChainAngleZ(cXyz*, int);
    void setChainPos();
    int execute();
    int draw();

    GXLightObj* getLightObj() { return &tevStr.mLightObj.mLightObj; }
    J3DModelData* getChainModelData() { return mpChainModelData; }
    cXyz* getChainPos() { return mChainPos; }
    csXyz* getChainAngle() { return mChainAngle; }
    s16* getChainAngleZ() { return mChainRotation; }
    cXyz& getJumpAimPos() { return eyePos; }
    cXyz& getTopPos() { return mTopPos; }
    cXyz& getRoofPos() { return mRoofPos; }
    f32 getPullLength() const { return mPullLength; }
    void setPullLength(f32 i_length) { mPullLength = i_length; }
    f32 getInitOutLength() const { return mInitOutLength; }
    f32 getRealRoofY() { return mRealRoofY; }
    f32 getMoveDisRate() { return mPullLength * 0.01f; }
    static f32 getLastOffset() { return 6.0f; }
    static f32 getDownOffset() { return 100.0f; }
    static f32 getSwitchOffset() { return 94.0f; }
    u8 getSwitchNum() { return mSw; }
    void onRide() { mRide = true; }
    void offRide() { mRide = false; }
    bool checkRideFlg() { return mRide; }
    void onEndFlg() { mEnd = true; }
    bool getEndFlg() { return mEnd; }

    void onNowSwitchFlg() {
        mNowSwitch = true;
        mDown = true;
    }

private:
    /* 0x568 */ request_of_phase_process_class mPhaseReq;
    /* 0x570 */ J3DModel* mpHandleModel;
    /* 0x574 */ J3DModelData* mpChainModelData;
    /* 0x578 */ daObjWchain_shape_c mShape;
    /* 0x588 */ cXyz mTopPos;
    /* 0x594 */ cXyz mChainPos[0x10];
    /* 0x654 */ cXyz mChainSpeed[0x10];
    /* 0x714 */ csXyz mChainAngle[0x10];
    /* 0x774 */ bool mRide;
    /* 0x775 */ bool mNowSwitch;
    /* 0x776 */ bool mEnd;
    /* 0x777 */ bool mRidePrev;
    /* 0x778 */ u8 mSw;
    /* 0x779 */ u8 mRepeatable;
    /* 0x77A */ bool mReset;
    /* 0x77B */ bool mDown;
    /* 0x77C */ s16 mHandleRotation;
    /* 0x77E */ u16 field_0x77e;
    /* 0x780 */ s16 mChainRotation[0x10];
    /* 0x7A0 */ f32 mPullLength;
    /* 0x7A4 */ f32 mInitOutLength;
    /* 0x7A8 */ f32 field_0x7a8;
    /* 0x7AC */ f32 mRealRoofY;
    /* 0x7B0 */ cXyz mRoofPos;
};

STATIC_ASSERT(sizeof(daObjWchain_c) == 0x7BC);

#endif /* D_A_OBJ_WCHAIN_H */