/*
/ KERNEL.H
/ ********
/ Core kernel interface class.
/
/ Will Beddow 2010 - http://343gs.com/brainstem
/
/ This software is currently under development
/ and is subject to change and improvement. Some
/ aspects of the system are incomplete and/or 
/ unstable due to ongoing implementation.
/
*/

#ifndef __KERNEL_H__
#define __KERNEL_H__

#include "Compile.h"
#include "Types.h"
#include "Event.h"
#include "Director.h"
#include "Params.h"
#include "Device.h"

namespace Brainstem
{
	class IKernel
	{
	public:

		virtual bool Init() = 0;
		virtual bool Run() = 0;
		virtual void Release() = 0;

		virtual IDevice* GetDevice() = 0;
		virtual IDirector* GetDirector() = 0;

		virtual void SetPause(bool pause) = 0;
		virtual bool IsPaused() = 0;

		virtual float GetDeltaTime() = 0;
		virtual long GetFrameIndex() = 0;
		virtual float GetFPS() = 0;

		virtual const char* GetWorkingDirectory() = 0;

		virtual void SetEventManager(IEventManager* eventManager) = 0;

		virtual void SetMousePosition(Vector2<int> position) = 0;
		virtual Vector2<int> GetMousePosition() = 0;

		virtual void SetWindowPosition(Vector2<int> position) = 0;
		virtual Vector2<int> GetWindowPosition() = 0;

		virtual Dimension2<int> GetWindowSize() = 0;
		virtual Dimension2<int> GetResolution() = 0;

		virtual Vector2<int> GetWindowCenter() = 0;

		virtual void SetWindowTitle(const char* title) = 0;
		virtual void SetConsoleState(int state) = 0;
		virtual void SetMouseVisible(bool visible) = 0;
	};
}

#endif