Skip to content
Snippets Groups Projects
game.h 1.24 KiB
Newer Older
  • Learn to ignore specific revisions
  • #ifndef GAME_H
    #define GAME_H
    
    
    Tomas Vybiral's avatar
    Tomas Vybiral committed
    #include <cstdint>
    #include <functional>
    
    Tomas Vybiral's avatar
    Tomas Vybiral committed
    #include "state/state.h"
    #include "input/abstract_input.h"
    
    Tomas Vybiral's avatar
    Tomas Vybiral committed
    #include "renderer/abstract_renderer.h"
    
    Tomas Vybiral's avatar
    Tomas Vybiral committed
    
    
    Tomas Vybiral's avatar
    Tomas Vybiral committed
    /**
    
    Tomas Vybiral's avatar
    Tomas Vybiral committed
     * Basic game structure - behaves like controler in MVC schema.
    
    Tomas Vybiral's avatar
    Tomas Vybiral committed
     */
    
    class game {
    public:
    
    Tomas Vybiral's avatar
    Tomas Vybiral committed
        /// Initializes the game with default/intended input processors and renderer
        explicit game(uint32_t fps);
        /// Deletes all alocated resources.
        ~game();
        /// Runs basic game loop
    
        void run_loop();
    protected:
    
    Tomas Vybiral's avatar
    Tomas Vybiral committed
        /// Processes polled events
        void process_events();
        /// Updates state
        void update_state();
        /// Renders current state
        void render_current_state();
        template<typename T>
        void do_event(const event& event, const std::function<void(const T&)>& trigger);
    
        /// Current game state
    
        state current_state;
    
    Tomas Vybiral's avatar
    Tomas Vybiral committed
        /// Current input processor
        abstract_input* input_processor;
    
    Tomas Vybiral's avatar
    Tomas Vybiral committed
        /// Current game renderer
        abstract_renderer* renderer;
    
    Tomas Vybiral's avatar
    Tomas Vybiral committed
        /// Player position is updated every second by this value
        uint32_t player_position_delta;
        /// Player angle is updated every second by this value
        double player_angle_delta;
        /// Time between two ticks
        double delta_time;
        /// Is the game running
        bool is_running;
    
    };
    
    #endif//GAME_H