2014-01-24 09:00:59 +01:00
|
|
|
|
#include "LevelParser.h"
|
|
|
|
|
|
2014-01-27 10:14:02 +01:00
|
|
|
|
#include "Loader.h"
|
2014-01-27 13:57:18 +01:00
|
|
|
|
#include "ParseFunctions.h"
|
2014-01-27 10:14:02 +01:00
|
|
|
|
|
2014-01-24 10:01:58 +01:00
|
|
|
|
using namespace GameLogic;
|
2014-01-24 10:42:19 +01:00
|
|
|
|
using namespace ::LevelFileLoader;
|
2014-01-24 10:01:58 +01:00
|
|
|
|
|
2014-01-27 13:57:18 +01:00
|
|
|
|
|
2014-01-24 10:01:58 +01:00
|
|
|
|
LevelParser::LevelParser()
|
|
|
|
|
{
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
LevelParser::~LevelParser()
|
|
|
|
|
{
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//
|
|
|
|
|
std::vector<ObjectTypeHeader> LevelParser::Parse(std::string filename)
|
|
|
|
|
{
|
2014-01-27 13:57:18 +01:00
|
|
|
|
int stringSize = 0;
|
2014-01-24 10:01:58 +01:00
|
|
|
|
//Read entire level file.
|
2014-01-27 10:14:02 +01:00
|
|
|
|
Loader loader;
|
2014-01-27 13:57:18 +01:00
|
|
|
|
unsigned char* buffer = (unsigned char*)loader.LoadFile(filename.c_str(), stringSize);
|
2014-01-24 10:01:58 +01:00
|
|
|
|
|
|
|
|
|
std::vector<ObjectTypeHeader> objects;
|
|
|
|
|
|
|
|
|
|
unsigned int counter = 0;
|
2014-01-27 13:57:18 +01:00
|
|
|
|
|
2014-01-24 10:01:58 +01:00
|
|
|
|
while(counter < stringSize)
|
|
|
|
|
{
|
|
|
|
|
//Get typeID
|
2014-01-27 13:57:18 +01:00
|
|
|
|
ObjectTypeHeader typeID;
|
|
|
|
|
typeID = parseObjectTypeHeader(buffer);
|
2014-01-27 10:14:02 +01:00
|
|
|
|
//Unpack ID
|
2014-01-24 10:01:58 +01:00
|
|
|
|
|
2014-01-27 13:57:18 +01:00
|
|
|
|
switch((int)typeID.typeID)
|
2014-01-24 10:01:58 +01:00
|
|
|
|
{
|
|
|
|
|
case TypeID_LevelHeader:
|
|
|
|
|
//Call function
|
|
|
|
|
counter += LevelHeaderSize;
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
case TypeID_Object:
|
|
|
|
|
//Call function
|
|
|
|
|
counter += ObjectHeaderSize;
|
|
|
|
|
break;
|
|
|
|
|
default:
|
|
|
|
|
//Couldn't find typeID. FAIL!!!!!!
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return objects;
|
|
|
|
|
}
|
|
|
|
|
|
2014-01-27 13:57:18 +01:00
|
|
|
|
//f<>r meta information om leveln. M<>ste g<>ra s<> den returnerar r<>tt strukt s<> fort vi
|
|
|
|
|
//vi definierat en!
|
2014-01-24 10:01:58 +01:00
|
|
|
|
ObjectTypeHeader LevelParser::ParseHeader(std::string filename)
|
|
|
|
|
{
|
2014-01-27 13:57:18 +01:00
|
|
|
|
int stringSize = 0;
|
2014-01-24 10:01:58 +01:00
|
|
|
|
//Read entire level file.
|
2014-01-27 10:14:02 +01:00
|
|
|
|
Loader loader;
|
2014-01-27 13:57:18 +01:00
|
|
|
|
unsigned char* buffer = (unsigned char*)loader.LoadFile(filename.c_str(), stringSize);
|
2014-01-24 10:01:58 +01:00
|
|
|
|
|
|
|
|
|
//Find the header in the returned string.
|
|
|
|
|
unsigned int counter = 0;
|
2014-01-27 13:57:18 +01:00
|
|
|
|
|
2014-01-24 10:01:58 +01:00
|
|
|
|
|
|
|
|
|
ObjectTypeHeader header;
|
|
|
|
|
header.typeID = ObjectType_Level;
|
|
|
|
|
|
|
|
|
|
while(counter < stringSize)
|
|
|
|
|
{
|
2014-01-27 13:57:18 +01:00
|
|
|
|
ObjectTypeHeader typeID;
|
|
|
|
|
typeID = parseObjectTypeHeader(buffer);
|
|
|
|
|
switch(typeID.typeID)
|
2014-01-24 10:01:58 +01:00
|
|
|
|
{
|
|
|
|
|
case TypeID_LevelHeader:
|
|
|
|
|
//Call function
|
2014-01-27 10:14:02 +01:00
|
|
|
|
|
|
|
|
|
counter += LevelHeaderSize;
|
2014-01-24 10:01:58 +01:00
|
|
|
|
break;
|
|
|
|
|
case TypeID_Object:
|
|
|
|
|
//Call function
|
|
|
|
|
counter += ObjectHeaderSize;
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
default:
|
|
|
|
|
//Couldn't find typeID. FAIL!!!!!!
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return header;
|
|
|
|
|
}
|