/*
/ SCENE.H
/ *******
/ Core scene 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 __SCENE_H__
#define __SCENE_H__

#include "Compile.h"
#include "Types.h"
#include "Display.h"
#include "Node.h"
#include "Camera.h"
#include "Sprite.h"
#include "Terrain.h"
#include "Sky.h"

namespace Brainstem 
{
	class IScene : public IObject
	{
	public:

		virtual void Init() = 0;
		virtual void Update() = 0;
		virtual void Render() = 0;
		virtual void Release() = 0;

		virtual void AddNode(ISceneNode* node) = 0;
		virtual void AddCamera(ICamera* camera) = 0;
		virtual void AddLight(ILight* light) = 0;
		virtual void RemoveLight(ILight* light) = 0;

		virtual void NextCamera() = 0;
		virtual ICamera* GetActiveCamera() = 0;
		virtual void SetActiveCamera(ICamera* camera) = 0;

		virtual void ToggleMappingMode() = 0;
		virtual void ToggleRenderMode() = 0;

		AUTO_OBJECT_SIZE;
		virtual const char* GetName() { return "IScene"; }

		bool AllowRender;
		bool AllowUpdate;

		Vector2<float> TextureScaling;

		ICamera* ActiveCamera;
	};
}

#endif