Skip to content
Snippets Groups Projects
game.h 1.96 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
    #include "shoot_controller.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();
    
    Tomas Vybiral's avatar
    Tomas Vybiral committed
        /// Loads all levels
        static void load_levels();
    
    protected:
    
    Tomas Vybiral's avatar
    Tomas Vybiral committed
        /// Processes polled events
        void process_events();
    
    Tomas Vybiral's avatar
    Tomas Vybiral committed
        /// Processes singular event
        void process_event(const event& e);
    
    Tomas Vybiral's avatar
    Tomas Vybiral committed
        /// Updates state
        void update_state();
        /// Renders current state
        void render_current_state();
    
    Tomas Vybiral's avatar
    Tomas Vybiral committed
        /// Helper function that processes event of defined type using provided funtion (lambda) 
    
    Tomas Vybiral's avatar
    Tomas Vybiral committed
        template<typename T>
        void do_event(const event& event, const std::function<void(const T&)>& trigger);
    
    Tomas Vybiral's avatar
    Tomas Vybiral committed
        /// Tries to load next level. Returns true if can't load any new levels.
        bool try_to_switch_level();
    
    Tomas Vybiral's avatar
    Tomas Vybiral committed
        /// Moves projectiles and tests them for collisions
        void move_and_test_collisions();
    
    Tomas Vybiral's avatar
    Tomas Vybiral committed
    
        /// 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
        /// Controlls current shooting mode
        shoot_controller* shoot_control;
    
    Tomas Vybiral's avatar
    Tomas Vybiral committed
        /// Player position is updated every second by this value
    
    Tomas Vybiral's avatar
    Tomas Vybiral committed
        int32_t player_position_delta;
    
    Tomas Vybiral's avatar
    Tomas Vybiral committed
        /// Player angle is updated every second by this value
        double player_angle_delta;
    
    Tomas Vybiral's avatar
    Tomas Vybiral committed
        /// Player force is updated every second by this value
        double player_force_delta;
    
    Tomas Vybiral's avatar
    Tomas Vybiral committed
        /// Time between two ticks
        double delta_time;
        /// Is the game running
        bool is_running;
    
    Tomas Vybiral's avatar
    Tomas Vybiral committed
        /// If true controller tries to create new projectile
        bool shoot;
    
    Tomas Vybiral's avatar
    Tomas Vybiral committed
        /// Is in debug mode
        bool debug;
    
    };
    
    #endif//GAME_H