From 2186d5f3f95cd74a070a490d899291648d58667a Mon Sep 17 00:00:00 2001 From: Steven Fuller Date: Sun, 1 Jul 2001 00:55:22 +0000 Subject: Initial revision --- 3dc/win95/animobs.cpp | 593 -------------------------------------------------- 1 file changed, 593 deletions(-) delete mode 100644 3dc/win95/animobs.cpp (limited to '3dc/win95/animobs.cpp') diff --git a/3dc/win95/animobs.cpp b/3dc/win95/animobs.cpp deleted file mode 100644 index f85001f..0000000 --- a/3dc/win95/animobs.cpp +++ /dev/null @@ -1,593 +0,0 @@ -#include "hierchnk.hpp" -#include "Animobs.hpp" -#include "list_tem.hpp" -#include - -//macro for helping to force inclusion of chunks when using libraries -FORCE_CHUNK_INCLUDE_IMPLEMENT(animobs) - -RIF_IMPLEMENT_DYNCREATE("OBASEQFR",Object_Animation_Sequence_Frame_Chunk) - -void Object_Animation_Sequence_Frame_Chunk::fill_data_block (char *data_start) -{ - strncpy (data_start, identifier, 8); - - data_start += 8; - - *((int *) data_start) = chunk_size; - - data_start += 4; - - - *((float *) data_start) = orientation.x; - data_start += 4; - *((float *) data_start) = orientation.y; - data_start += 4; - *((float *) data_start) = orientation.z; - data_start += 4; - *((float *) data_start) = orientation.w; - data_start += 4; - - *((int *) data_start) = transform.x; - data_start += 4; - *((int *) data_start) = transform.y; - data_start += 4; - *((int *) data_start) = transform.z; - data_start += 4; - - *((int *) data_start) = at_frame_no; - data_start += 4; - - *((int *) data_start) = frame_ref_no; - data_start += 4; - - *((int *) data_start) = flags; - data_start += 4; - - *(int*) data_start=num_extra_data; - data_start+=4; - - for (int i=0; i=0 && ind<=127) - { - flags &=~HierarchyFrame_SoundIndexMask; - flags |= (ind<<24); - } -} - -RIF_IMPLEMENT_DYNCREATE("OBASEQHD",Object_Animation_Sequence_Header_Chunk) - -void Object_Animation_Sequence_Header_Chunk::fill_data_block (char *data_start) -{ - strncpy (data_start, identifier, 8); - - data_start += 8; - - *((int *) data_start) = chunk_size; - - data_start += 4; - - *((int *) data_start) = num_frames; - data_start += 4; - - *((int *) data_start) = sequence_number; - data_start += 4; - - *((int *) data_start) = sub_sequence_number; - data_start += 4; - - *(int*)data_start=num_extra_data; - data_start+=4; - - for (int i=0; i *pList) -{ - List cl; - lookup_child ("OBASEQFR",cl); - - for (LIF cli(&cl); !cli.done(); cli.next()) - { - pList->add_entry((Object_Animation_Sequence_Frame_Chunk *)cli()); - } - -} - -//////////////////////////////// - -RIF_IMPLEMENT_DYNCREATE("OBANSEQS",Object_Animation_Sequences_Chunk) - -void Object_Animation_Sequences_Chunk::list_sequences(List * pList) -{ - List cl; - lookup_child ("OBANSEQC",cl); - - for (LIF cli(&cl); !cli.done(); cli.next()) - { - pList->add_entry((Object_Animation_Sequence_Chunk *)cli()); - } -} - - -Object_Animation_Sequence_Chunk::Object_Animation_Sequence_Chunk(Object_Animation_Sequences_Chunk* parent,Object_Animation_Sequence_Chunk* template_seq,ChunkQuat & orient ,ChunkVectorInt & trans) -:Chunk_With_Children (parent, "OBANSEQC") -{ - Object_Animation_Sequence_Header_Chunk* template_header=template_seq->get_header(); - Object_Animation_Sequence_Header_Chunk* header=new Object_Animation_Sequence_Header_Chunk(this); - - header->num_frames=65536; - header->sequence_number=template_header->sequence_number; - header->sub_sequence_number=template_header->sub_sequence_number; - header->sequence_name=new char[strlen(template_header->sequence_name)+1]; - strcpy(header->sequence_name,template_header->sequence_name); - - Object_Animation_Sequence_Frame_Chunk* oasfc=new Object_Animation_Sequence_Frame_Chunk(this); - - oasfc->orientation=orient; - oasfc->transform=trans; - oasfc->at_frame_no=0; - oasfc->frame_ref_no=0; - - //see if template sequence is a delta sequence - List framelist; - template_seq->get_frames(&framelist); - while(framelist.size()) - { - if(framelist.first_entry()->flags & HierarchyFrameFlag_DeltaFrame) - { - oasfc->flags=HierarchyFrameFlag_DeltaFrame; - break; - } - framelist.delete_first_entry(); - } - - -} - -Object_Animation_Sequence_Chunk * Object_Animation_Sequences_Chunk::get_sequence (int num, int subnum) -{ - List seq_list; - list_sequences(&seq_list); - - for (LIF sli(&seq_list); !sli.done(); sli.next()) - { - Object_Animation_Sequence_Header_Chunk * oashc = sli()->get_header(); - if (oashc) - { - if (oashc->sequence_number == num && oashc->sub_sequence_number == subnum) - { - break; - } - } - } - - if (!sli.done()) - { - return(sli()); - } - else - { - return(0); - } -} - -int Object_Animation_Sequence_Chunk::get_sequence_time() -{ - Object_Animation_Sequence_Time_Chunk* time_chunk=(Object_Animation_Sequence_Time_Chunk*)lookup_single_child("OBASEQTM"); - if(time_chunk) - { - return time_chunk->sequence_time; - } - return 0; -} - -int Object_Animation_Sequence_Chunk::get_sequence_speed() -{ - Object_Animation_Sequence_Speed_Chunk* speed_chunk=(Object_Animation_Sequence_Speed_Chunk*)lookup_single_child("OBASEQSP"); - if(speed_chunk) - { - return speed_chunk->sequence_speed; - } - return 0; -} - -BOOL Object_Animation_Sequence_Chunk::get_sequence_vector(ChunkVectorFloat* direction) -{ - if(!direction) return FALSE; - - //default direction is forwards - direction->x=0; - direction->y=0; - direction->z=1; - - - Object_Animation_Sequence_Speed_Chunk* speed_chunk=(Object_Animation_Sequence_Speed_Chunk*)lookup_single_child("OBASEQSP"); - if(speed_chunk) - { - double radian_angle=(speed_chunk->angle/360.0)*2*3.1415278; - direction->x =(float) sin(radian_angle); - direction->z =(float) cos(radian_angle); - - return TRUE; - } - else - { - return FALSE; - } -} - -int Object_Animation_Sequence_Chunk::get_sequence_flags() -{ - Object_Animation_Sequence_Flags_Chunk* flag_chunk=(Object_Animation_Sequence_Flags_Chunk*)lookup_single_child("OBASEQFL"); - if(flag_chunk) - { - return flag_chunk->flags; - } - return 0; -} - -void Object_Animation_Sequence_Chunk::set_sequence_flags(int new_flags) -{ - //find existing flag_chunk , or create a new one - Object_Animation_Sequence_Flags_Chunk* flag_chunk=(Object_Animation_Sequence_Flags_Chunk*)lookup_single_child("OBASEQFL"); - if(flag_chunk) - { - //set the flags - flag_chunk->flags = new_flags; - } - else - { - //create a new chunk then - new Object_Animation_Sequence_Flags_Chunk(this,new_flags); - } -} - -Hierarchy_Bounding_Box_Chunk* Object_Animation_Sequence_Chunk::get_bounding_box() -{ - return (Hierarchy_Bounding_Box_Chunk*)lookup_single_child("HIERBBOX"); -} - -//////////////////////////////////////////////////////////////////////////////// - /*--------------------------------------** - ** Object_Animation_Sequence_Time_Chunk ** - **--------------------------------------*/ - -RIF_IMPLEMENT_DYNCREATE("OBASEQTM",Object_Animation_Sequence_Time_Chunk) - -Object_Animation_Sequence_Time_Chunk::Object_Animation_Sequence_Time_Chunk (Chunk_With_Children * parent,const char * data_start, size_t) -: Chunk (parent, "OBASEQTM") -{ - sequence_time=*(unsigned int*) data_start; -} - -void Object_Animation_Sequence_Time_Chunk::fill_data_block(char* data_start) -{ - strncpy (data_start, identifier, 8); - data_start += 8; - *((int *) data_start) = chunk_size; - data_start += 4; - - *(unsigned int*) data_start = sequence_time; -} - -//////////////////////////////////////////////////////////////////////////////// - /*---------------------------------------** - ** Object_Animation_Sequence_Speed_Chunk ** - **---------------------------------------*/ - -RIF_IMPLEMENT_DYNCREATE("OBASEQSP",Object_Animation_Sequence_Speed_Chunk) - -Object_Animation_Sequence_Speed_Chunk::Object_Animation_Sequence_Speed_Chunk (Chunk_With_Children * parent,const char * data, size_t) -: Chunk (parent, "OBASEQSP") -{ - CHUNK_EXTRACT(sequence_speed,int) - CHUNK_EXTRACT(angle,int) - CHUNK_EXTRACT(spare,int) -} - -void Object_Animation_Sequence_Speed_Chunk::fill_data_block(char* data) -{ - CHUNK_FILL_START - CHUNK_FILL(sequence_speed,int) - CHUNK_FILL(angle,int) - CHUNK_FILL(spare,int) -} - -//////////////////////////////////////////////////////////////////////////////// - /*---------------------------------------** - ** Object_Animation_Sequence_Flags_Chunk ** - **---------------------------------------*/ - - -RIF_IMPLEMENT_DYNCREATE("OBASEQFL",Object_Animation_Sequence_Flags_Chunk) - -Object_Animation_Sequence_Flags_Chunk::Object_Animation_Sequence_Flags_Chunk (Chunk_With_Children * parent,const char * data, size_t) -: Chunk (parent, "OBASEQFL") -{ - CHUNK_EXTRACT(flags,int) -} - -void Object_Animation_Sequence_Flags_Chunk::fill_data_block(char* data) -{ - CHUNK_FILL_START - CHUNK_FILL(flags,int) -} - -//////////////////////////////////////////////////////////////////////////////// - -RIF_IMPLEMENT_DYNCREATE("OBANALLS",Object_Animation_All_Sequence_Chunk) - -Object_Animation_All_Sequence_Chunk::Object_Animation_All_Sequence_Chunk(Chunk_With_Children* parent) -:Chunk(parent,"OBANALLS") -{ - num_sequences=0; - sequences=0; -} - -Object_Animation_All_Sequence_Chunk::Object_Animation_All_Sequence_Chunk(Chunk_With_Children * const parent,const char * data, const size_t) -:Chunk(parent,"OBANALLS") -{ - num_sequences=*(int*)data; - data+=4; - - if(num_sequences) sequences=new Object_Animation_Sequence[num_sequences]; - else sequences=0; - - for(int i=0;inum_frames=*(int*)data; - data+=4; - seq->sequence_number=*(int*)data; - data+=4; - seq->sub_sequence_number=*(int*)data; - data+=4; - seq->sequence_time=*(int*)data; - data+=4; - - if(seq->num_frames) seq->frames=new Object_Animation_Frame[seq->num_frames]; - else seq->frames=0; - - for(unsigned j=0;jnum_frames;j++) - { - seq->frames[j]=*(Object_Animation_Frame*)data; - data+=sizeof(Object_Animation_Frame); - } - } -} - -void Object_Animation_All_Sequence_Chunk::fill_data_block(char* data) -{ - strncpy (data, identifier, 8); - data += 8; - *((int *) data) = chunk_size; - data += 4; - - *(int*)data=num_sequences; - data+=4; - - for(int i=0;inum_frames; - data+=4; - *(int*)data=seq->sequence_number; - data+=4; - *(int*)data=seq->sub_sequence_number; - data+=4; - *(int*)data=seq->sequence_time; - data+=4; - - for(unsigned j=0;jnum_frames;j++) - { - *(Object_Animation_Frame*)data=seq->frames[j]; - data+=sizeof(Object_Animation_Frame); - } - - } -} - -size_t Object_Animation_All_Sequence_Chunk::size_chunk() -{ - chunk_size=12+4; - chunk_size+=num_sequences*16; - for(int i=0;i