00001 #include "stdafx.h"
00002 #include "mapfile.h"
00003 #include <string.h>
00004
00005 MapFile::MapFile(FILESTRUCT* data)
00006 {
00007 if(data == NULL)
00008 {
00009 m_nStatus = BL_ERROR;
00010 return;
00011 }
00012
00013 m_nStatus = BL_OK;
00014
00015
00016 strncpy(m_FileHeader.name, data->fileheader.name, 12);
00017 m_FileHeader.size = data->fileheader.size;
00018
00019 uint32 nMemOffset = 0;
00020 memcpy(&m_Map.nVersion, &data->data[nMemOffset], 4);
00021 nMemOffset += (sizeof(char) * 4);
00022
00023 memcpy(&m_Map.StartPosition.x, &data->data[nMemOffset], 4);
00024 nMemOffset += (sizeof(char) * 4);
00025
00026 memcpy(&m_Map.StartPosition.y, &data->data[nMemOffset], 4);
00027 nMemOffset += (sizeof(char) * 4);
00028
00029 memcpy(&m_Map.StartPosition.z, &data->data[nMemOffset], 4);
00030 nMemOffset += (sizeof(char) * 4);
00031
00032 memcpy(&m_Map.nAngle , &data->data[nMemOffset], 2);
00033 nMemOffset += (sizeof(char) * 2);
00034
00035 memcpy(&m_Map.nStartPointSecNum , &data->data[nMemOffset], 2);
00036 nMemOffset += (sizeof(char) * 2);
00037
00038
00039 memcpy(&m_Map.nNumSectors , &data->data[nMemOffset], 2);
00040 nMemOffset += (sizeof(char) * 2);
00041
00042 memcpy(&m_Map.sectors[0] , &data->data[nMemOffset], m_Map.nNumSectors);
00043 nMemOffset += (sizeof(sectortype) * m_Map.nNumSectors);
00044
00045
00046 memcpy(&m_Map.nNumWalls , &data->data[nMemOffset], 2);
00047 nMemOffset += (sizeof(char) * 2);
00048
00049 memcpy(&m_Map.walls[0] , &data->data[nMemOffset], m_Map.nNumWalls);
00050 nMemOffset += (sizeof(walltype) * m_Map.nNumWalls);
00051
00052
00053 memcpy(&m_Map.nNumSprites , &data->data[nMemOffset], 2);
00054 nMemOffset += (sizeof(char) * 2);
00055
00056 memcpy(&m_Map.sprites[0] , &data->data[nMemOffset], m_Map.nNumSprites);
00057 nMemOffset += (sizeof(spritetype) * m_Map.nNumSprites);
00058
00059 }
00060
00061
00062 MapFile::MapFile(const char* sFilename)
00063 {
00064 m_nStatus = BL_OK;
00065
00066 FILE *fp = fopen(sFilename, "rb");
00067 if(fp != NULL)
00068 {
00069
00070 fread(&m_Map.nVersion, sizeof(char), 4, fp);
00071
00072 fread(&m_Map.StartPosition.x, sizeof(char), 4, fp);
00073 fread(&m_Map.StartPosition.y, sizeof(char), 4, fp);
00074 fread(&m_Map.StartPosition.z, sizeof(char), 4, fp);
00075
00076
00077 fread(&m_Map.nAngle, sizeof(char), 2, fp);
00078 fread(&m_Map.nStartPointSecNum, sizeof(char), 2, fp);
00079
00080
00081 fread(&m_Map.nNumSectors, sizeof(char), 2, fp);
00082 fread(&m_Map.sectors[0], sizeof(sectortype), m_Map.nNumSectors, fp);
00083
00084
00085 fread(&m_Map.nNumWalls, sizeof(char), 2, fp);
00086 fread(&m_Map.walls[0], sizeof(walltype), m_Map.nNumWalls, fp);
00087
00088
00089 fread(&m_Map.nNumSprites, sizeof(char), 2, fp);
00090 fread(&m_Map.sprites[0], sizeof(spritetype), m_Map.nNumSprites, fp);
00091
00092 fclose(fp);
00093 }
00094 else
00095 {
00096 m_nStatus = BL_ERROR;
00097 }
00098
00099
00100 }
00101
00102 MapFile::MapFile()
00103 {
00104 m_nStatus = BL_OK;
00105 }
00106
00107
00108 MapFile::~MapFile()
00109 {
00110 }