diff options
Diffstat (limited to 'src/win95/hierchnk.hpp')
| -rw-r--r-- | src/win95/hierchnk.hpp | 203 |
1 files changed, 203 insertions, 0 deletions
diff --git a/src/win95/hierchnk.hpp b/src/win95/hierchnk.hpp new file mode 100644 index 0000000..3e2881b --- /dev/null +++ b/src/win95/hierchnk.hpp @@ -0,0 +1,203 @@ +#ifndef _hierchnk_hpp +#define _hierchnk_hpp 1 + +#include "chunk.hpp" +#include "list_tem.hpp" +#include "chnktype.hpp" + +class Object_Chunk; +class Object_Hierarchy_Data_Chunk; +class Object_Hierarchy_Name_Chunk; + +class Shape_Chunk; + +#ifdef MAXEXPORT + class INode; +#endif + + +class Object_Hierarchy_Chunk : public Chunk_With_Children +{ +public: + + Object_Hierarchy_Chunk(Chunk_With_Children * parent) + : Chunk_With_Children (parent, "OBJCHIER") + {} + // constructor from buffer + Object_Hierarchy_Chunk (Chunk_With_Children * const parent,const char *, size_t const); + + List <Object_Hierarchy_Chunk *> list_h_children(); + + Object_Hierarchy_Data_Chunk * get_data (); + Object_Hierarchy_Name_Chunk * get_name (); + + +#ifdef MAXEXPORT + INode* node; +#endif + + +}; + +class Object_Hierarchy_Data_Chunk : public Chunk +{ +public: + + Object_Hierarchy_Data_Chunk (Object_Hierarchy_Chunk * parent, const char * obname); + Object_Hierarchy_Data_Chunk (Chunk_With_Children * parent, const char * sdata, size_t /*ssize*/); + + ~Object_Hierarchy_Data_Chunk (); + + int num_extra_data; + int* extra_data; + + Object_Chunk * const object; + + virtual size_t size_chunk (); + + virtual void fill_data_block (char * data_start); + + virtual void post_input_processing(); + + void find_object_for_this_section(); //find the object_chunk from the name + + char * ob_name; + +private: + + friend class Object_Hierarchy_Chunk; + + +}; + + +// This chunk will normally go in the root as a way of identifiying the hierarchy +class Object_Hierarchy_Name_Chunk : public Chunk +{ +public: + + Object_Hierarchy_Name_Chunk (Object_Hierarchy_Chunk * parent, const char * hname); + Object_Hierarchy_Name_Chunk (Chunk_With_Children * parent, const char * sdata, size_t /*ssize*/); + ~Object_Hierarchy_Name_Chunk(); + + char * hierarchy_name; + + virtual size_t size_chunk () + { + return(chunk_size = 12 + strlen (hierarchy_name) + 4 - strlen (hierarchy_name)%4); + } + + virtual void fill_data_block (char * data_start); + +private: + + friend class Object_Hierarchy_Chunk; + + +}; + + +struct Replaced_Shape_Details +{ + ~Replaced_Shape_Details() + { + if(old_object_name) delete old_object_name; + if(new_object_name) delete new_object_name; + } + + //object name of shape to be replaced + char* old_object_name; + //object that replaces it. + char* new_object_name; +}; + + +#define Avp_ShapeSet_Flag_Female 0x00000001 + +#define List_Object_Hierarchy_Alternate_Shape_Set_Chunk(parent,list) (parent)->lookup_child("OBHALTSH",list) +class Object_Hierarchy_Alternate_Shape_Set_Chunk : public Chunk +{ +public : + Object_Hierarchy_Alternate_Shape_Set_Chunk(Chunk_With_Children* parent,int num,const char* name); + Object_Hierarchy_Alternate_Shape_Set_Chunk(Chunk_With_Children* parent,const char* name); + Object_Hierarchy_Alternate_Shape_Set_Chunk (Chunk_With_Children * parent, const char * data, size_t /*ssize*/); + ~Object_Hierarchy_Alternate_Shape_Set_Chunk(); + + virtual size_t size_chunk(); + + virtual void fill_data_block (char * data_start); + + char* Shape_Set_Name; + int Shape_Set_Num; + + List<Replaced_Shape_Details*> Replaced_Shape_List; + + int flags; + int spare[3]; + +private: + + +}; + + +#define AvP_HColl_Flag_NotRandom 0x00000001 + +#define List_Hierarchy_Shape_Set_Collection_Chunk(parent,list) (parent)->lookup_child("HSETCOLL",list) +//this chunk hold a list of indeces for shape_set_chunks that should be applied +class Hierarchy_Shape_Set_Collection_Chunk : public Chunk +{ +public : + Hierarchy_Shape_Set_Collection_Chunk(Chunk_With_Children* parent,int num,const char* name); + Hierarchy_Shape_Set_Collection_Chunk (Chunk_With_Children * parent, const char * data, size_t /*ssize*/); + ~Hierarchy_Shape_Set_Collection_Chunk(); + + virtual size_t size_chunk(); + + virtual void fill_data_block (char * data_start); + + char* Set_Collection_Name; + int Set_Collection_Num; + + List<int> Index_List; + + int TypeIndex; + int flags; +}; + +class Hierarchy_Degradation_Distance_Chunk : public Chunk +{ +public : + Hierarchy_Degradation_Distance_Chunk(Chunk_With_Children * parent, const char * data, size_t /*ssize*/); + Hierarchy_Degradation_Distance_Chunk(Chunk_With_Children* parent,int _num_detail_levels); + ~Hierarchy_Degradation_Distance_Chunk(); + + virtual size_t size_chunk(); + + virtual void fill_data_block (char * data_start); + + int num_detail_levels; + int* distance_array; + + +private: +}; + +class Hierarchy_Bounding_Box_Chunk :public Chunk +{ +public : + Hierarchy_Bounding_Box_Chunk(Chunk_With_Children * parent,const char*data,size_t datasize); + + Hierarchy_Bounding_Box_Chunk(Chunk_With_Children * parent) + :Chunk(parent,"HIERBBOX") + {} + + virtual void fill_data_block (char * data_start); + + virtual size_t size_chunk() + {return chunk_size=12+6*4;} + + ChunkVectorInt min; + ChunkVectorInt max; +}; +#endif
\ No newline at end of file |
