//@STATE=嶌惉拞
//@DESCRIPTION ---------------------------------------------------------------
// AbstractCharacter.h: AbstractCharacter 僋儔僗偺僀儞僞乕僼僃僀僗
//	棜楌丗
// $Log: AbstractCharacter.h,v $
// Revision 1.1  2001/10/28 21:40:34  fujiwara
// DLL偵暘妱
//
// Revision 1.4  2001/07/09 20:30:07  fujiwara
// 椺奜張棟偺慻傒崬傒
//
// Revision 1.3  2001/07/01 01:03:43  fujiwara
// const 偺尒捈偟
// 攝抲僄僨傿僞偼搑拞宱夁
//
// Revision 1.2  2001/05/12 00:48:13  fujiwara
// 俠倁俽傪摫擖偟丄儘僌昞帵傪捛壛
//
//@DESCRIPTION_END -----------------------------------------------------------
//@AUTHOR=S.F.
///////////////////////////////////////////////////////////////////////////////

#if !defined(AFX_ABSTRACTCHARACTER_H__210B0A8B_5035_404F_8747_41531FD7A17A__INCLUDED_)
#define AFX_ABSTRACTCHARACTER_H__210B0A8B_5035_404F_8747_41531FD7A17A__INCLUDED_

#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000


#include "character.h"

namespace sf {
	namespace application {


// 搊応暔拪徾僋儔僗 亅亅亅亅亅亅亅亅亅亅亅亅亅亅亅亅亅亅亅亅亅亅亅亅亅亅亅亅
class AbstractCharacter : public Character {

	public:
		// LIFECYCLE //
		AbstractCharacter()
		{	mX = mY = mZ = 0.0f;
			mpGame = NULL;
			mMoveSpeed = 0.0f;
			mMoveDirection  = 0.0f;
			mLife = 0;
		};
		virtual ~AbstractCharacter(){};
		// OPERATORS //
		// OPERATIONS //
		virtual void initialize(void) = 0;
		// 僉儍儔僋僞乕堏摦
		virtual void move(void) = 0;

		virtual const bool hitCheck(Character * const pDest)
		{	if(hitObj()->check(pDest->hitObj())){
				hit(pDest);
				pDest->hit(this);
				return true;
			}
			return false;
		};

		virtual const bool hitCheck(Characters * const pDest){
			return pDest->hitCheck(this);
		};

		virtual void hit(Character * const pDest) = 0;

		// ACCESS //

		// 拞怱嵗昗
		virtual const float x(void){ return mX;};
		virtual void x(const float value){mX = value;};

		virtual const float y(void){return mY;};
		virtual void y(const float value){mY = value;};

		virtual const float z(void){return mZ;};
		virtual void z(const float value){mZ = value;};

		// 儔僀僼	
		virtual const int life(void){return mLife;};
		virtual void life(const int value){mLife = value;};
		// 堏摦僗僺乕僪
		virtual const float speed(void){return mMoveSpeed;};
		virtual void speed(const float value){mMoveSpeed = value;};
		// 堏摦曽岦 (儔僕傾儞乯
		virtual const float direction(void){return mMoveDirection;};
		virtual void direction(const float value){mMoveDirection = value;};


		virtual sf::application::hit::Interface * const hitObj(void) = 0;
			
		
		virtual sf::application::scene::Game * const game(void){ return mpGame;};
		virtual	game(sf::application::scene::Game * const value){mpGame = value;};

		virtual int index(void) { return mIndex;};
		virtual void index(int value){ mIndex = value;};
		// INQUIRY //
	private:
		float mX,mY,mZ;
		int mLife;
		float mMoveSpeed,mMoveDirection;
		int mIndex;
		sf::application::scene::Game * mpGame;
};// bullet::Abstract
	}
}
#endif // !defined(AFX_ABSTRACTCHARACTER_H__210B0A8B_5035_404F_8747_41531FD7A17A__INCLUDED_)
