// GlobalContext.h
// Definition of global context.  The AI must use a global context because it is embeeded inside a DLL
// Written by Matthew Fisher

#define g_ReportingEvents 0
extern bool g_ReportingEvents;    // Currently spewing all reported DirectX calls to files

class GraphicsInfo
    void Init();
    void SetDevice(LPDIRECT3DDEVICE9 Device);
    void CheckWindowSize();
    void SetOverlay(ID3D9DeviceOverlay *Overlay);
    bool OverlayValid()
        return (_Overlay != NULL);
    __forceinline ID3D9DeviceOverlay& Overlay()
        Assert(_Overlay != NULL, "Overlay NULL");
        return *_Overlay;

    // Accessors
    __forceinline LPDIRECT3DDEVICE9 Device()
        Assert(_Device != NULL, "Device == NULL");
        return _Device;
    __forceinline const D3DDEVICE_CREATION_PARAMETERS& CreationParameters()
        return _CreationParameters;
    __forceinline const D3DPRESENT_PARAMETERS& PresentParameters()
        return _PresentParameters;
    __forceinline const Vec2i& WindowDimensions()
        return _WindowDimensions;
    __forceinline const RECT& WindowRect()
        return _WindowRect;

    ID3D9DeviceOverlay              *_Overlay;
    LPDIRECT3DDEVICE9               _Device;
    D3DPRESENT_PARAMETERS           _PresentParameters;
    D3DDEVICE_CREATION_PARAMETERS   _CreationParameters;
    RECT                            _ClientRect, _WindowRect;
    Vec2i                           _WindowDimensions;

struct ManagerList
    ManagerList() {}

    StateManager            State;
    RenderManager           Render;
    TextureEntryManager     TextureEntry;
    FrameUnitManager        FrameUnit;
    FrameHUDManager         FrameHUD;
    MinimapManager          Minimap;
    DatabaseManager         Database;
    ThoughtManager          Thought;
    KeyboardMouseManager    KeyboardMouse;
    KnowledgeManager        Knowledge;
    ControlGroupManager     ControlGroup;

struct FileList
    void Init(const String &BaseDirectory);

    ofstream Events;
    ofstream CurrentFrameRenderEvents;
    ofstream CurrentFrameAllEvents;
    ofstream CurrentFrameWebpageCapture;
    ofstream Assert;
    ofstream Thread;
    ofstream Thought;
    ofstream Actions;

struct GlobalContext
    void Init();
    void WriteConsole(const String &Text, RGBColor Color, OverlayPanelType Panel);
    void ReportAction(const String &Description, RGBColor Color);

    FileList            Files;
    ManagerList         Managers;
    GraphicsInfo        Graphics;
    ManagerController   Controller;
    AIParameters        Parameters;
    FrameTimer          FPSTimer;
    Clock               Timer;
    ScreenConstants     Constants;

extern GlobalContext *g_Context;