Skip to content
Snippets Groups Projects
game.h 1.96 KiB
Newer Older
#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"
#include "shoot_controller/shoot_controller.h"
Tomas Vybiral's avatar
Tomas Vybiral committed

Tomas Vybiral's avatar
Tomas Vybiral committed
/// Basic game structure - behaves like controler in MVC schema.
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