/* ==========================================================================
* 파    일 : UITransformImage.h
* 목    적 : 
* 작 성 자 : 이법석
* 작 성 일 : 2007.02.26
* 주의사항 : 
*===========================================================================*/
#pragma once

#include "UIImageBase.h"

class NiTexture;
class NiTexturingProperty;
class NiAlphaProperty;
class NiZBufferProperty;


/// UI 이미지 - 확대, 축소 가능
class cUITransformImage : public cUIImageBase
{
public:
	cUITransformImage();
	virtual ~cUITransformImage();

	/// 텍스처를 설정
	virtual void SetTexture( NiTexture* ptex );


	/// 렌더링
	virtual void Draw();

	/// 스크린 좌표 셋팅
	void SetPos( int x, int y );

	/// 스크린 상에서 크기
	void SetScreenWH( unsigned short screenW, unsigned short screenH );
	void SetScreenRect( const cUIRect& rect );

	/// 갱신
	void UpdateImage();

	/// 텍스쳐 UV 셋팅
	void SetTextureRect( unsigned int tl, unsigned int tt, unsigned int tr, unsigned int tb );

	/// 정점 컬러 정보 셋팅
	void SetColor( float r, float g, float b, float a );
	void SetColor( const NiColorA& color );

	virtual void SetAlpha( float a );

	const NiColorA& GetColor() const;

	/// 회전 및 이동
	/// 절대좌표.
	void SetTranslate( short x, short y );
	void SetRotate( float angle );


	inline NiAlphaProperty* GetAlphaProp() { return mpAlphaProp; }
	inline NiTexturingProperty* GetTexturingProp() { return mpTextureProp; }
	inline NiScreenElements* GetScreenElements() { return mpScreenElement; }

/*
	/// 스크린 상의 위치를 설정 [0, 1]
	virtual void SetPos( unsigned int x, unsigned int y );

	/// 스크린 상의 크기를 설정 [0, 1]
	virtual void SetSize( double w, double h );

	/// 스크린 상의 영역을 설정 [0, 1]
	virtual void SetScreenRect( const cUIRect& rect );

	/// 색상을 설정
	virtual void SetColor( const NiColorA& color );
	const NiColorA& GetColor() const;

	/// 알파 설정
	virtual void SetAlpha( float a );

	/// 텍스처 영역을 설정
	virtual void SetTextureRect( unsigned int tl, unsigned int tt, unsigned int tr, unsigned int tb );
	virtual void SetTextureRect( const cUIRect& rect );

	/// 회전
	void SetTranslate( float x, float y );
	void SetRotate( float angle );
*/
protected:
	/// 스크린 객체
	NiScreenElements*	mpScreenElement;

	/// 텍스쳐 정보의 변경을 용이하게 하기 위한 참조 및 관리 변수
	NiTexturingProperty*	mpTextureProp;

	/// 알파 블랜딩을 위한 참조 및 관리 변수
	NiAlphaProperty*		mpAlphaProp;

	NiColorA		mColor;

	/// 화면상에서의 위치 및 크기
	short			mScreenX;
	short			mScreenY;
//	unsigned short	mScreenW;
//	unsigned short	mScreenH;

	float mScaleX;
	float mScaleY;

	/// 회전 각도
	/// 회전 각도
	float mAngle;
	NiPoint2 mVertex[4];
	NiPoint2 mCenter;
};
