/********************************************************************
 * File: SceneElement.h
 * Author: Keith Schwarz (htiek@cs.stanford.edu)
 *
 * A class representing something to be rendered.  This consists of a
 * tuple of a model, an orientation, a position, and a name for the
 * thing to be drawn.  The name allows us to easily look up scene elements.
 */

#ifndef SceneElement_Included
#define SceneElement_Included

#include "RefCountedObject.h"
#include "Matrix.h"
#include "Orientation.h"
#include <string>

namespace Copper3D
{
	class SceneElement: public RefCountedObject
	{
	public:
		/* Query name. */
		std::string name() const;

		/* Query model name. */
		std::string modelName() const;

		/* Query position. */
		Vector<3> position() const;
		void setPosition(const Vector<3>& position);

		/* Query orientation. */
		Orientation orientation() const;
		void setOrientation(const Orientation& orientation);

		static SceneElement* New(const std::string& name,
			                     const std::string& modelName,
					             const Vector<3>& position,
					             const Orientation& orientation);
	private:
		SceneElement(const std::string& name,
			         const std::string& modelName,
					 const Vector<3>& position,
					 const Orientation& orientation);
		~SceneElement();

		std::string mName;
		std::string mModelName;
		Vector<3>   mPosition;
		Orientation mOrientation;
	};
}

#endif