#ifndef J3DNODE_H
#define J3DNODE_H

#include "dolphin/mtx/mtx.h"

class J3DNode;
class J3DModelData;
typedef int (*J3DNodeCallBack)(J3DNode*, int);

class J3DNode {
public:
    virtual void init(J3DModelData*) {}
    virtual void entryIn() {}
    virtual void calcIn() {}
    virtual void calcOut() {}
    virtual u32 getType() const { return 'NNON'; }
    virtual ~J3DNode();

    J3DNode();
    void appendChild(J3DNode*);

    J3DNode* getYounger() { return mYounger; }
    void setYounger(J3DNode* pYounger) { mYounger = pYounger; }
    void setCallBack(J3DNodeCallBack callback) { mCallBack = callback; }
    J3DNodeCallBack getCallBack() { return mCallBack; }
    J3DNode* getChild() { return mChild; }

    /* 0x04 */ void* mCallBackUserData;
    /* 0x08 */ J3DNodeCallBack mCallBack;
    /* 0x0C */ void* field_0x8;
    /* 0x10 */ J3DNode* mChild;
    /* 0x14 */ J3DNode* mYounger;
};  // Size: 0x18

#endif /* J3DNODE_H */
