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

Description: 
    
    
*/

#ifndef GOC_h
#define GOC_h

#ifdef _WIN32
    #include "./source/PlatformSpecific/inc/WindowManager_WIN.h"
#else
    #include "./source/PlatformSpecific/inc/WindowManager_UBUNTU.h"
#endif

#include "./source/PlatformSpecific/inc/ErrorReport.h"
#include "./source/PlatformSpecific/inc/DeviceInput.h"
#include "./source/PlatformSpecific/inc/Sprite.h"
#include "./source/inc/TimeGOC.h"
#include "./source/inc/TimerGOC.h"
#include "./source/inc/InputEngine.h"
#include "./source/inc/Render2D.h"
#include "./source/inc/UniqueNumber.h"
#include "./source/inc/Sound.h"
#include "./source/inc/AnimationGOC.h"
#include "./source/inc/MathGOC.h"

class GOC
{
    public:
        
        // Initialize the developer's game.
        virtual void Initialize();
        
        // Updates the developer's game state.
        virtual void Update(TimeGOC *timeGOC_p, InputEngine *input_p);
        virtual void IndependentUpdate(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:
    
        ErrorReport *errorReport_m; 
       
        static GOC *goc_m;

        /* Add private variables here. */
};

#endif
