/**
 * @file
 * @brief Sprite3D実装クラス関連の定義を行う.
 * 
 * 
 * @author S.F.
 * @version $Id:
 *
 * Copyright (C) 2000-2002 Satoshi Fujiwara. All Rights Reserved.
 */

/// 重複インクルード防止マクロ
#if !defined(AFX_SPRITE3D_H__AA321D29_F334_4A4F_A2DC_76B6891F09A7__INCLUDED_)
#define AFX_SPRITE3D_H__AA321D29_F334_4A4F_A2DC_76B6891F09A7__INCLUDED_

#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000
#include "sf.h" 
#include "AbstractSprite.h"
extern "C" {
namespace sf {
	namespace system {
		namespace console {
			namespace sprite {
				/** 3Dスプライト. 
				 3Dスプライト用のテクスチャを保持するオブジェクトです */
				class Sprite3D : public AbstractSprite  
				{
				public:
					// LIFECYCLE //
					/** コンストラクタ
					 * @param pD3DDevice Direct3D デバイスのポインタ */
					Sprite3D(LPDIRECT3DDEVICE9 pD3DDevice);
					/** デストラクタ */
					virtual ~Sprite3D();
					// OPERATIONS //
					void initialize(void);
					void initialize(LPDIRECT3DDEVICE9	pD3DDevice);
					void uninitialize(void);
					void load(const sprite::Info *pInfo,const D3DFORMAT textureFormat,const COLOR color);
					
					void draw(const ObjRectangle * const pObj){return;}
					void draw(const ObjQuadrangle * const pObj){return;}
					void draw(const Obj3DL * const pObj);
					const float width(void) const
					{
						if(mCellWidth != 0.0f)
							return mCellWidth;
						return mWidth;
					};

					const float height(void) const {
						if(mCellHeight != 0.0f)
							return mCellHeight;
						return mHeight;
					};

				private:
					IDirect3DTexture9* mpSpriteTexture;///< スプライトテクスチャ
					IDirect3DVertexBuffer8* mpSprite3DVtBuf;///< スプライト用Vertexバッファ

					float mCellWidth;///< セルの幅(テクスチャはこの幅で論理的に分割される)
					float mCellHeight;///< セルの高さ(テクスチャはこの高さで論理的に分割される)
					float mCellCount;///< セルの数(論理的に分割された後のテクスチャの数）
						
				};
			}
		}
	}
}
}
#endif // !defined(AFX_SPRITE3D_H__AA321D29_F334_4A4F_A2DC_76B6891F09A7__INCLUDED_)
