#pragma once

#include "SpriteStamp.h"
#include "TileStamp.h"
#include "GameCore.h"
#include "TextureManager.h"
#include "ScreenManager.h"

class ScreenManager;

class SpriteRenderer
{
public:
	SpriteRenderer();
	~SpriteRenderer();
	// initialize
	HRESULT init( LPDIRECT3DDEVICE9 newd3dDevice, TextureManager* textureManager, ScreenManager* screenManager );
    // render spritestamp or texture
	HRESULT renderToScreen( int textureId, int x, int y );
	HRESULT renderSpriteToScreen( SpriteStamp* aStamp );
	HRESULT renderSpriteToWorld( SpriteStamp* aStamp );
    HRESULT renderSpriteToWorld( SpriteStamp* aStamp, RECT* clippingRect );
	HRESULT renderTile( TileStamp* aTile );
	HRESULT renderTint( int textureId, int red, int green, int blue, int alpha );

    HRESULT beginSprite();
    HRESULT endSprite();

    HRESULT setIdentityMatrix();
    HRESULT setScaleMatrix(float scaleX, float scaleY);

    TextureManager*  getTextureManager();

private:
	LPD3DXSPRITE    spriteBrush;    // direct x sprite
	TextureManager* textureManager; // reference to texture manager
	D3DXVECTOR3*    position;       // positoin of where sprite should be put
	ScreenManager*  screenManager;  // reference to screen manager
    D3DXMATRIX*     transform;      //transformation matrix
};
