/* ====================================================================
* 파    일 :	DepthPlaneObject.h
* 목    적 :	2.5D 랜더링 기본 객체
* 작 성 자 :	이법석
* 작 성 일 :	2007.2
* 주의사항 :	
* =================================================================== */
#pragma once

#include "DepthPlaneData.h"

class cDepthPlane;

class cDepthPlaneObject : public NiTriShape
{
	friend class cDepthPlane;
public:
	cDepthPlaneObject( cDepthPlaneData* pdata );
	virtual ~cDepthPlaneObject();

	/// 출력
	void Draw( NiRenderer* pRenderer );

	virtual void RenderImmediate(NiRenderer* pkRenderer);


	/// 평면 4 정점들의 컬러 변경 
	void SetColor( const NiColorA& color );

	void SetAlpha( float alpha );

	/// 평면의 사이즈 조정
	void ReSize( unsigned int width, unsigned int height );

	/// 평면의 사이즈 스케일
	void ReScale( float scaleX, float scaleY );

	/// 정점들의 UV 좌표 변경
	void SetTextureRect( float left, float top, float right, float bottom );

protected:
	/// 화면에 출력되어야 하는 경우에 대한 처리
	void OnUpdate( NiCamera* pcamera );

	/// 바운딩 갱신..
	virtual void UpdateWorldBound();

	/// 빌보드 회전을 계산
	void RotateToCamera( const NiCamera* pCamera );

protected:
	cDepthPlaneData* Data();
	const cDepthPlaneData* Data() const;
};

inline cDepthPlaneData* cDepthPlaneObject::Data()
{
	cDepthPlaneData* p = NiSmartPointerCast(cDepthPlaneData,m_spModelData);

	return p;
}
inline const cDepthPlaneData* cDepthPlaneObject::Data() const
{
	cDepthPlaneData* p = NiSmartPointerCast(cDepthPlaneData,m_spModelData);

	return p;
}

inline void cDepthPlaneObject::RenderImmediate(NiRenderer* pkRenderer)
{
	NiTriShape::RenderImmediate( pkRenderer );
}
