#include "SpriteStamp.h"

SpriteStamp::SpriteStamp( int newTextureId, int newTotalWidth, int newTotalHeight, RECT* newBoundingBox ){
    init(newTextureId, 0, newTotalWidth, newTotalHeight, newBoundingBox);
}

SpriteStamp::SpriteStamp( int newTextureId, D3DXVECTOR3* newPosition, int newTotalWidth, int newTotalHeight, RECT* newBoundingBox ){
    init(newTextureId, newPosition, newTotalWidth, newTotalHeight, newBoundingBox );
}

SpriteStamp::~SpriteStamp(void){
	if ( position != NULL ) {
		delete position;
		position = NULL;
	}

	if ( center != NULL ) {
		delete center;
		center = NULL;
	}

	if ( clippingRect ) {
		delete clippingRect;
		clippingRect = NULL;
	}
	if ( boundingBox ) {
		delete boundingBox;
		boundingBox = NULL;
	}
}

void SpriteStamp::init(int newTextureId, D3DXVECTOR3* newPosition, int newTotalWidth, int newTotalHeight, RECT* newBoundingBox){
	totalWidth = newTotalWidth;
	totalHeight = newTotalHeight;
	textureId = newTextureId;
	position = newPosition;
	center = NULL;
	modulationColor = D3DCOLOR_RGBA(255,255,255,255);
	clippingRect = NULL;
	boundingBox = newBoundingBox;
}

Stamp::STAMP_TYPE SpriteStamp::getStampType() {
	return Stamp::SPRITE;
}

D3DXVECTOR3* SpriteStamp::getPosition() {
	return position;
}

void SpriteStamp::setPosition( D3DXVECTOR3* newPosition ) {
	position = newPosition;
}

D3DXVECTOR3* SpriteStamp::getCenter() {
	return center;
}

void SpriteStamp::setCenter( D3DXVECTOR3* newCenter ) {
	center = newCenter;
}

D3DCOLOR SpriteStamp::getModulationColor() {
	return modulationColor;
}

void SpriteStamp::setModulationColor( D3DCOLOR newColor ) {
	modulationColor = newColor;
}

RECT* SpriteStamp::getClippingRect() {
	return clippingRect;
}

void SpriteStamp::setClippingRect( RECT* newClippingRect ) {
	clippingRect = newClippingRect;
}

int SpriteStamp::getTextureId() {
	return textureId;
}

void SpriteStamp::setTextureId( int newId ) {
	textureId = newId;
}

int SpriteStamp::getTotalWidth() {
	return totalWidth;
}

void SpriteStamp::setTotalWidth( int newTotalWidth ) {
	totalWidth = newTotalWidth;
}

int SpriteStamp::getTotalHeight() {
	return totalHeight;
}

void SpriteStamp::setTotalHeight( int newTotalHeight ) {
	totalHeight = newTotalHeight;
}

SpriteStamp* SpriteStamp::clone() {
	SpriteStamp* newSpriteStamp = new SpriteStamp( textureId, 
		new D3DXVECTOR3( position->x, position->y, position->z ),
		totalWidth,
		totalHeight,
		getBoundingBox() );
	if ( center != NULL ) {
		D3DXVECTOR3* newCenter = new D3DXVECTOR3( center->x, center->y, center->z );
		newSpriteStamp->setCenter( newCenter );
	}
	D3DCOLOR newModulationColor = modulationColor;
	newSpriteStamp->setModulationColor( newModulationColor );
	if ( clippingRect != NULL ) {
		RECT* newClip = new RECT();
		newClip->bottom = clippingRect->bottom;
		newClip->left = clippingRect->left;
		newClip->right = clippingRect->right;
		newClip->top = clippingRect->top;
		newSpriteStamp->setClippingRect( newClip );
	}

	return newSpriteStamp;
}

RECT* SpriteStamp::getBoundingBox() {
	return boundingBox;
}

void SpriteStamp::setBoundingBox( RECT* newBox ) {
	boundingBox = newBox;
}

