void InGameState::restart() { if (m_io) { m_victoryTime = 0; m_defeatTime = 0; m_toneOutTimer = 0; m_io->clearSpriteInfos(); for (unsigned int i = 0; i < m_gameObjects.size(); i++) { if( m_gameObjects[i] != NULL) { delete m_gameObjects[i]; m_gameObjects[i] = NULL; } } m_gameObjects.clear(); m_monsters.clear(); m_bombs.clear(); if (m_tileMap) { delete m_tileMap; m_tileMap = NULL; } if (m_gui) { delete m_gui; m_gui = NULL; } m_tileMap = 0; MapLoader mapParser; int tscore = 0; if (m_stats) { tscore = m_stats->getTotalScore(); delete m_stats; } m_stats = new GameStats(m_parent->getNewTimerInstance(), m_maps[m_currentMap].parTime, tscore); stringstream ss; ss << m_currentMap; string mapString = "../Maps/" + m_maps[m_currentMap].filename; mapParser.parseMap(mapString, m_io, m_stats, m_factory); m_tileMap = mapParser.getTileMap(); m_gameObjects = mapParser.getGameObjects(); m_avatar = mapParser.getAvatar(); m_monsters = mapParser.getMonsters(); m_traps = mapParser.getTraps(); m_gui = mapParser.getGUI(); m_paused = false; if (m_avatar) m_startTile = m_avatar->getCurrentTile(); m_io->fadeSceneToBlack(1.0f); } m_parent->stopMainTimer(); m_parent->startMainTimer(); //Ugly - Should be corrected. Leave for now if (m_backgroundMusic) { m_backgroundMusic->deleted = true; } m_backgroundMusic = new SoundInfo(); m_backgroundMusic->id = "../Sounds/Music/" + m_maps[m_currentMap].backgroundMusic; m_backgroundMusic->play = true; m_backgroundMusic->volume = 0; m_io->addSong(m_backgroundMusic); //Add sound effects if (m_clock) { m_clock->deleted = true; } m_clock = m_factory->CreateSoundInfo("../Sounds/bell.wav", 100); if (m_defeat) { m_defeat->deleted = true; } m_defeat = m_factory->CreateSoundInfo("../Sounds/failure.wav", 100); if (m_victory) { m_victory->deleted = true; } m_victory = m_factory->CreateSoundInfo("../Sounds/victory.wav", 100); //ANTON FIX! //Makes sure the game starts at time 0 m_stats->getGameTimer()->stop(); m_stats->getGameTimer()->start(); }