00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015 #ifndef CHARACTERMAKER_H
00016 #define CHARACTERMAKER_H
00017
00018 #include "pandabase.h"
00019
00020 #include "vertexTransform.h"
00021 #include "vertexSlider.h"
00022 #include "character.h"
00023 #include "vector_PartGroupStar.h"
00024 #include "typedef.h"
00025 #include "pmap.h"
00026
00027
00028 class EggNode;
00029 class EggGroup;
00030 class EggGroupNode;
00031 class EggPrimitive;
00032 class EggBin;
00033 class PartGroup;
00034 class CharacterJointBundle;
00035 class Character;
00036 class GeomNode;
00037 class CharacterSlider;
00038 class MovingPartBase;
00039 class EggLoader;
00040 class PandaNode;
00041
00042
00043
00044
00045
00046
00047
00048 class EXPCL_PANDAEGG CharacterMaker {
00049 public:
00050 CharacterMaker(EggGroup *root, EggLoader &loader, bool structured = false);
00051
00052 Character *make_node();
00053
00054 string get_name() const;
00055 PartGroup *egg_to_part(EggNode *egg_node) const;
00056 VertexTransform *egg_to_transform(EggNode *egg_node);
00057 int egg_to_index(EggNode *egg_node) const;
00058 PandaNode *part_to_node(PartGroup *part, const string &name) const;
00059
00060 int create_slider(const string &name);
00061 VertexSlider *egg_to_slider(const string &name);
00062
00063 private:
00064 CharacterJointBundle *make_bundle();
00065 void build_joint_hierarchy(EggNode *egg_node, PartGroup *part, int index);
00066 void parent_joint_nodes(PartGroup *part);
00067
00068 void make_geometry(EggNode *egg_node);
00069
00070 EggGroupNode *determine_primitive_home(EggPrimitive *egg_primitive);
00071 EggGroupNode *determine_bin_home(EggBin *egg_bin);
00072 VertexTransform *get_identity_transform();
00073
00074 typedef pmap<EggNode *, int> NodeMap;
00075 NodeMap _node_map;
00076
00077 typedef vector_PartGroupStar Parts;
00078 Parts _parts;
00079
00080 typedef pmap<int, PT(VertexTransform) > VertexTransforms;
00081 VertexTransforms _vertex_transforms;
00082 PT(VertexTransform) _identity_transform;
00083
00084 typedef pmap<string, PT(VertexSlider) > VertexSliders;
00085 VertexSliders _vertex_sliders;
00086
00087 EggLoader &_loader;
00088 EggGroup *_egg_root;
00089 PT(Character) _character_node;
00090 CharacterJointBundle *_bundle;
00091 PartGroup *_morph_root;
00092 PartGroup *_skeleton_root;
00093
00094 bool _structured;
00095
00096 };
00097
00098 #endif