Updated addon repository URL and improved debug output on download
[supertux.git] / src / supertux / levelset_screen.cpp
1 //  SuperTux
2 //  Copyright (C) 2014 Ingo Ruhnke <grumbel@gmail.com>
3 //
4 //  This program is free software: you can redistribute it and/or modify
5 //  it under the terms of the GNU General Public License as published by
6 //  the Free Software Foundation, either version 3 of the License, or
7 //  (at your option) any later version.
8 //
9 //  This program is distributed in the hope that it will be useful,
10 //  but WITHOUT ANY WARRANTY; without even the implied warranty of
11 //  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
12 //  GNU General Public License for more details.
13 //
14 //  You should have received a copy of the GNU General Public License
15 //  along with this program.  If not, see <http://www.gnu.org/licenses/>.
16
17 #include "supertux/levelset_screen.hpp"
18
19 #include "supertux/game_session.hpp"
20 #include "supertux/globals.hpp"
21 #include "supertux/levelset.hpp"
22 #include "supertux/savegame.hpp"
23 #include "supertux/screen_fade.hpp"
24 #include "supertux/screen_manager.hpp"
25 #include "util/file_system.hpp"
26
27 LevelsetScreen::LevelsetScreen(const std::string& basedir, const std::string& level_filename,
28                                Savegame& savegame) :
29   m_basedir(basedir),
30   m_level_filename(level_filename),
31   m_savegame(savegame),
32   m_level_started(false),
33   m_solved(false)
34 {
35   Levelset levelset(basedir);
36   for(int i = 0; i < levelset.get_num_levels(); ++i)
37   {
38     std::string lev = levelset.get_level_filename(i);
39     m_savegame.set_levelset_state(m_basedir, lev, false);
40   }
41
42   LevelsetState state = m_savegame.get_levelset_state(basedir);
43   LevelState level_state = state.get_level_state(level_filename);
44   m_solved = level_state.solved;
45 }
46
47 LevelsetScreen::~LevelsetScreen()
48 {
49 }
50
51 void
52 LevelsetScreen::draw(DrawingContext&)
53 {
54 }
55
56 void
57 LevelsetScreen::update(float elapsed_time)
58 {
59 }
60
61 void
62 LevelsetScreen::finished_level(bool win)
63 {
64   m_solved = m_solved || win;
65 }
66
67 void
68 LevelsetScreen::setup()
69 {
70   if (m_level_started)
71   {
72     log_info << "Saving Levelset state" << std::endl;
73     // this gets called when the GameSession is done and we return back to the
74     m_savegame.set_levelset_state(m_basedir, m_level_filename, m_solved);
75     m_savegame.save();
76     ScreenManager::current()->pop_screen();
77   }
78   else
79   {
80     m_level_started = true;
81
82     std::unique_ptr<Screen> screen(new GameSession(FileSystem::join(m_basedir, m_level_filename),
83                                                    m_savegame));
84     ScreenManager::current()->push_screen(std::move(screen));
85   }
86 }
87
88 void
89 LevelsetScreen::leave()
90 {
91 }
92
93 /* EOF */