MyCurry/src/gamelib/gamescenebase.hpp

66 lines
1.7 KiB
C++

/*
Copyright 2016, 2017 Michele "King_DuckZ" Santullo
This file is part of MyCurry.
MyCurry 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.
MyCurry 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 MyCurry. If not, see <http://www.gnu.org/licenses/>.
*/
#pragma once
#include <memory>
#include <chrono>
namespace cloonel {
class InputBag;
class SDLMain;
} //namespace cloonel
namespace curry {
template <typename T> class Rect;
class DrawingQueue;
class GameSceneBase {
public:
explicit GameSceneBase (cloonel::SDLMain* parSdlMain);
virtual ~GameSceneBase() noexcept;
void prepare();
void destroy() noexcept;
void exec();
bool wants_to_quit() const;
void set_wants_to_quit();
protected:
virtual void on_prepare() = 0;
virtual void on_destroy() noexcept = 0;
virtual void on_update (float parDeltaT) = 0;
cloonel::SDLMain* sdl_main();
cloonel::InputBag& input_bag();
DrawingQueue& drawing_queue();
const DrawingQueue& drawing_queue() const;
private:
std::chrono::time_point<std::chrono::steady_clock> m_time0;
std::unique_ptr<cloonel::InputBag> m_input;
std::unique_ptr<DrawingQueue> m_drawing_queue;
cloonel::SDLMain* m_sdlmain;
float m_screen_width;
float m_screen_height;
bool m_wants_to_quit;
};
} //namespace curry