From f1cd73425c37067b48471b98011fb04b602fadd6 Mon Sep 17 00:00:00 2001 From: Pontus Fransson Date: Wed, 19 Feb 2014 11:38:36 +0100 Subject: [PATCH] Removed old LevelLoader, it's now in a seperate project. --- .../GameLogic/LevelLoader/LevelLoader.cpp | 52 --- Code/Game/GameLogic/LevelLoader/LevelLoader.h | 56 --- .../GameLogic/LevelLoader/LevelParser.cpp | 320 ------------------ Code/Game/GameLogic/LevelLoader/LevelParser.h | 31 -- Code/Game/GameLogic/LevelLoader/Loader.cpp | 22 -- Code/Game/GameLogic/LevelLoader/Loader.h | 28 -- .../GameLogic/LevelLoader/ObjectDefines.h | 290 ---------------- .../GameLogic/LevelLoader/ParseFunctions.cpp | 195 ----------- Code/Game/LevelLoader/LevelLoader.cpp | 2 +- 9 files changed, 1 insertion(+), 995 deletions(-) delete mode 100644 Code/Game/GameLogic/LevelLoader/LevelLoader.cpp delete mode 100644 Code/Game/GameLogic/LevelLoader/LevelLoader.h delete mode 100644 Code/Game/GameLogic/LevelLoader/LevelParser.cpp delete mode 100644 Code/Game/GameLogic/LevelLoader/LevelParser.h delete mode 100644 Code/Game/GameLogic/LevelLoader/Loader.cpp delete mode 100644 Code/Game/GameLogic/LevelLoader/Loader.h delete mode 100644 Code/Game/GameLogic/LevelLoader/ObjectDefines.h delete mode 100644 Code/Game/GameLogic/LevelLoader/ParseFunctions.cpp diff --git a/Code/Game/GameLogic/LevelLoader/LevelLoader.cpp b/Code/Game/GameLogic/LevelLoader/LevelLoader.cpp deleted file mode 100644 index 205da712..00000000 --- a/Code/Game/GameLogic/LevelLoader/LevelLoader.cpp +++ /dev/null @@ -1,52 +0,0 @@ -////////////////////////////////// -// Created by Sam Svensson 2013 // -////////////////////////////////// - -#include "LevelLoader.h" -#include "LevelParser.h" - -using namespace GameLogic; -using namespace GameLogic::LevelFileLoader; - -struct LevelLoader::PrivData -{ - LevelParser parser; - std::wstring folderPath; -}; - -LevelLoader::LevelLoader() - : pData(new PrivData) -{ - //standard path - pData->folderPath = L""; -} - -LevelLoader::LevelLoader(std::wstring folderPath) - : pData(new PrivData) -{ - pData->folderPath = folderPath; -} - -LevelLoader::~LevelLoader() -{ -} - -std::vector> LevelLoader::LoadLevel(std::wstring fileName) -{ - return pData->parser.Parse(pData->folderPath + fileName); -} - -LevelMetaData LevelLoader::LoadLevelHeader(std::wstring fileName) -{ - return pData->parser.ParseHeader(pData->folderPath + fileName); -} - -std::wstring LevelLoader::GetFolderPath() -{ - return this->pData->folderPath; -} - -void LevelLoader::SetFolderPath(std::wstring folderPath) -{ - this->pData->folderPath = folderPath; -} \ No newline at end of file diff --git a/Code/Game/GameLogic/LevelLoader/LevelLoader.h b/Code/Game/GameLogic/LevelLoader/LevelLoader.h deleted file mode 100644 index c14e2c4c..00000000 --- a/Code/Game/GameLogic/LevelLoader/LevelLoader.h +++ /dev/null @@ -1,56 +0,0 @@ -////////////////////////////////// -// Created by Sam Svensson 2013 // -////////////////////////////////// - -#ifndef LEVELLOADER_H -#define LEVELLOADER_H - -#include -#include -#include "Utilities.h" -#include "ObjectDefines.h" - -namespace GameLogic -{ - class LevelLoader - { - - public: - LevelLoader(); - /*********************************************************** - * Lets you set the standard folderpath for the levels - ********************************************************/ - LevelLoader(std::wstring folderPath); - ~LevelLoader(); - - /******************************************************** - * Loads the level and objects from file. - * @param fileName: Path/name to the level-file that you want to load. - * @return: Returns all structs with objects and information about the level. - ********************************************************/ - std::vector> LoadLevel(std::wstring fileName); - - /******************************************************** - * Just for fast access for the meta information about the level. - * @param fileName: Path to the level-file that you want to load. - * @return: Returns the meta information about the level. - ********************************************************/ - LevelMetaData LoadLevelHeader(std::wstring fileName); //. - - /*********************************************************** - * @return: Returns the current standard folder path - ********************************************************/ - std::wstring GetFolderPath(); - - /*********************************************************** - * Sets the standard folder path - ********************************************************/ - void SetFolderPath(std::wstring folderPath); - - private: - struct PrivData; - Utility::DynamicMemory::SmartPointer pData; - }; -} - -#endif \ No newline at end of file diff --git a/Code/Game/GameLogic/LevelLoader/LevelParser.cpp b/Code/Game/GameLogic/LevelLoader/LevelParser.cpp deleted file mode 100644 index 2d23f069..00000000 --- a/Code/Game/GameLogic/LevelLoader/LevelParser.cpp +++ /dev/null @@ -1,320 +0,0 @@ -///////////////////////////////////// -// Created by Pontus Fransson 2013 // -///////////////////////////////////// - -#include "LevelParser.h" -#include "Loader.h" -#include "ParseFunctions.h" - -using namespace GameLogic; -using namespace ::LevelFileLoader; -using namespace Utility::DynamicMemory; - -LevelParser::LevelParser() -{ - formatVersion.formatVersionMajor = 3; - formatVersion.formatVersionMinor = 0; -} - -LevelParser::~LevelParser() -{ -} - -std::vector> LevelParser::Parse(std::wstring filename) -{ - int bufferSize = 0; - int counter = 0; - bool loadCgf; - - std::vector> objects; - - //Read entire level file. - Loader loader; - char* buffer = (char*)loader.LoadFile(filename.c_str(), bufferSize); - - // Check if file was loaded, else return empty vector - if(!buffer) - { - return std::vector>(); - } - - //Read format version - LevelLoaderInternal::FormatVersion levelFormatVersion; - ParseObject(&buffer[counter], &levelFormatVersion, sizeof(levelFormatVersion)); - counter += sizeof(levelFormatVersion); - if(this->formatVersion != levelFormatVersion) - { - //Returns an empty vector, because it will most likely fail to read the level format. - return objects; - } - - while(counter < bufferSize) - { - loadCgf = true; - //Get typeID - ObjectType typeID; - ParseObject(&buffer[counter], &typeID, sizeof(typeID)); - switch((int)typeID) - { - case ObjectType_LevelMetaData: - { - SmartPointer header = new LevelMetaData; - ParseLevelMetaData(&buffer[counter], *(LevelMetaData*)header.Get(), counter); - objects.push_back(header); - break; - } - - case ObjectType_SpawnPoint: - { - loadCgf = false; - ObjectHeader* header = new ObjectHeader; - ParseObject(&buffer[counter], *header, counter, loadCgf); - - SpawnPointAttributes* spawn = new SpawnPointAttributes; - - spawn->typeID = header->typeID; - - for(int i = 0; i < 3; i++) - { - spawn->position[i] = header->position[i]; - } - - delete header; - //objects.push_back(header); - objects.push_back(spawn); - break; - } - - //This is by design, static and dynamic is using the same converter. Do not add anything inbetween them. - //Unless they are changed to not be the same. - case ObjectType_Static: case ObjectType_Dynamic: - { - //Get specialType. - ObjectSpecialType specialType; - ParseObject(&buffer[counter+4], &specialType, sizeof(typeID)); - - switch(specialType) - { - //there is no difference when parsing these specialTypes. - case ObjectSpecialType_CrystalShard: - case ObjectSpecialType_CrystalFormation: - case ObjectSpecialType_Spike: - case ObjectSpecialType_SpikeBox: - case ObjectSpecialType_RedExplosiveBox: - case ObjectSpecialType_StandardBox: - case ObjectSpecialType_Stone: - case ObjectSpecialType_Building: - { - ObjectHeader* header = new ObjectHeader; - ParseObject(&buffer[counter], *header, counter, loadCgf); - objects.push_back(header); - - break; - } - - case ObjectSpecialType_JumpPad: - { - JumpPadAttributes* header = new JumpPadAttributes; - ParseObject(&buffer[counter], *header, counter, loadCgf); - - //Read the spec - ParseObject(&buffer[counter], header->direction, 16); - counter += 16; - objects.push_back(header); - - break; - } - - case ObjectSpecialType_Portal: - { - PortalAttributes* header = new PortalAttributes; - ParseObject(&buffer[counter], *header, counter, loadCgf); - - ParseObject(&buffer[counter], header->destination, 12); - counter += 12; - objects.push_back(header); - - break; - } - - case ObjectSpecialType_World: - { - WorldAttributes* header = new WorldAttributes; - ParseObject(&buffer[counter], *header, counter, loadCgf); - - ParseObject(&buffer[counter], &header->worldSize, 8); - counter += 8; - objects.push_back(header); - break; - } - - case ObjectSpecialType_Sky: - { - loadCgf = false; - SkyAttributes* header = new SkyAttributes; - ParseObject(&buffer[counter], *header, counter, loadCgf); - - ParseObject(&buffer[counter], &header->skySize, 4); - counter += 4; - objects.push_back(header); - break; - } - - default: - //Couldn't find specialType - break; - } - break; - } - - case ObjectType_Light: - { - LightType lightType; - - //Get Light type - ParseObject(&buffer[counter+4], &lightType, sizeof(lightType)); - - //We only support PointLight for now. - BasicLight* header = new BasicLight; - ParseObject(&buffer[counter], header, sizeof(*header)); - counter += sizeof(*header); - objects.push_back(header); - /*switch(lightType) - { - case LightType_PointLight: - { - PointLight* header = new PointLight; - ParseObject(&buffer[counter], header, sizeof(*header)); - counter += sizeof(*header); - objects.push_back(header); - break; - } - case LightType_DirectionalLight: - { - DirectionalLight* header = new DirectionalLight; - ParseObject(&buffer[counter], header, sizeof(*header)); - counter += sizeof(*header); - objects.push_back(header); - break; - } - case LightType_SpotLight: - { - SpotLight* header = new SpotLight; - ParseObject(&buffer[counter], header, sizeof(*header)); - counter += sizeof(*header); - objects.push_back(header); - break; - } - default: - //Undefined LightType. - break; - } - break;*/ - } - default: - //Couldn't find typeID. FAIL!!!!!! - break; - } - } - - return objects; -} - -//för meta information om leveln. -LevelMetaData LevelParser::ParseHeader(std::wstring filename) -{ - int bufferSize = 0; - int counter = 0; - - LevelMetaData levelHeader; - levelHeader.typeID = ObjectType::ObjectType_Unknown; - - //Read entire level file. - Loader loader; - char* buffer = (char*)loader.LoadFile(filename.c_str(), bufferSize); - - //Read format version - LevelLoaderInternal::FormatVersion levelFormatVersion; - ParseObject(&buffer[counter], &levelFormatVersion, sizeof(formatVersion)); - counter += sizeof(levelFormatVersion); - if(this->formatVersion != levelFormatVersion) - { - //Do something if it's not the same version - - //Returns an empty levelHeader with ObjectType_Unknown. - //Because it will not be able to read another version of the level format. - return levelHeader; - } - - //Find the header in the returned string. - while(counter < bufferSize) - { - ObjectType typeID; - ParseObject(&buffer[counter], &typeID, sizeof(typeID)); - - switch(typeID) - { - case ObjectType_LevelMetaData: - ParseLevelMetaData(&buffer[counter], levelHeader, counter); - return levelHeader; - break; - - //This is by design, static and dynamic is using the same converter. Do not add anything inbetween them. - case ObjectType_Static: case ObjectType_Dynamic: - { - ObjectHeader header; - ParseObject(&buffer[counter], &header, counter); - - switch(header.specialTypeID) - { - case ObjectSpecialType_JumpPad: - counter += sizeof(16); - break; - case ObjectSpecialType_Portal: - counter += sizeof(12); - break; - default: - break; - } - break; - } - - case ObjectType_Light: - { - LightType lightType; - ParseObject(&buffer[counter+4], &lightType, sizeof(lightType)); - - //We only support pointlight for now. - counter += sizeof(BasicLight); - /* - switch(lightType) - { - case LightType_PointLight: - { - counter += sizeof(PointLight); - break; - } - case LightType_DirectionalLight: - { - counter += sizeof(DirectionalLight); - break; - } - case LightType_SpotLight: - { - counter += sizeof(SpotLight); - break; - } - default: - //Undefined LightType. - break; - }*/ - } - - default: - //Couldn't find typeID. FAIL!!!!!! - break; - } - } - - return levelHeader; -} \ No newline at end of file diff --git a/Code/Game/GameLogic/LevelLoader/LevelParser.h b/Code/Game/GameLogic/LevelLoader/LevelParser.h deleted file mode 100644 index d0cb1f03..00000000 --- a/Code/Game/GameLogic/LevelLoader/LevelParser.h +++ /dev/null @@ -1,31 +0,0 @@ -#ifndef LEVEL_PARSER_H -#define LEVEL_PARSER_H - -#include -#include -#include "ObjectDefines.h" -#include "Utilities.h" - -namespace GameLogic -{ - namespace LevelFileLoader - { - class LevelParser - { - public: - LevelParser(); - ~LevelParser(); - - // - std::vector> Parse(std::wstring filename); - - // - LevelMetaData ParseHeader(std::wstring filename); - - private: - LevelLoaderInternal::FormatVersion formatVersion; - - }; - } -} -#endif \ No newline at end of file diff --git a/Code/Game/GameLogic/LevelLoader/Loader.cpp b/Code/Game/GameLogic/LevelLoader/Loader.cpp deleted file mode 100644 index 19ffa0f1..00000000 --- a/Code/Game/GameLogic/LevelLoader/Loader.cpp +++ /dev/null @@ -1,22 +0,0 @@ -////////////////////////////////// -// Created by Sam Svensson 2013 // -////////////////////////////////// - -#include "Loader.h" -#include - -using namespace GameLogic::LevelFileLoader; -using namespace Oyster::Resource; -using namespace std; - -char* Loader::LoadFile(std::wstring fileName, int &size) -{ - //convert from string to wstring - //std::wstring temp(fileName.begin(), fileName.end()); - - //convert from wstring to wchar then loads the file - char* buffer = (char*)OysterResource::LoadResource(fileName.c_str(), Oyster::Resource::ResourceType::ResourceType_Byte_Raw, -1 , false); - - size = OysterResource::GetResourceSize(buffer); - return buffer; -} \ No newline at end of file diff --git a/Code/Game/GameLogic/LevelLoader/Loader.h b/Code/Game/GameLogic/LevelLoader/Loader.h deleted file mode 100644 index 6deb8900..00000000 --- a/Code/Game/GameLogic/LevelLoader/Loader.h +++ /dev/null @@ -1,28 +0,0 @@ -////////////////////////////////// -// Created by Sam Svensson 2013 // -////////////////////////////////// - -#ifndef LOADER_H -#define LOADER_H - -#include "Resource\OysterResource.h" -#include - -namespace GameLogic -{ - namespace LevelFileLoader - { - class Loader - { - public: - Loader (){}; - ~Loader(){}; - char* LoadFile(std::wstring fileName, int &size); - - //TODO: - //Add functionality to load physicsObjects (hitboxes) - }; - } -} - -#endif; \ No newline at end of file diff --git a/Code/Game/GameLogic/LevelLoader/ObjectDefines.h b/Code/Game/GameLogic/LevelLoader/ObjectDefines.h deleted file mode 100644 index 131b2938..00000000 --- a/Code/Game/GameLogic/LevelLoader/ObjectDefines.h +++ /dev/null @@ -1,290 +0,0 @@ -#ifndef OBJECT_DEFINES_H -#define OBJECT_DEFINES_H - -#include -#include - -namespace GameLogic -{ - /************************************ - Enums - *************************************/ - - enum ObjectType - { - ObjectType_LevelMetaData, - ObjectType_Static, - ObjectType_Dynamic, - ObjectType_Light, - ObjectType_SpawnPoint, - //Etc - - ObjectType_NUM_OF_TYPES, - - ObjectType_Unknown = -1 - }; - - enum ObjectSpecialType - { - ObjectSpecialType_None, - ObjectSpecialType_Sky, - ObjectSpecialType_World, //Always the main celestial body - ObjectSpecialType_Building, - ObjectSpecialType_Stone, - ObjectSpecialType_StandardBox, - ObjectSpecialType_RedExplosiveBox, - ObjectSpecialType_SpikeBox, - ObjectSpecialType_Spike, - ObjectSpecialType_CrystalFormation, - ObjectSpecialType_CrystalShard, - ObjectSpecialType_JumpPad, - ObjectSpecialType_Portal, - ObjectSpecialType_Player, - ObjectSpecialType_Generic, - - - ObjectSpecialType_Count, - ObjectSpecialType_Unknown = -1 - }; - - enum CollisionGeometryType - { - CollisionGeometryType_Box, - CollisionGeometryType_Sphere, - CollisionGeometryType_Cylinder, - CollisionGeometryType_TriangleMesh, - - CollisionGeometryType_Count, - CollisionGeometryType_Unknown = -1 - }; - - //Only supports Pointlight right now. - enum LightType - { - LightType_PointLight, - //LightType_DirectionalLight, - //LightType_SpotLight, - - LightType_Count, - LightType_Unknown = -1 - }; - - //Should this be moved somewhere else? - enum GameMode - { - GameMode_FreeForAll, - GameMode_TeamDeathMatch, - //Etc - - GameMode_Count, - GameMode_Unknown = -1 - }; - - enum WorldSize - { - WorldSize_Tiny, - WorldSize_Small, - WorldSize_Medium, - WorldSize_Big, - WorldSize_Humongous, - - WorldSize_Count, - WorldSize_Unknown = -1 - }; - - - /************************************ - Structs - *************************************/ - namespace LevelLoaderInternal - { - struct FormatVersion - { - unsigned int formatVersionMajor; - unsigned int formatVersionMinor; - - FormatVersion() - : formatVersionMajor(0), formatVersionMinor(0) - {} - - FormatVersion(unsigned int major, unsigned int minor) - : formatVersionMajor(major), formatVersionMinor(minor) - {} - - bool operator ==(const FormatVersion& obj) - { - return (this->formatVersionMajor == obj.formatVersionMajor && this->formatVersionMinor == obj.formatVersionMinor); - } - - bool operator !=(const FormatVersion& obj) - { - return !(*this == obj); - } - }; - } - - struct ObjectTypeHeader - { - ObjectType typeID; - - //Unless this is here the object destructor wont be called. - virtual ~ObjectTypeHeader(){} - }; - - namespace LevelLoaderInternal - { - const FormatVersion boundingVolumeVersion(2, 0); - - struct BoundingVolumeBase - { - CollisionGeometryType geoType; - float position[3]; - float rotation[4]; - float frictionCoeffStatic; - float frictionCoeffDynamic; - float restitutionCoeff; - float mass; - }; - - struct BoundingVolumeBox : public BoundingVolumeBase - { - float size[3]; - }; - - struct BoundingVolumeSphere : public BoundingVolumeBase - { - float radius; - }; - - struct BoundingVolumeCylinder : public BoundingVolumeBase - { - float length; - float radius; - }; - - struct BoundingVolumeTriangleMesh : public BoundingVolumeBase - { - //Null terminated - wchar_t* filename; - }; - - struct BoundingVolume - { - CollisionGeometryType geoType; - union - { - LevelLoaderInternal::BoundingVolumeBox box; - LevelLoaderInternal::BoundingVolumeSphere sphere; - LevelLoaderInternal::BoundingVolumeCylinder cylinder; - LevelLoaderInternal::BoundingVolumeTriangleMesh triangleMesh; - }; - - virtual ~BoundingVolume() - { - if(geoType == CollisionGeometryType_TriangleMesh) - { - delete[] triangleMesh.filename; - } - } - }; - - } - - struct LevelMetaData : public ObjectTypeHeader - { - std::string levelName; - unsigned int levelVersion; - std::string levelDescription; - std::string levelAuthor; - unsigned int maxNumberOfPlayer; - WorldSize worldSize; - std::string overviewPicturePath; - std::vector gameModesSupported; - - virtual ~LevelMetaData(){} - - }; - - struct ObjectHeader : public ObjectTypeHeader - { - //Special type id for special objects: portal, jumppad, exploding objects, etc. - ObjectSpecialType specialTypeID; - //Model, - std::string ModelFile; - //Position - float position[3]; - //Rotation Quaternion - float rotation[4]; - //Scale - float scale[3]; - - ::GameLogic::LevelLoaderInternal::BoundingVolume boundingVolume; - - virtual ~ObjectHeader(){} - }; - - struct SpawnPointAttributes : public ObjectTypeHeader - { - ObjectSpecialType specialTypeID; - float position[3]; - }; - /************************************ - Special objects - *************************************/ - - struct JumpPadAttributes : public ObjectHeader - { - float direction[3]; - float power; - }; - - struct PortalAttributes : public ObjectHeader - { - float destination[3]; - }; - - struct WorldAttributes : public ObjectHeader - { - float worldSize; - float atmoSphereSize; - }; - - struct SkyAttributes : public ObjectHeader - { - float skySize; - }; - - - - /************************************ - Lights - *************************************/ - - struct BasicLight : public ObjectTypeHeader - { - LightType lightType; //Is not used right now - float color[3]; - float position[3]; - float raduis; - float intensity; - }; - /* We only support pointlight right now. - struct PointLight : public BasicLight - { - float position[3]; - }; - - struct DirectionalLight : public BasicLight - { - float direction[3]; - }; - - struct SpotLight : public BasicLight - { - float direction[3]; - float range; - float attenuation[3]; - };*/ -} - -#endif \ No newline at end of file diff --git a/Code/Game/GameLogic/LevelLoader/ParseFunctions.cpp b/Code/Game/GameLogic/LevelLoader/ParseFunctions.cpp deleted file mode 100644 index 76d7d6c3..00000000 --- a/Code/Game/GameLogic/LevelLoader/ParseFunctions.cpp +++ /dev/null @@ -1,195 +0,0 @@ -////////////////////////////////// -// Created by Sam Svensson 2013 // -////////////////////////////////// - -#include "ParseFunctions.h" -#include "Packing/Packing.h" -#include "Loader.h" -#include "Utilities.h" -#include - -using namespace Oyster::Packing; -using namespace GameLogic::LevelFileLoader; -using namespace GameLogic; -using namespace std; - -namespace GameLogic -{ - namespace LevelFileLoader - { - //can parse any struct if the struct doesnt contain strings or char[] - void ParseObject(char* buffer, void *header, int size) - { - memcpy(header, buffer, size); - } - - void ParseObject(char* buffer, ObjectHeader& header, int& size, bool loadCgf) - { - char tempName[128]; - unsigned int tempSize = 0; - int start = 0; - - memcpy(&header.typeID, &buffer[start], 4); - start += 4; - - memcpy(&header.specialTypeID, &buffer[start], 4); - start += 4; - - memcpy(&tempSize, &buffer[start], 4); - start += 4; - - memcpy(&tempName, &buffer[start], tempSize); - header.ModelFile.assign(&tempName[0], &tempName[tempSize]); - start += tempSize; - - //The reset of the object struct - //3 float[3], 1 float - memcpy(&header.position, &buffer[start], 40); - start += 40; - - //if loadCgf : Read path for bounding volume - if(loadCgf) - { - ParseBoundingVolume(&buffer[start], header.boundingVolume, start); - } - - //else make sure the counter counts the name so we can jump over the string in the buffer. - else - { - memcpy(&tempSize, &buffer[start], 4); - start += 4; - - memcpy(&tempName, &buffer[start], tempSize); - - string fileName; - fileName.assign(&tempName[0], &tempName[tempSize]); - start += tempSize; - } - - size += start; - } - - void ParseLevelMetaData(char* buffer, LevelMetaData &header, int &size) - { - int start = 0; - unsigned int tempSize; - char tempName[128]; - - memcpy(&header.typeID, &buffer[start], 4); - start += 4; - - memcpy(&tempSize , &buffer[start], 4); - start += 4; - - memcpy(&tempName, &buffer[start], tempSize); - header.levelName.assign(&tempName[0], &tempName[tempSize]); - start += tempSize; - - memcpy(&header.levelVersion, &buffer[start], 4); - start += 4; - - memcpy(&tempSize, &buffer[start], 4); - start +=4; - - memcpy(&tempName, &buffer[start], tempSize); - header.levelDescription.assign(&tempName[0], &tempName[tempSize]); - start += tempSize; - - memcpy(&tempSize, &buffer[start], 4); - start += 4; - - memcpy(&tempName, &buffer[start], tempSize); - header.levelAuthor.assign(&tempName[0], &tempName[tempSize]); - start += tempSize; - - memcpy(&header.maxNumberOfPlayer, &buffer[start], 4); - start += 4; - - memcpy(&header.worldSize, &buffer[start], 4); - start += 4; - - memcpy(&tempSize, &buffer[start], 4); - start += 4; - - memcpy(&tempName, &buffer[start], tempSize); - header.overviewPicturePath.assign(&tempName[0], &tempName[tempSize]); - start += tempSize; - - memcpy(&tempSize, &buffer[start], 4); - start += 4; - - int temp; - - for(int i = 0; i < (int)tempSize; i++) - { - memcpy(&temp, &buffer[start], 4); - start += 4; - header.gameModesSupported.push_back((GameMode)temp); - } - - size += start; - } - - void ParseBoundingVolume(char* buffer, LevelLoaderInternal::BoundingVolume& volume, int &size) - { - int start = 0; - int tempSize = 0; - char tempName[128]; - - memcpy(&tempSize, &buffer[start], 4); - start += 4; - - memcpy(&tempName, &buffer[start], tempSize); - - string fileName; - fileName.assign(&tempName[0], &tempName[tempSize]); - start += tempSize; - - size += start; - - //Läs in filen. - int fileLength = 0; - Loader loader; - char* buf = loader.LoadFile(L"../Content/Worlds/cgf/" + Utility::String::StringToWstring(fileName, wstring()), fileLength); - - start = 0; - LevelLoaderInternal::FormatVersion version; - memcpy(&version, &buf[0], sizeof(version)); - start += 8; - - memcpy(&volume.geoType, &buf[start], sizeof(volume.geoType)); - - switch(volume.geoType) - { - case CollisionGeometryType_Box: - memcpy(&volume.box, &buf[start], sizeof(volume.box)); - start += sizeof(volume.box); - break; - - case CollisionGeometryType_Sphere: - memcpy(&volume.sphere, &buf[start], sizeof(volume.sphere)); - start += sizeof(volume.sphere); - break; - - case CollisionGeometryType_Cylinder: - memcpy(&volume.cylinder, &buf[start], sizeof(volume.cylinder)); - start += sizeof(volume.cylinder); - break; - - case CollisionGeometryType_TriangleMesh: - //Get string size - memcpy(&tempSize, &buf[start], sizeof(tempSize)); - start += sizeof(tempSize); - - //Get actual string - volume.triangleMesh.filename = new wchar_t[tempSize+1]; - memcpy(volume.triangleMesh.filename, &buf[start], tempSize); - volume.triangleMesh.filename[tempSize] = '\0'; - break; - - default: - break; - } - } - } -} \ No newline at end of file diff --git a/Code/Game/LevelLoader/LevelLoader.cpp b/Code/Game/LevelLoader/LevelLoader.cpp index 8fe880f3..82583696 100644 --- a/Code/Game/LevelLoader/LevelLoader.cpp +++ b/Code/Game/LevelLoader/LevelLoader.cpp @@ -48,5 +48,5 @@ std::string LevelLoader::GetFolderPath() void LevelLoader::SetFolderPath(std::string folderPath) { - + this->pData->folderPath = folderPath; } \ No newline at end of file