src/Graphics.hh
author Tero Marttila <terom@fixme.fi>
Tue, 13 Jan 2009 20:17:03 +0200
changeset 389 e74c1820fbd2
parent 315 fe9da2d5355e
child 392 6c4dc68360eb
permissions -rw-r--r--
implement --help, --fullscreen, --resolution and --list-modes
#ifndef GRAPHICS_HH
#define GRAPHICS_HH

#include "GraphicsPointer.hh"

#include "GameState.hh"
#include "Input.hh"
#include "Timer.hh"
#include "Engine.hh"
#include "Config.hh"

#include <ClanLib/core.h>
#include <ClanLib/gl.h>
#include <ClanLib/display.h>

/**
 * This handles drawing the GameState with an appropriate camera view each frame, loading fonts, and currently,
 * handling the input from Input to GameState.
 */
class Graphics : public CL_DisplayWindow {
private:
    Engine &engine;
    GameState &state;

    PixelCoordinate resolution;
    
    CL_SlotContainer slots;
    
    Timer update_timer;

    Input input;

    // current GUI input state
    GuiInput flags;
    
    // basic fonts
    CL_Font simple_font;

public:
    Graphics (Engine &engine, GameState &state, PixelCoordinate resolution, bool fullscreen);

    CL_Font& getSimpleFont (void) { return simple_font; }

    static const std::vector<CL_DisplayMode> & getDisplayModes (void);
    
private:
    /**
     * Reads current input events from Input and applies them, using LocalPlayer::handleInput and
     * Graphics::handle_input.
     */
    void check_input (void);
    
    /**
     * Handles GuiInput flags read from Input.
     */
    void handle_input (GuiInput flags);

    void do_redraw (void);
    
    void on_update (TimeMS tick_length);
    
    void draw_player_info(CL_GraphicContext *gc, Player *p);
};

#endif /* GRAPHICS_HH */