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

#ifndef DSE_VE_RAIN_SPLASH_SYSTEM_HPP
#define DSE_VE_RAIN_SPLASH_SYSTEM_HPP

#include <Darkstar/common.hpp>
#include <Darkstar/Resource System/Textures/baseTexture.hpp>
#include <Darkstar/Graphic System/Effect/effect.hpp>
#include <Darkstar/math.hpp>
#include <Darkstar/Graphic System/Camera/camera.hpp>
#include <Darkstar/Resource System/Model/static_model.hpp>

namespace ve
{
	class SplashSystem
	{
	private:
		shared_ptr<gs::Effect> splash_effect;
		shared_ptr<rs::BaseTexture> splash_texture;
		unsigned int splash_frame_count;
		float splash_texture_x_shift;
		float splash_size;
		shared_ptr<rs::StaticModel> splash_model;
		float splash_speed;

		struct Splash
		{
			float current_frame;
			math::Vect3 position;
		};

		struct SplashVertex
		{
			math::Vect4 position;
			math::Vect2 tex_coord;
		};
			
		std::vector<Splash> splashes;

		unsigned int radius_of_generation;
		unsigned int splash_number;

		Splash _generateNewSplash(const math::Vect3 camera_position);
	public:
		SplashSystem(const std::string& effect_name, const std::string& texture_name, const unsigned int frame_count,
			const unsigned int radius, const unsigned int number_of_splashes, const math::Vect3& start_position,
			const float splash_speed = 0.3f, const float splash_size = 0.07f);
		~SplashSystem();

		void update(const float fps, const shared_ptr<gs::Camera>& camera);
		void draw(const shared_ptr<gs::Camera>& camera);
	};
};

#endif