// ================================================================
// Filename: D3DCube.h
// Description: 3D Cube class, derived from CD3DObject. Enables
//				quick and easy creation of a texturemapped cube
//
//				This source corresponds to 32Bits.co.uk DirectX
//				Basics Series 3 part 5.
// ================================================================

#ifndef _D3DCUBE_H
#define _D3DCUBE_H

#include "CD3DObject.h"

// =================================================================================
// Vertex struct and FVF for our Cube Class
// =================================================================================

// Note that we expect this cube to be lit, so there is no diffuse colour in our struct

typedef struct _tagCubeVertex
{
	D3DVECTOR	vPos;
	D3DVECTOR	vNormal;
	float		tu, tv;

} CUBEVERTEX;

#define D3DFVF_CUBE (D3DFVF_XYZ | D3DFVF_NORMAL | D3DFVF_TEX1 | D3DFVF_TEXCOORDSIZE2(1))


// =================================================================================
// Cube Class
// =================================================================================

class CD3DCube : public CD3DObject
{
private:
	
	CUBEVERTEX				m_Vertices[36];		// 36 vertices: 3 verts per tri, 2 tris per face = 6,
												// 6 faces = 36 vertices.
	LPDIRECT3DTEXTURE8		m_pTexture;			// texture surface for texturemapping
	LPDIRECT3DVERTEXBUFFER8	m_pVertexBuffer;	// Vertex buffer for our vertices

public:

	CD3DCube();
	virtual ~CD3DCube();

	// Initialise method to create the cube's vertices
	HRESULT Initialise(float Width, float Height, float Depth, float x, float y, float z,
					   LPDIRECT3DDEVICE8& pDevice);

	// Overloaded SetTexture() method to allow use of a new texture, or an existing texture
	HRESULT SetTexture(LPDIRECT3DTEXTURE8 pTexture);
	HRESULT SetTexture(char* strTexturePath, LPDIRECT3DDEVICE8& pDevice);
	
	// Derived Render() method
	HRESULT Render(LPDIRECT3DDEVICE8& pDevice, LPDIRECT3DSURFACE8& pRenderSurface);

	HRESULT RestoreVolatile(){return 0;}
	HRESULT ReleaseVolatile(){return 0;}

};

#endif // _D3DCUBE_H