summaryrefslogtreecommitdiff
path: root/include/d/actor/d_a_hozelda.h
blob: 0c640e779c8fc3e4f6d42603b841956c00aa313d (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
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
#ifndef D_A_HOZELDA_H
#define D_A_HOZELDA_H

#include "f_op/f_op_actor_mng.h"
#include "d/actor/d_a_player.h"
#include "JSystem/J3DGraphAnimator/J3DMaterialAnm.h"

class daHoZelda_matAnm_c : public J3DMaterialAnm {
public:
    daHoZelda_matAnm_c() {
        init();
    }

    void init();

    void setNowOffsetX(f32 i_offsetX) { mNowOffsetX = i_offsetX; }
    void setNowOffsetY(f32 i_offsetY) { mNowOffsetY = i_offsetY; }
    f32* getNowOffsetXP() { return &mNowOffsetX; }
    f32* getNowOffsetYP() { return &mNowOffsetY; }

    virtual ~daHoZelda_matAnm_c() {}
    virtual void calc(J3DMaterial*) const;

    static u8 getEyeMoveFlg() { return mEyeMoveFlg; }
    static void offEyeMoveFlg() { mEyeMoveFlg = false; }
    static void onEyeMoveFlg() { mEyeMoveFlg = true; }

    static u8 getMorfFrame() { return mMorfFrame; }
    static void setMorfFrame(u8 i_frame) { mMorfFrame = i_frame; }
    static void decMorfFrame() { cLib_calcTimer<u8>(&mMorfFrame); }

    static u8 mEyeMoveFlg;
    static u8 mMorfFrame;

    /* 0x0F4 */ f32 field_0xf4;
    /* 0x0F8 */ f32 field_0xf8;
    /* 0x0FC */ f32 mNowOffsetX;
    /* 0x100 */ f32 mNowOffsetY;
};

struct daHoZelda_hio_c1 {
    /* 0x0 */ s16 bow_search_y_angle;
    /* 0x2 */ s16 bow_start_angle;
    /* 0x4 */ s16 bow_end_angle;
    /* 0x6 */ s16 field_0x6;
    /* 0x8 */ f32 bow_start_distance;
    /* 0xC */ f32 bow_end_distance;
};

struct daHoZelda_hio_c0 {
    daHoZelda_hio_c0() {}

    static daHoZelda_hio_c1 const m;
};

class daHoZelda_hio_c : public JORReflexible {
public:
    daHoZelda_hio_c() {
#if DEBUG
        m = daHoZelda_hio_c0::m;
#endif
    }
    
    /* 0x4 */ s8 mID;

#if DEBUG
    void genMessage(JORMContext*);
    virtual ~daHoZelda_hio_c() {}
    /* 0x8 */ daHoZelda_hio_c1 m;
#endif
};

#if DEBUG
#define HOZELDA_HIO_CLASS daHoZelda_hio_c
#else
#define HOZELDA_HIO_CLASS daHoZelda_hio_c0
#endif

/**
 * @ingroup actors-unsorted
 * @class daHoZelda_c
 * @brief Zelda (Horseback)
 *
 * @details
 *
 */
class daHoZelda_c : public fopAc_ac_c {
public:
    int createHeap();
    void modelCallBack(u16);
    int create();
    ~daHoZelda_c();
    int setDoubleAnime(f32, f32, f32, u16, u16, f32);
    int setUpperAnime(u16);
    void resetUpperAnime();
    int setSingleAnime(u16, f32, f32, s16, f32);
    void animePlay();
    void setEyeBtp(u16);
    void setEyeBtk(u16, u8);
    void setNormalFace();
    void setAnm();
    void setBowModel();
    void setMatrix();
    void shootArrow();
    void deleteArrow();
    void setBowBck(u16);
    void setRideOffset();
    void clearEyeMove();
    void setEyeMove(cXyz const*, s16, s16);
    void setNeckAngle();
    void searchBodyAngle();
    int execute();
    int draw();

    MtxP getRightHandMtx() { return mpZeldaModel->getAnmMtx(22); }
    MtxP getRightFingerMtx() { return mpZeldaModel->getAnmMtx(23); }

    u8 checkBowMode() const { return mBowMode; }
    void setDamageInit() { mDamageInit = 1; }
    u8 checkSingleRide() const { return mIsSingleRide; }

    /* 0x568 */ request_of_phase_process_class mPhase;
    /* 0x570 */ J3DModel* mpZeldaModel;
    /* 0x574 */ J3DModel* mpBowModel;
    /* 0x578 */ mDoExt_btpAnm mEyeBtp;
    /* 0x590 */ mDoExt_btkAnm mEyeBtk;
    /* 0x5A8 */ mDoExt_MtxCalcAnmBlendTblOld* field_0x5a8;
    /* 0x5AC */ mDoExt_AnmRatioPack mAnmRatioPack[3];
    /* 0x5C4 */ mDoExt_MtxCalcOldFrame* field_0x5c4;
    /* 0x5C8 */ daPy_frameCtrl_c mFrameCtrl[3];
    /* 0x610 */ daHoZelda_matAnm_c* mpMatAnm[2];
    /* 0x618 */ Z2Creature mSound;
    /* 0x6A8 */ mDoExt_bckAnm mBowBck;
    /* 0x6C4 */ daPy_actorKeep_c mArrowAcKeep;
    /* 0x6CC */ daPy_actorKeep_c mGndAcKeep;
    /* 0x6D4 */ HOZELDA_HIO_CLASS* mpHIO;
    /* 0x6D8 */ u8 mBowMode;
    /* 0x6D9 */ u8 mAnmTimer;
    /* 0x6DA */ u8 field_0x6da;
    /* 0x6DB */ u8 mDamageInit;
    /* 0x6DC */ u8 field_0x6dc;
    /* 0x6DD */ u8 field_0x6dd;
    /* 0x6DE */ u8 field_0x6de;
    /* 0x6DF */ u8 mIsSingleRide;
    /* 0x6E0 */ s8 mReverb;
    /* 0x6E1 */ u8 field_0x6E1[0x6E4 - 0x6E1];
    /* 0x6E4 */ u16 field_0x6e4[2];
    /* 0x6E8 */ u16 mUpperAnmID;
    /* 0x6EA */ u16 mBowAnmID;
    /* 0x6EC */ csXyz mNeckAngle;
    /* 0x6F2 */ csXyz mBodyAngle;
    /* 0x6F8 */ cXyz field_0x6f8;
    /* 0x704 */ const Vec* mpRideOffset;
};

#endif /* D_A_HOZELDA_H */