/// @file RObject.h
#ifndef ROBJECT_H
#define ROBJECT_H
#include "../graphic/CoreGraphic.h"
#include "../input/CoreInput.h"
#include "../sound/OggPlayer.h"

#include "../../xml/tinyxml.h"
#include "ControlTable.h"

/**
	@brief 렌더링 가능한 게임객체 추상클래스

	렌더링이 가능한 게임객체는 RObject클래스를 상속받습니다.\n
	client는 process/draw 함수를 호출하며 세부적인 process/draw는 각각의 객체가 담당합니다.
*/
class RObject {
	public:
		RObject() : bShow(FALSE), fX(0), fY(0), fZ(0) {}
		virtual ~RObject(){}
		virtual void draw(Model* _pModel) = 0;
		virtual void process() = 0;
		virtual void setRObject(CoreGraphic* _pCoreGraphic, CoreInput* _pCoreInput, OggPlayer* _pCoreSound, ControlTable* _pControlTable) = 0;
	public:
		bool  bShow;
		float fX;
		float fY;
		float fZ;

	protected:
		//렌더링을 위한 mat자료형(RObject의 R은 Renderable이다)
		D3DXMATRIXA16 matWorld_;
		//수행결정을 위한 ControlTable
		ControlTable* pControlTable_;
};
#endif