/*Copyright (C) 2010 Deveaux Duncan

This file is part of Hikou no mizu.

Hikou no mizu is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.

Hikou no mizu is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
GNU General Public License for more details.

You should have received a copy of the GNU General Public License
along with Hikou no mizu.  If not, see <http://www.gnu.org/licenses/>.
*/

#ifndef DEF_GAME_ENGINE
#define DEF_GAME_ENGINE

#include "Screens/MainMenu/MainMenu.hpp"
#include "Screens/CharactersMenu/CharactersMenu.hpp"
#include "Screens/Fight/Fight.hpp"

//Class allowing to manage and ordain the screens.
class GameEngine
{
    public:
        GameEngine(sf::RenderWindow *renderWindow);
        ~GameEngine();
        
        void initMainMenu();
        
        void confCMPlayersNo(int playersNo);
        void initCharactersMenu();
        
        void confFightPlayers(const std::vector<std::string> &playersName);
        void initFight();
        
        
        void launchNextScreen();
        
        void exit();
        bool wasExited() const;
        
        sf::RenderWindow *getRenderWindow() const;
    
    private:
        void setNextScreen(Screen *nextScreen);
        
        sf::RenderWindow *m_renderWindow;
        
        Screen *m_nextScreen;
        
        MainMenu *m_mainMenu;
        CharactersMenu *m_charactersMenu;
        Fight *m_fight;
        
        bool m_exited;
};

#endif