summaryrefslogtreecommitdiff
path: root/include/JSystem/J3DGraphAnimator/J3DModelData.h
blob: 39d8efdceca8f29ff044b7c1f34362b77d7ff002 (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
#ifndef J3DMODELDATA_H
#define J3DMODELDATA_H

#include "JSystem/J3DGraphAnimator/J3DJointTree.h"
#include "JSystem/J3DGraphAnimator/J3DMaterialAttach.h"
#include "JSystem/J3DGraphAnimator/J3DShapeTable.h"
#include "JSystem/J3DGraphBase/J3DSys.h"
#include "JSystem/J3DGraphBase/J3DVertex.h"
#include "JSystem/J3DGraphBase/J3DMaterial.h"

typedef struct _GXColor GXColor;
class JUTNameTab;

enum J3DMaterialCopyFlag {
    J3DMatCopyFlag_Material = 0x01,
    J3DMatCopyFlag_Texture = 0x02,
    J3DMatCopyFlag_All = J3DMatCopyFlag_Material | J3DMatCopyFlag_Texture,
};

enum {
    J3DMdlDataFlag_ConcatView = 0x10,
    J3DMdlDataFlag_NoUseDrawMtx = 0x20,
    J3DMdlDataFlag_NoAnimation = 0x100,
};

class J3DModelData {
public:
    void clear();
    J3DModelData();
    s32 newSharedDisplayList(u32);
    bool isDeformablePositionFormat() const;
    void indexToPtr();
    void makeSharedDL();
    void initShapeNodes();
    void sortVcdVatCmd();
    void setMaterialTable(J3DMaterialTable*, J3DMaterialCopyFlag);

    virtual ~J3DModelData();

    J3DMaterialTable& getMaterialTable() { return mMaterialTable; }
    JUTNameTab* getMaterialName() const { return mMaterialTable.getMaterialName(); }
    J3DVertexData& getVertexData() { return mVertexData; }
    GXVtxAttrFmtList* getVtxAttrFmtList() const { return ((J3DVertexData*)&mVertexData)->getVtxAttrFmtList(); }
    u16 getShapeNum() const { return mShapeTable.getShapeNum(); }
    u16 getMaterialNum() const { return mMaterialTable.getMaterialNum(); }
    u16 getJointNum() const { return mJointTree.getJointNum(); }
    u16 getDrawMtxNum() const { return mJointTree.getDrawMtxNum(); }
    J3DMaterial* getMaterialNodePointer(u16 idx) const {
        return mMaterialTable.getMaterialNodePointer(idx);
    }
    u32 getVtxNum() const { return mVertexData.getVtxNum(); }
    u32 getNrmNum() const { return mVertexData.getNrmNum(); }
    J3DDrawMtxData * getDrawMtxData() { return mJointTree.getDrawMtxData(); }
    u8 getDrawMtxFlag(u16 idx) const { return mJointTree.getDrawMtxFlag(idx); }
    u16 getDrawMtxIndex(u16 idx) const { return mJointTree.getDrawMtxIndex(idx); }
    J3DShape* getShapeNodePointer(u16 idx) const { return mShapeTable.getShapeNodePointer(idx); }
    J3DJoint* getJointNodePointer(u16 idx) const { return mJointTree.getJointNodePointer(idx); }
    J3DJointTree& getJointTree() { return mJointTree; }
    JUTNameTab* getJointName() const { return mJointTree.getJointName(); }
    Mtx& getInvJointMtx(int idx) { return mJointTree.getInvJointMtx(idx); }
    J3DTexture* getTexture() const { return mMaterialTable.getTexture(); }
    JUTNameTab* getTextureName() const { return mMaterialTable.getTextureName(); }
    void setTexture(J3DTexture* pTexture) { mMaterialTable.setTexture(pTexture); }
    void setTextureName(JUTNameTab* pTextureName) { mMaterialTable.setTextureName(pTextureName); }
    bool isLocked() { return mMaterialTable.isLocked(); }
    u16 getDrawFullWgtMtxNum() const { return mJointTree.getDrawFullWgtMtxNum(); }
    u16 getWEvlpMtxNum() const { return mJointTree.getWEvlpMtxNum(); }
    u16* getWEvlpMixMtxIndex() { return mJointTree.getWEvlpMixMtxIndex(); }
    f32* getWEvlpMixWeight() { return mJointTree.getWEvlpMixWeight(); }
    u8 getWEvlpMixMtxNum(u16 idx) const { return mJointTree.getWEvlpMixMtxNum(idx); }
    u32 getModelDataType() const { return mJointTree.getModelDataType(); }
    const J3DModelHierarchy* getHierarchy() const { return mJointTree.getHierarchy(); }
    void setHierarchy(J3DModelHierarchy* hierarchy) { mJointTree.setHierarchy(hierarchy); }
    J3DMtxCalc* getBasicMtxCalc() { return mJointTree.getBasicMtxCalc(); }
    void setBasicMtxCalc(J3DMtxCalc* calc) { mJointTree.setBasicMtxCalc(calc); }
    void setModelDataType(u32 type) { mJointTree.setModelDataType(type); }
    J3DJoint* getRootNode() { return mJointTree.getRootNode(); }
    GXColor* getVtxColorArray(u8 idx) const { return mVertexData.getVtxColorArray(idx); }
    bool checkFlag(u32 flag) const { return (mFlags & flag) ? true : false; }
    u32 getFlag() const { return mFlags; }
    u16 checkBumpFlag() const { return mbHasBumpArray; }
    void setBumpFlag(u32 flag) { mbHasBumpArray = flag; }
    bool checkBBoardFlag() const { return mbHasBillboard == 1; }
    s32 entryTexMtxAnimator(J3DAnmTextureSRTKey* anm) { return mMaterialTable.entryTexMtxAnimator(anm); }
    s32 entryTevRegAnimator(J3DAnmTevRegKey* anm) { return mMaterialTable.entryTevRegAnimator(anm); }
    s32 entryMatColorAnimator(J3DAnmColor* anm) { return mMaterialTable.entryMatColorAnimator(anm); }
    int setTexMtxAnimator(J3DAnmTextureSRTKey* pAnm, J3DTexMtxAnm* pTexAnm, J3DTexMtxAnm* pDualAnmR) {
        return mMaterialTable.setTexMtxAnimator(pAnm, pTexAnm, pDualAnmR);
    }
    int setTexNoAnimator(J3DAnmTexPattern* anm, J3DTexNoAnm* anmR) {
        return mMaterialTable.setTexNoAnimator(anm, anmR);
    }
    int setMatColorAnimator(J3DAnmColor* anm, J3DMatColorAnm* anmR) {
        return mMaterialTable.setMatColorAnimator(anm, anmR);
    }
    int removeTexNoAnimator(J3DAnmTexPattern* anm) {
        return mMaterialTable.removeTexNoAnimator(anm);
    }
    int removeTexMtxAnimator(J3DAnmTextureSRTKey* anm) {
        return mMaterialTable.removeTexMtxAnimator(anm);
    }
    int removeTevRegAnimator(J3DAnmTevRegKey* anm) {
        return mMaterialTable.removeTevRegAnimator(anm);
    }
    int removeMatColorAnimator(J3DAnmColor* anm) {
        return mMaterialTable.removeMatColorAnimator(anm);
    }
    void makeHierarchy(J3DNode* joint, const J3DModelHierarchy** hierarchy) {
        mJointTree.makeHierarchy(joint, hierarchy, &mMaterialTable, mShapeTable.mShapeNodePointer);
        initShapeNodes();
    }
    const void* getBinary() { return mBinary; }

private:
    friend class J3DModelLoader;

    /* 0x04 */ const void* mBinary;
    /* 0x08 */ u32 mFlags;
    /* 0x0C */ u16 mbHasBumpArray;
    /* 0x0E */ u16 mbHasBillboard;
    /* 0x10 */ J3DJointTree mJointTree;
    /* 0x58 */ J3DMaterialTable mMaterialTable;
    /* 0x7C */ J3DShapeTable mShapeTable;
    /* 0x84 */ J3DVertexData mVertexData;
    /* 0xE0 */ JUTNameTab * mName;
};  // Size: 0xE4

STATIC_ASSERT(sizeof(J3DModelData) == 0xE4);

#endif /* J3DMODELDATA_H */