#include "enemy.h"
#include <fstream>
#include <sstream>

// Constructor
Enemy::Enemy(enemy_t enemy)
{
    // Obten punteros a objetos
    asset = enemy.asset;
    renderer = enemy.renderer;

    // Crea objetos
    texture = new LTexture(renderer, asset->get(enemy.tileset));
    sprite = new AnimatedSprite(texture, renderer, asset->get(enemy.animation));

    // Obten el resto de valores
    x1 = enemy.x1;
    x2 = enemy.x2;
    y1 = enemy.y1;
    y2 = enemy.y2;
    color = enemy.color;
    sprite->setPosX(enemy.x);
    sprite->setPosY(enemy.y);
    sprite->setVelX(enemy.vx);
    sprite->setVelY(enemy.vy);
    sprite->setWidth(enemy.w);
    sprite->setHeight(enemy.h);

    collider = getRect();
}

// Destructor
Enemy::~Enemy()
{
    delete texture;
    delete sprite;
}

// Pinta el enemigo en pantalla
void Enemy::render()
{
    sprite->getTexture()->setColor(color.r, color.g, color.b);
    sprite->render();
    sprite->getTexture()->setColor(255, 255, 255);
}

// Actualiza las variables del objeto
void Enemy::update()
{
    sprite->update();
    // sprite->animate();
    checkPath();
    collider = getRect();
}

// Comprueba si ha llegado al limite del recorrido para darse media vuelta
void Enemy::checkPath()
{
    if (sprite->getPosX() > x2 || sprite->getPosX() < x1)
    {
        sprite->setVelX(sprite->getVelX() * (-1));
    }

    if (sprite->getPosY() > y2 || sprite->getPosY() < y1)
    {
        sprite->setVelY(sprite->getVelY() * (-1));
    }
}

// Devuelve el rectangulo que contiene al enemigo
SDL_Rect Enemy::getRect()
{
    return sprite->getRect();
}

// Obtiene el rectangulo de colision del enemigo
SDL_Rect &Enemy::getCollider()
{
    return collider;
}

// Recarga la textura
void Enemy::reLoadTexture()
{
    texture->reLoad();
}