//	Darkstar Engine  (c) UnderWorld Interactive Studio (all coding by Svarog    2008)
//
//      Данный файл является частью Darkstar Engine. Любое использование кода файла
//      без согласия компании, является нарушением закона об авторском праве (в слу-
//      чае если не оговорено обратное).
//
//      Имя файла: static_model.hpp
//      Краткое описание: class model
//

#ifndef DSE_RS_MODEL_STATIC_MODEL_HPP
#define DSE_RS_MODEL_STATIC_MODEL_HPP

#include <Darkstar/common.hpp>
#include <Darkstar/Resource System/Model/mesh.hpp>
#include <Darkstar/math.hpp>
#include <Darkstar/Graphic System/Camera/camera.hpp>

namespace rs
{
	class StaticModel
	{
	private:
		std::vector<shared_ptr<Mesh> > meshes;

		math::Vect3 position;
		float scale_factor;
		float angx, angy, angz;

		math::Matr4 transformation_matrix;

		bool need_to_matrix_update;

		void _buildTransformationMatrix();
	public:
		StaticModel();
		~StaticModel();

		void addNextMesh(const shared_ptr<Mesh>& next_mesh);

		void setTranslation(const math::Vect3& new_position);
		void setRotationX(const float angle);
		void setRotationY(const float angle);
		void setRotationZ(const float angle);
		void setScaling(const float scale_factor);

		const math::Vect3& getTranslation() const;
		math::Vect3 getRotation() const;
		const float getScaling() const;

		const unsigned int getMeshesNumber() const;
		const shared_ptr<Mesh>& getMesh(const unsigned int index) const;
		void drawMesh(const unsigned int index, const shared_ptr<gs::Camera>& camera);
	};
};

#endif