00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015 #ifndef XFILETOEGGCONVERTER_H
00016 #define XFILETOEGGCONVERTER_H
00017
00018 #include "pandatoolbase.h"
00019 #include "xFileAnimationSet.h"
00020 #include "xFile.h"
00021 #include "somethingToEggConverter.h"
00022 #include "eggTextureCollection.h"
00023 #include "eggMaterialCollection.h"
00024 #include "pvector.h"
00025 #include "pmap.h"
00026 #include "luse.h"
00027 #include "pointerTo.h"
00028
00029 class Datagram;
00030 class XFileMesh;
00031 class XFileMaterial;
00032 class EggGroup;
00033 class EggGroupNode;
00034 class EggTexture;
00035 class EggMaterial;
00036 class XFileDataObject;
00037
00038
00039
00040
00041
00042 class XFileToEggConverter : public SomethingToEggConverter {
00043 public:
00044 XFileToEggConverter();
00045 XFileToEggConverter(const XFileToEggConverter ©);
00046 ~XFileToEggConverter();
00047
00048 virtual SomethingToEggConverter *make_copy();
00049
00050 virtual string get_name() const;
00051 virtual string get_extension() const;
00052 virtual bool supports_compressed() const;
00053
00054 virtual bool convert_file(const Filename &filename);
00055 void close();
00056
00057 EggGroup *get_dart_node() const;
00058
00059 EggTexture *create_unique_texture(const EggTexture ©);
00060 EggMaterial *create_unique_material(const EggMaterial ©);
00061 EggGroup *find_joint(const string &joint_name);
00062 void strip_nodes(TypeHandle t);
00063
00064 public:
00065 bool _make_char;
00066 string _char_name;
00067 double _frame_rate;
00068 bool _keep_model;
00069 bool _keep_animation;
00070
00071 private:
00072 typedef XFileAnimationSet::FrameData FrameData;
00073
00074 bool get_toplevel();
00075 bool convert_toplevel_object(XFileDataNode *obj, EggGroupNode *egg_parent);
00076 bool convert_object(XFileDataNode *obj, EggGroupNode *egg_parent);
00077 bool convert_frame(XFileDataNode *obj, EggGroupNode *egg_parent);
00078 bool convert_transform(XFileDataNode *obj, EggGroupNode *egg_parent);
00079 bool convert_animation_set(XFileDataNode *obj);
00080 bool convert_animation_set_object(XFileDataNode *obj,
00081 XFileAnimationSet &animation_set);
00082 bool convert_animation(XFileDataNode *obj,
00083 XFileAnimationSet &animation_set);
00084 bool convert_animation_object(XFileDataNode *obj,
00085 const string &joint_name, FrameData &table);
00086 bool convert_animation_key(XFileDataNode *obj, const string &joint_name,
00087 FrameData &table);
00088 bool set_animation_frame(const string &joint_name, FrameData &table,
00089 int frame, int key_type,
00090 const XFileDataObject &values);
00091 bool convert_mesh(XFileDataNode *obj, EggGroupNode *egg_parent);
00092
00093 bool create_polygons();
00094 bool create_hierarchy();
00095
00096 PT(XFile) _x_file;
00097
00098 bool _any_frames;
00099 bool _any_animation;
00100 int _ticks_per_second;
00101 int _total_tick_deltas;
00102 int _num_ticks;
00103
00104 typedef pvector<XFileMesh *> Meshes;
00105 Meshes _meshes;
00106
00107 typedef pvector<XFileAnimationSet *> AnimationSets;
00108 AnimationSets _animation_sets;
00109
00110 typedef pmap<string, EggGroup *> Joints;
00111 Joints _joints;
00112
00113 EggGroup *_dart_node;
00114
00115 EggTextureCollection _textures;
00116 EggMaterialCollection _materials;
00117 };
00118
00119 #endif