/**
 * @file AbstractSprite.h
 * @brief Spriteインターフェースの共通実装定義を行う.
 * 
 * 派生クラスで共通で使用できそうなメソッド、メンバをここで記述します。
 * @author S.F.
 * @version $Id:
 *
 * Copyright (C) 2000-2002 Satoshi Fujiwara. All Rights Reserved.
 */

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

#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000
#include "sf.h"
#include "Console.h"

extern "C" {

namespace sf{
	namespace system{
		namespace console {
			namespace sprite {

/** Spriteインターフェースの共通実装 
 * 派生クラスはこの抽象クラスを継承し、実装します。	*/
class AbstractSprite : public Sprite  
{
public:
	/// コンストラクタ
	AbstractSprite();
	/// デストラクタ
	virtual ~AbstractSprite();
	// OPERATIONS //
	/// 初期化を行う
	virtual void initialize(void) = 0;
	/** 初期化を行う.
	 * @param pD3DDevice Direct3D　デバイスのポインタ */
	virtual void initialize(LPDIRECT3DDEVICE9	pD3DDevice) = 0;
	
	/** 終了処理を行う */
	virtual void uninitialize(void) = 0;

	/** テクスチャデータのロードを行う.
	 @param pInfo sprite::Info のポインタ 
	 @textureFormat D3DFORMAT  
	 @color console::COLOR */
	virtual void load(const sprite::Info *pInfo,const D3DFORMAT textureFormat,const COLOR color) = 0;

	/** 描画用レンダリングステートを設定する.
	 * @param value sprite::DrawMode */
	void setRenderState(const DrawMode value);
	
	// ACCESS //
	
	/** スプライトの使用状態を取得する
	 * @return スプライトの使用状態 */
	const bool use(void) const {return mbUse;};
	/** スプライトの使用状態を取得する
	 * @param value スプライトの使用状態 */
	void use(const bool value){mbUse = value;};
	
	const float width(void) const {return mWidth;};
	void  width(const float value) {mWidth = value;};
	
	const float height(void) const {return mHeight;};
	void height(const float value) {mHeight = value;};

	const float centerX(void) const {return mCenterX;};
	void centerX(const float value) {mCenterX = value;};

	const float centerY(void)  const {return mCenterY;};
	void centerY(const float value) {mCenterY = value;};


	// INQUIRY //
	/// スプライトの使用状態の取得
	const bool isUsed() const {return mbUse;};
protected:

	bool mbUse;///< 使用しているかどうか
	LPDIRECT3DDEVICE9		mpD3DDevice;///< D3Dデバイスのポインタ

	float mWidth;///< スプライトの幅
	float mHeight;///< スプライトの高さ
	float mCenterX;///< 中心X座標
	float mCenterY;///< 中心Y座標

	TYPE			mType;///< スプライトのタイプ

};
			}
		}
	}
}
}
#endif // !defined(AFX_ABSTRACTSPRITE_H__13F6E957_5370_42BC_B5F5_FEF71D80C1DE__INCLUDED_)
