Danbias/Code/Game/GameLogic/LevelParser.cpp

96 lines
1.7 KiB
C++
Raw Normal View History

#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;
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;
}