/*
File Name: GOC.h
Created By: Andy Odle
Date: July 27, 2009

Description: 
    
    
*/

#ifndef GOC_h
#define GOC_h

#include "./source/PlatformSpecific/inc/ErrorReport.h"
#include "./source/inc/TimeGOC.h"
#include "./source/inc/InputEngine.h"

/* Add new include files here */

class GOC
{
    public:
        
        // Initilizes the developer's game.
        virtual void Initialize();
        
        // Updates the developer's game state.
        virtual void Update(TimeGOC *timeGOC_p, InputEngine *input_p);
        virtual void IndepedentUpdate(TimeGOC *timeGOC_p, InputEngine *input_p);
        
        // Ceans up the developer's game.
        virtual void Destroy();
        
        // This is how you interact with the GOC.
        // 
        // Output:
        //         Returns the Game Object Creator instance pointer.
        static GOC *goc_i();

        // Get the window's width and height.
        int GetWindowWidth();
        int GetWindowHeight();
        
        // Start the setup of the Game Object Creator.
        #ifdef _WIN32
            void LoadGOC(HINSTANCE &hinstance_p);
        #else
            void LoadGOC();
        #endif
        
        // Clean up the Game Object Creator.
        void UnloadGOC();
        
        ErrorReport *GetErrorReport();        

    private:
    
        GOC();
        ~GOC();
        GOC(GOC const&){};
        GOC &operator=(GOC const&){};
                
    private:

        /* Add private variables here. */
};

#endif
