ms3d strings are now read into std::string's instead of char arrays

This commit is contained in:
gered 2011-02-12 02:18:32 -05:00
parent 5fc89c88f7
commit 37863a726a
5 changed files with 50 additions and 12 deletions

View file

@ -80,6 +80,7 @@
<ClCompile Include="src\ms3d\ms3d.cpp" /> <ClCompile Include="src\ms3d\ms3d.cpp" />
<ClCompile Include="src\obj\obj.cpp" /> <ClCompile Include="src\obj\obj.cpp" />
<ClCompile Include="src\sm\sm.cpp" /> <ClCompile Include="src\sm\sm.cpp" />
<ClCompile Include="src\util\files.cpp" />
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<ClInclude Include="src\assets\material.h" /> <ClInclude Include="src\assets\material.h" />
@ -89,6 +90,7 @@
<ClInclude Include="src\ms3d\ms3d.h" /> <ClInclude Include="src\ms3d\ms3d.h" />
<ClInclude Include="src\obj\obj.h" /> <ClInclude Include="src\obj\obj.h" />
<ClInclude Include="src\sm\sm.h" /> <ClInclude Include="src\sm\sm.h" />
<ClInclude Include="src\util\files.h" />
</ItemGroup> </ItemGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" /> <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
<ImportGroup Label="ExtensionTargets"> <ImportGroup Label="ExtensionTargets">

View file

@ -2,6 +2,8 @@
#include <stdio.h> #include <stdio.h>
#include "../util/files.h"
Ms3d::Ms3d() Ms3d::Ms3d()
{ {
m_numVertices = 0; m_numVertices = 0;
@ -104,7 +106,7 @@ bool Ms3d::Load(const std::string &file)
Ms3dMesh *mesh = &m_meshes[i]; Ms3dMesh *mesh = &m_meshes[i];
fread(&mesh->editorFlags, 1, 1, fp); fread(&mesh->editorFlags, 1, 1, fp);
fread(&mesh->name, 32, 1, fp); ReadString(fp, mesh->name, 32);
fread(&mesh->numTriangles, 2, 1, fp); fread(&mesh->numTriangles, 2, 1, fp);
mesh->triangles = new unsigned short[mesh->numTriangles]; mesh->triangles = new unsigned short[mesh->numTriangles];
for (int j = 0; j < mesh->numTriangles; ++j) for (int j = 0; j < mesh->numTriangles; ++j)
@ -122,7 +124,7 @@ bool Ms3d::Load(const std::string &file)
{ {
Ms3dMaterial *material = &m_materials[i]; Ms3dMaterial *material = &m_materials[i];
fread(&material->name, 32, 1, fp); ReadString(fp, material->name, 32);
for (int j = 0; j < 4; ++j) for (int j = 0; j < 4; ++j)
fread(&material->ambient[j], 4, 1, fp); fread(&material->ambient[j], 4, 1, fp);
for (int j = 0; j < 4; ++j) for (int j = 0; j < 4; ++j)
@ -134,8 +136,8 @@ bool Ms3d::Load(const std::string &file)
fread(&material->shininess, 4, 1, fp); fread(&material->shininess, 4, 1, fp);
fread(&material->transparency, 4, 1, fp); fread(&material->transparency, 4, 1, fp);
fread(&material->mode, 1, 1, fp); fread(&material->mode, 1, 1, fp);
fread(&material->texture, 128, 1, fp); ReadString(fp, material->texture, 128);
fread(&material->alpha, 128, 1, fp); ReadString(fp, material->alpha, 128);
} }
} }
@ -153,8 +155,8 @@ bool Ms3d::Load(const std::string &file)
Ms3dJoint *joint = &m_joints[i]; Ms3dJoint *joint = &m_joints[i];
fread(&joint->editorFlags, 1, 1, fp); fread(&joint->editorFlags, 1, 1, fp);
fread(&joint->name, 32, 1, fp); ReadString(fp, joint->name, 32);
fread(&joint->parentName, 32, 1, fp); ReadString(fp, joint->parentName, 32);
fread(&joint->rotation.x, 4, 1, fp); fread(&joint->rotation.x, 4, 1, fp);
fread(&joint->rotation.y, 4, 1, fp); fread(&joint->rotation.y, 4, 1, fp);
fread(&joint->rotation.z, 4, 1, fp); fread(&joint->rotation.z, 4, 1, fp);

View file

@ -32,7 +32,7 @@ struct Ms3dTriangle
struct Ms3dMesh struct Ms3dMesh
{ {
unsigned char editorFlags; unsigned char editorFlags;
char name[32]; std::string name;
unsigned short numTriangles; unsigned short numTriangles;
unsigned short *triangles; unsigned short *triangles;
char materialIndex; char materialIndex;
@ -50,7 +50,7 @@ struct Ms3dMesh
struct Ms3dMaterial struct Ms3dMaterial
{ {
char name[32]; std::string name;
float ambient[4]; float ambient[4];
float diffuse[4]; float diffuse[4];
float specular[4]; float specular[4];
@ -58,8 +58,8 @@ struct Ms3dMaterial
float shininess; float shininess;
float transparency; float transparency;
char mode; char mode;
char texture[128]; std::string texture;
char alpha[128]; std::string alpha;
}; };
struct Ms3dKeyFrame struct Ms3dKeyFrame
@ -71,8 +71,8 @@ struct Ms3dKeyFrame
struct Ms3dJoint struct Ms3dJoint
{ {
unsigned char editorFlags; unsigned char editorFlags;
char name[32]; std::string name;
char parentName[32]; std::string parentName;
Vector3 rotation; Vector3 rotation;
Vector3 position; Vector3 position;
unsigned short numRotationFrames; unsigned short numRotationFrames;

View file

@ -0,0 +1,25 @@
#include "files.h"
void ReadString(FILE *fp, std::string &buffer, int fixedLength)
{
char c;
if (fixedLength > 0)
{
for (int i = 0; i < fixedLength; ++i)
{
fread(&c, 1, 1, fp);
if (c != '\0')
buffer += c;
}
}
else
{
do
{
fread(&c, 1, 1, fp);
if (c != '\0')
buffer += c;
} while (c != '\0');
}
}

View file

@ -0,0 +1,9 @@
#ifndef __UTIL_FILES_H_INCLUDED__
#define __UTIL_FILES_H_INCLUDED__
#include <stdio.h>
#include <string>
void ReadString(FILE *fp, std::string &buffer, int fixedLength = 0);
#endif