[Add] Creating savegame if it doesn't exist.

This commit is contained in:
Tamir Atias 2012-02-03 01:00:48 +02:00
parent 5be88716c3
commit f2d9434b9c
4 changed files with 77 additions and 12 deletions

1
.gitignore vendored
View File

@ -12,6 +12,7 @@ Win32/Unuk/Unuk.ncb
Win32/Unuk/Unuk.suo
Bin/Unuk
Bin/*.dll
Save/save
*.swp
*.o
*.exe

View File

@ -1,10 +0,0 @@
<?xml version="1.0" ?>
<save>
<name>Allanis</name>
<x>444</x>
<y>432</y>
<level>1</level>
<exp>8</exp>
<health>100</health>
<map>map</map>
</save>

View File

@ -231,13 +231,86 @@ void Game::Render(void) {
SDL_Flip(screen);
}
void Game::NewSavegame(const string savegameIDArg) {
string saveFilename = "../Save/" + _saveGameID;
TiXmlDocument doc;
TiXmlDeclaration* decl = new TiXmlDeclaration("1.0", "", "");
TiXmlElement* saveElement = new TiXmlElement("save");
TiXmlElement* nameElement = new TiXmlElement("name");
TiXmlText* nameText = new TiXmlText("Allanis"); //TODO: replace with _player->GetName() when it works. --konom
nameElement->LinkEndChild(nameText);
int spawnX;
int spawnY;
_map.FindSpawnPoint(spawnX, spawnY);
_player->SetXY(spawnX, spawnY);
std::stringstream xString;
xString << spawnX;
TiXmlElement* xElement = new TiXmlElement("x");
TiXmlText* xText = new TiXmlText(xString.str().c_str());
xElement->LinkEndChild(xText);
std::stringstream yString;
yString << spawnY;
TiXmlElement* yElement = new TiXmlElement("y");
TiXmlText* yText = new TiXmlText(yString.str().c_str());
yElement->LinkEndChild(yText);
_player->SetLevelLiteral(1);
TiXmlElement* levelElement = new TiXmlElement("level");
TiXmlText* levelText = new TiXmlText("1");
levelElement->LinkEndChild(levelText);
_player->SetExpLiteral(0);
TiXmlElement* expElement = new TiXmlElement("exp");
TiXmlText* expText = new TiXmlText("0");
expElement->LinkEndChild(expText);
TiXmlElement* healthElement = new TiXmlElement("health");
TiXmlText* healthText = new TiXmlText("100");
healthElement->LinkEndChild(healthText);
TiXmlElement* mapElement = new TiXmlElement("map");
TiXmlText* mapText = new TiXmlText("map"); //TODO: replace with actual map name.
mapElement->LinkEndChild(mapText);
saveElement->LinkEndChild(nameElement);
saveElement->LinkEndChild(xElement);
saveElement->LinkEndChild(yElement);
saveElement->LinkEndChild(levelElement);
saveElement->LinkEndChild(expElement);
saveElement->LinkEndChild(healthElement);
saveElement->LinkEndChild(mapElement);
doc.LinkEndChild(decl);
doc.LinkEndChild(saveElement);
doc.SaveFile(saveFilename.c_str());
}
void Game::LoadSavegame(const string savegameIDArg) {
_saveGameID = savegameIDArg;
string saveFilename = "../Save/" + _saveGameID;
// Converting to XML ftw!
TiXmlDocument mapFile(saveFilename.c_str());
assert(mapFile.LoadFile() == true);
// Create new save if can't load file.
if(!mapFile.LoadFile()) {
NewSavegame(savegameIDArg);
_map.Load("map");
return;
}
TiXmlElement* rootElem = NULL;
TiXmlElement* dataElem = NULL;
@ -306,7 +379,7 @@ void Game::LoadSavegame(const string savegameIDArg) {
void Game::SaveSavegame(void) {
string saveFilename = "../Save/" + _saveGameID;
TiXmlDocument doc;
TiXmlDeclaration* decl = new TiXmlDeclaration("1.0", "", "");

View File

@ -33,6 +33,7 @@ private:
void UpdateGame(void);
void Render(void);
void NewSavegame(const string savegameIDArg);
void LoadSavegame(const string savegameIDArg);
void SaveSavegame(void);