00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016 #ifndef MAXNODETREE_H
00017 #define MAXNODETREE_H
00018
00019 class EggData;
00020 class EggGroupNode;
00021
00022
00023
00024
00025
00026
00027 class MaxNodeTree {
00028 public:
00029 MaxNodeTree();
00030 MaxNodeDesc *build_node(INode *max_node);
00031 MaxNodeDesc *build_joint(INode *max_node, MaxNodeDesc *node_joint);
00032 bool build_complete_hierarchy(INode *root, ULONG *selection_list, int len);
00033 MaxNodeDesc *find_node(INode *max_node);
00034 MaxNodeDesc *find_joint(INode *max_node);
00035
00036 int get_num_nodes() const;
00037 MaxNodeDesc *get_node(int n) const;
00038
00039 void clear_egg(EggData *egg_data, EggGroupNode *egg_root,
00040 EggGroupNode *skeleton_node);
00041 EggGroup *get_egg_group(MaxNodeDesc *node_desc);
00042 EggTable *get_egg_table(MaxNodeDesc *node_desc);
00043 EggXfmSAnim *get_egg_anim(MaxNodeDesc *node_desc);
00044
00045 MaxNodeDesc* _root;
00046 PN_stdfloat _fps;
00047
00048
00049
00050
00051 bool _export_mesh;
00052
00053 private:
00054 EggData *_egg_data;
00055 EggGroupNode *_egg_root;
00056 EggGroupNode *_skeleton_node;
00057
00058 MaxNodeDesc *r_build_node(INode *max_node);
00059 MaxNodeDesc *r_build_joint(MaxNodeDesc *node_desc, INode *max_node);
00060 bool node_in_list(ULONG handle, ULONG *list, int len);
00061 bool r_build_hierarchy(INode *root, ULONG *selection_list, int len);
00062 bool is_joint(INode *node);
00063 void set_collision_tags(MaxNodeDesc *node_desc, EggGroup *egg_group);
00064
00065 typedef pmap<ULONG, MaxNodeDesc *> NodesByPath;
00066 NodesByPath _nodes_by_path;
00067
00068 typedef pvector<MaxNodeDesc *> Nodes;
00069 Nodes _nodes;
00070 };
00071
00072 #endif