diff options
| author | relnev <relnev@5198baeb-e213-0410-be47-fc2ff85ca46f> | 2003-01-08 09:52:19 +0000 |
|---|---|---|
| committer | relnev <relnev@5198baeb-e213-0410-be47-fc2ff85ca46f> | 2003-01-08 09:52:19 +0000 |
| commit | 507a7479adb2cab5218bbb64950b739dcd79b6d5 (patch) | |
| tree | 6e45861e91df133f156fdf216167e588497784ac /Source | |
| parent | 8efed35df02822682576bae088f5b6a5c78e8dc9 (diff) | |
| download | blackshades-507a7479adb2cab5218bbb64950b739dcd79b6d5.tar.gz | |
completed FSRead serialization
git-svn-id: svn://svn.icculus.org/blackshades/trunk@45 5198baeb-e213-0410-be47-fc2ff85ca46f
Diffstat (limited to 'Source')
| -rw-r--r-- | Source/Files.h | 3 | ||||
| -rw-r--r-- | Source/Serialize.cpp | 23 | ||||
| -rw-r--r-- | Source/Serialize.h | 1 | ||||
| -rw-r--r-- | Source/Skeleton.cpp | 122 | ||||
| -rw-r--r-- | Source/Support.h | 1 |
5 files changed, 68 insertions, 82 deletions
diff --git a/Source/Files.h b/Source/Files.h index 726db04..67fde24 100644 --- a/Source/Files.h +++ b/Source/Files.h @@ -79,13 +79,12 @@ class Files #else int sFile; #endif - long lSize; #ifdef MAC short OpenFile(Str255 Name); #else int OpenFile(Str255 Name); - Files() : sFile(-1), lSize(0) { } + Files() : sFile(-1) { } #endif #ifdef MAC diff --git a/Source/Serialize.cpp b/Source/Serialize.cpp index 3826a3f..cc92897 100644 --- a/Source/Serialize.cpp +++ b/Source/Serialize.cpp @@ -6,12 +6,29 @@ /* these all read big-endian data */ +int ReadBool(int fd, int count, bool *b) +{ + while (count--) { + unsigned char buf[1]; + + if (read(fd, buf, 1) != 1) { + STUB_FUNCTION; + } + + *b = (buf[0] != 0) ? true : false; + + b++; + } +} + int ReadShort(int fd, int count, short *s) { while (count--) { unsigned char buf[2]; - read(fd, buf, 2); + if (read(fd, buf, 2) != 2) { + STUB_FUNCTION; + } *s = (short)((buf[0] << 8) | buf[1]); @@ -24,7 +41,9 @@ int ReadInt(int fd, int count, int *s) while (count--) { unsigned char buf[4]; - read(fd, buf, 2); + if (read(fd, buf, 4) != 4) { + STUB_FUNCTION; + } *s = (int)((buf[0] << 24) | (buf[1] << 16) | (buf[2] << 8) | buf[3]); diff --git a/Source/Serialize.h b/Source/Serialize.h index b50aad3..4ecb46d 100644 --- a/Source/Serialize.h +++ b/Source/Serialize.h @@ -3,6 +3,7 @@ /* these all read big-endian data */ +int ReadBool(int fd, int count, bool *b); int ReadShort(int fd, int count, short *s); int ReadInt(int fd, int count, int *s); int ReadFloat(int fd, int count, float *f); diff --git a/Source/Skeleton.cpp b/Source/Skeleton.cpp index 041d07a..f962c8d 100644 --- a/Source/Skeleton.cpp +++ b/Source/Skeleton.cpp @@ -1,6 +1,8 @@ /**> HEADER FILES <**/ #include "Skeleton.h" +#include "Serialize.h" + extern double multiplier; extern unsigned int gSourceID[100]; extern unsigned int gSampleSet[100]; @@ -461,33 +463,27 @@ void Animation::Load(char *fileName) float placeholder[3]; files.OpenFile((unsigned char*)fileName); if(files.sFile){ - files.lSize=sizeof(numframes); - FSRead( files.sFile, &files.lSize, &numframes); + ReadInt(files.sFile, 1, &numframes); for(int i=0;i<numframes;i++){ - files.lSize=sizeof(XYZ); for(int j=0;j<max_joints;j++){ - FSRead( files.sFile, &files.lSize, &position[j][i]); + ReadXYZ(files.sFile, 1, &position[j][i]); } - files.lSize=sizeof(float); for(int j=0;j<max_joints;j++){ - FSRead( files.sFile, &files.lSize, &twist[j][i]); + ReadFloat(files.sFile, 1, &twist[j][i]); } - files.lSize=sizeof(bool); for(int j=0;j<max_joints;j++){ - FSRead( files.sFile, &files.lSize, &onground[j][i]); + ReadBool(files.sFile, 1, &onground[j][i]); } - files.lSize=sizeof(float); - FSRead( files.sFile, &files.lSize, &speed[i]); - files.lSize=sizeof(float); - FSRead( files.sFile, &files.lSize, &gunrotation[i]); + ReadFloat(files.sFile, 1, &speed[i]); + ReadFloat(files.sFile, 1, &gunrotation[i]); } for(int i=0;i<numframes;i++){ - files.lSize=sizeof(float); for(int j=0;j<max_joints;j++){ - FSRead( files.sFile, &files.lSize, &twist2[j][i]); + ReadFloat(files.sFile, 1, &twist2[j][i]); } } } + files.EndLoad(); for(int j=0;j<numframes;j++){ @@ -611,31 +607,24 @@ void Animation::Load(char *fileName, float rotate) float placeholder[3]; files.OpenFile((unsigned char*)fileName); if(files.sFile){ - files.lSize=sizeof(numframes); - FSRead( files.sFile, &files.lSize, &numframes); + ReadInt(files.sFile, 1, &numframes); for(int i=0;i<numframes;i++){ - files.lSize=sizeof(XYZ); for(int j=0;j<max_joints;j++){ - FSRead( files.sFile, &files.lSize, &position[j][i]); + ReadXYZ(files.sFile, 1, &position[j][i]); position[j][i]=DoRotation(position[j][i],0,rotate,0); } - files.lSize=sizeof(float); for(int j=0;j<max_joints;j++){ - FSRead( files.sFile, &files.lSize, &twist[j][i]); + ReadFloat(files.sFile, 1, &twist[j][i]); } - files.lSize=sizeof(bool); for(int j=0;j<max_joints;j++){ - FSRead( files.sFile, &files.lSize, &onground[j][i]); + ReadBool(files.sFile, 1, &onground[j][i]); } - files.lSize=sizeof(float); - FSRead( files.sFile, &files.lSize, &speed[i]); - files.lSize=sizeof(float); - FSRead( files.sFile, &files.lSize, &gunrotation[i]); + ReadFloat(files.sFile, 1, &speed[i]); + ReadFloat(files.sFile, 1, &gunrotation[i]); } for(int i=0;i<numframes;i++){ - files.lSize=sizeof(float); for(int j=0;j<max_joints;j++){ - FSRead( files.sFile, &files.lSize, &twist2[j][i]); + ReadFloat(files.sFile, 1, &twist2[j][i]); } } } @@ -760,72 +749,51 @@ void Animation::Load(char *fileName, float rotate) void Skeleton::Load(char *fileName) { int parentID; - int what; + bool what; bool lock; float placeholder[3]; files.OpenFile((unsigned char*)fileName); if(files.sFile){ - files.lSize=sizeof(num_joints); - FSRead( files.sFile, &files.lSize, &num_joints); + ReadInt(files.sFile, 1, &num_joints); for(int i=0;i<num_joints;i++){ - files.lSize=sizeof(XYZ); - FSRead( files.sFile, &files.lSize, &joints[i].position); - files.lSize=sizeof(float); - FSRead( files.sFile, &files.lSize, &joints[i].length); - files.lSize=sizeof(float); - FSRead( files.sFile, &files.lSize, &joints[i].mass); - files.lSize=sizeof(bool); - FSRead( files.sFile, &files.lSize, &joints[i].hasparent); - files.lSize=sizeof(bool); - FSRead( files.sFile, &files.lSize, &joints[i].locked); - files.lSize=sizeof(int); - FSRead( files.sFile, &files.lSize, &joints[i].modelnum); - files.lSize=sizeof(bool); - FSRead( files.sFile, &files.lSize, &joints[i].visible); - files.lSize=sizeof(bool); - FSRead( files.sFile, &files.lSize, &what); - files.lSize=sizeof(int); - FSRead( files.sFile, &files.lSize, &joints[i].label); - files.lSize=sizeof(int); - FSRead( files.sFile, &files.lSize, &joints[i].hasgun); - files.lSize=sizeof(bool); - FSRead( files.sFile, &files.lSize, &joints[i].lower); - files.lSize=sizeof(int); - FSRead( files.sFile, &files.lSize, &parentID); + ReadXYZ(files.sFile, 1, &joints[i].position); + ReadFloat(files.sFile, 1, &joints[i].length); + ReadFloat(files.sFile, 1, &joints[i].mass); + ReadBool(files.sFile, 1, &joints[i].hasparent); + ReadBool(files.sFile, 1, &joints[i].locked); + ReadInt(files.sFile, 1, &joints[i].modelnum); + ReadBool(files.sFile, 1, &joints[i].visible); + ReadBool(files.sFile, 1, &what); + ReadInt(files.sFile, 1, &joints[i].label); + ReadInt(files.sFile, 1, &joints[i].hasgun); + ReadBool(files.sFile, 1, &joints[i].lower); + ReadInt(files.sFile, 1, &parentID); if(joints[i].hasparent)joints[i].parent=&joints[parentID]; joints[i].velocity=0; joints[i].oldposition=joints[i].position; joints[i].existing=1; } - files.lSize=sizeof(num_muscles); - FSRead( files.sFile, &files.lSize, &num_muscles); + + ReadInt(files.sFile, 1, &num_muscles); for(int i=0;i<num_muscles;i++){ - files.lSize=sizeof(float); - FSRead( files.sFile, &files.lSize, &muscles[i].length); - files.lSize=sizeof(float); - FSRead( files.sFile, &files.lSize, &muscles[i].targetlength); - files.lSize=sizeof(float); - FSRead( files.sFile, &files.lSize, &muscles[i].minlength); - files.lSize=sizeof(float); - FSRead( files.sFile, &files.lSize, &muscles[i].maxlength); - files.lSize=sizeof(float); - FSRead( files.sFile, &files.lSize, &muscles[i].strength); - files.lSize=sizeof(int); - FSRead( files.sFile, &files.lSize, &muscles[i].type); - files.lSize=sizeof(bool); - FSRead( files.sFile, &files.lSize, &muscles[i].visible); - files.lSize=sizeof(int); - FSRead( files.sFile, &files.lSize, &parentID); + ReadFloat(files.sFile, 1, &muscles[i].length); + ReadFloat(files.sFile, 1, &muscles[i].targetlength); + ReadFloat(files.sFile, 1, &muscles[i].minlength); + ReadFloat(files.sFile, 1, &muscles[i].maxlength); + ReadFloat(files.sFile, 1, &muscles[i].strength); + ReadInt(files.sFile, 1, &muscles[i].type); + ReadBool(files.sFile, 1, &muscles[i].visible); + ReadInt(files.sFile, 1, &parentID); muscles[i].parent1=&joints[parentID]; - FSRead( files.sFile, &files.lSize, &parentID); + ReadInt(files.sFile, 1, &parentID); muscles[i].parent2=&joints[parentID]; } - files.lSize=sizeof(int); + for(int j=0;j<3;j++){ - FSRead( files.sFile, &files.lSize, &forwardjoints[j]); + ReadInt(files.sFile, 1, &forwardjoints[j]); } for(int j=0;j<3;j++){ - FSRead( files.sFile, &files.lSize, &lowforwardjoints[j]); + ReadInt(files.sFile, 1, &lowforwardjoints[j]); } } files.EndLoad(); diff --git a/Source/Support.h b/Source/Support.h index 9a79101..14d0e70 100644 --- a/Source/Support.h +++ b/Source/Support.h @@ -34,7 +34,6 @@ typedef struct Point #define Random rand #define SetFPos(fildes, whence, offset) lseek(fildes, offset, whence) #define FSClose(fildes) close(fildes) -#define FSRead(fildes, count, buf) read(fildes, buf, *count) void Microseconds(UnsignedWide *microTickCount); void GetMouse(Point *p); |
