diff --git a/.gitignore b/.gitignore index 17ae8d3..713881e 100644 --- a/.gitignore +++ b/.gitignore @@ -12,6 +12,7 @@ Win32/Unuk/Unuk.ncb Win32/Unuk/Unuk.suo Bin/Unuk Bin/*.dll +Save/save *.swp *.o *.exe diff --git a/Save/save b/Save/save deleted file mode 100644 index 8733057..0000000 --- a/Save/save +++ /dev/null @@ -1,10 +0,0 @@ - - - Allanis - 444 - 432 - 1 - 8 - 100 - map - diff --git a/src/Unuk/Game.cpp b/src/Unuk/Game.cpp index 1e9a69c..d7c521c 100644 --- a/src/Unuk/Game.cpp +++ b/src/Unuk/Game.cpp @@ -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", "", ""); diff --git a/src/Unuk/Game.h b/src/Unuk/Game.h index 2895d77..4f238ae 100644 --- a/src/Unuk/Game.h +++ b/src/Unuk/Game.h @@ -33,6 +33,7 @@ private: void UpdateGame(void); void Render(void); + void NewSavegame(const string savegameIDArg); void LoadSavegame(const string savegameIDArg); void SaveSavegame(void);