#ifndef _TTETRIS2D_H
#define _TTETRIS2D_H
//-------------------------------------------------------
#include "TFigure2D.h"
#include "TSquare2D.h"
#include <vector>
//-------------------------------------------------------
enum ECommand
{
	ECommand_Left,
	ECommand_Right,
	ECommand_RotateClockwise,		// вращение по часовой
	ECommand_RotateAnticlockwise,	// вращение против часовой
	ECommand_Haste,
	ECommand_NoCommand,
	ECommand_Quantity
};
//-------------------------------------------------------
class TTetris2D
{
private:
	void CreateFigure();
	void PutFigure();
	bool StopFigure();		// проверяет, должна ли остановиться фигура при взаимодействие с дном или другими фигурами
	bool IsExistStep();
	bool IsExistRotate();
	void ExecuteCommand(const ECommand &command);
	bool RemoveFillLines();
	bool IndentLines();		// осуществляет сдвиг удаляемых линий, true - осуществлён
protected:
	TFigure2D _figure;								// падающая фигура
	TFigure2D _nextFigure;							// падающая фигура
	float _speed;
	float _speedLines;
	std::vector< std::vector<TSquare> > _vvField;	// поле
	std::vector< std::vector<TSquare> > _vvRemovingLines; // удаляемые линии
	TRectF _drawingRect;							// прямоугольник для рисования фигуры
	TColor4 _color;
	bool _loseGame;
	float _height;									// пройденная высота
	int _width;										// номер квадрата слева
	DWORD _systime;
	uint _score;
	bool _removeLines;
	float _indentRemovingLines;
	std::vector<ITexture*> _vTextures;
public:
	TTetris2D();
	TTetris2D(float speed, float speedLines, uint width, uint height, const TRectF &drawingRect, const TColor4 &color,
				const std::vector<ITexture*> &vTextures);
	~TTetris2D();

	bool IsLoseGame() const;
	void Game(const ECommand &command);
	void Draw(IRender2D *pRender2D, IRender *pRender);
	uint GetScore() const;
	TRectF GetDrawingRect() const;
	void SetDrawingRect(const TRectF &drawingRect);
	
};







//-------------------------------------------------------
#endif