#include "const.h"
#include "writer.h"

// Constructor
Writer::Writer(Text *text)
{
	// Copia los punteros
	this->text = text;

	// Inicializa variables
	posX = 0;
	posY = 0;
	kerning = 0;
	caption = "";
	speed = 0;
	writingCounter = 0;
	index = 0;
	lenght = 0;
	completed = false;
	enabled = false;
	enabledCounter = 0;
	finished = false;
}

// Destructor
Writer::~Writer()
{
}

// Actualiza el objeto
void Writer::update()
{
	if (enabled)
	{
		if (!completed)
		{ // No completado
			if (writingCounter > 0)
			{
				writingCounter--;
			}

			else if (writingCounter == 0)
			{
				index++;
				writingCounter = speed;
			}

			if (index == lenght)
			{
				completed = true;
			}
		}

		if (completed)
		{ // Completado
			if (enabledCounter > 0)
			{
				enabledCounter--;
			}
			else if (enabledCounter == 0)
			{
				finished = true;
			}
		}
	}
}

// Dibuja el objeto en pantalla
void Writer::render()
{
	if (enabled)
	{
		text->write(posX, posY, caption, kerning, index);
	}
}

// Establece el valor de la variable
void Writer::setPosX(int value)
{
	posX = value;
}

// Establece el valor de la variable
void Writer::setPosY(int value)
{
	posY = value;
}

// Establece el valor de la variable
void Writer::setKerning(int value)
{
	kerning = value;
}

// Establece el valor de la variable
void Writer::setCaption(std::string text)
{
	caption = text;
	lenght = text.length();
}

// Establece el valor de la variable
void Writer::setSpeed(int value)
{
	speed = value;
	writingCounter = value;
}

// Establece el valor de la variable
void Writer::setEnabled(bool value)
{
	enabled = value;
}

// Obtiene el valor de la variable
bool Writer::IsEnabled()
{
	return enabled;
}

// Establece el valor de la variable
void Writer::setEnabledCounter(int time)
{
	enabledCounter = time;
}

// Obtiene el valor de la variable
int Writer::getEnabledCounter()
{
	return enabledCounter;
}

// Centra la cadena de texto a un punto X
void Writer::center(int x)
{
	setPosX(x - (text->lenght(caption, kerning) / 2));
}

// Obtiene el valor de la variable
bool Writer::hasFinished()
{
	return finished;
}