/*
 * Link.cpp
 *
 *  Created on: 21 févr. 2017
 *      Author: sylvain
 */

#include "Link.h"


Link::Link() {

    state = STAND;
    life = 3;
    pos.x=100;
    pos.y=100;

    //Init sprites
    QList<QString> list = QList<QString>();

    list.append(":/media/sprites/LinkD1.png");
    list.append(":/media/sprites/LinkD2.png");

    animDown = Animator(list);
    list.clear();

    list.append(":/media/sprites/LinkL1.png");
    list.append(":/media/sprites/LinkL2.png");

    animLeft = Animator(list);
    list.clear();

    list.append(":/media/sprites/LinkU1.png");
    list.append(":/media/sprites/LinkU2.png");
    animUp = Animator(list);
    list.clear();

    list.append(":/media/sprites/LinkR1.png");
    list.append(":/media/sprites/LinkR2.png");
    animRight = Animator(list);

    list.clear();

    list.append(":/media/sprites/AttackD1.png");
    list.append(":/media/sprites/AttackD2.png");
    attackDown= Animator(list);

    list.clear();
    list.append(":/media/sprites/AttackL1.png");
    list.append(":/media/sprites/AttackL2.png");
    attackLeft= Animator(list);

    list.clear();
    list.append(":/media/sprites/AttackU1.png");
    list.append(":/media/sprites/AttackU2.png");
    attackUp= Animator(list);

    list.clear();
    list.append(":/media/sprites/AttackR1.png");
    list.append(":/media/sprites/AttackR2.png");
    attackRight= Animator(list);

    currentAnimation = &animDown;
    currentAnimation->begin();
}

Link::~Link() {
	// TODO Auto-generated destructor stub
}

void Link::updateLink(void){

    linkImage = currentAnimation->current();

}

void Link::moveDown(void){

    if (dir!=SOUTH){
        currentAnimation = &animDown;
        dir = SOUTH;
        state = STAND;
    }

    currentAnimation->next();
    pos.y+=2;
}

void Link::moveLeft(void){

    if (dir!=WEST){
        currentAnimation = &animLeft;
        dir = WEST;
        state = STAND;

    }

    currentAnimation->next();
    pos.x-=2;
}

void Link::moveRight(void){

    if (dir!=EAST){
        currentAnimation = &animRight;
        dir = EAST;
        state = STAND;

    }

    currentAnimation->next();
    pos.x+=2;
}

void Link::moveUp(void){

    if (dir!=NORTH){
        currentAnimation = &animUp;
        dir = NORTH;
        state = STAND;

    }

    currentAnimation->next();
    pos.y-=2;
}

void Link::stop(void){
    //reset animation to first frame
    currentAnimation->begin();
}

int Link::getLife(void){
    return life;
}

int Link::getXPos(void){
    return pos.x;
}

int Link::getYPos(void){
    return pos.y;
}

Direction Link::getDir(void){
    return dir;
}

Action Link::getAct(void){
    return state;
}

void Link::setAct(Action a){
    state = a;
}
void Link::setLife(int life){
    this->life=life;
}

void Link::attackGeneric(void){
    switch (dir){
    case EAST:
        attackR();
        break;
    case WEST:
        attackL();
        break;
    case SOUTH:
        attackD();
        break;
    case NORTH:
        attackU();
        break;
    }
}

void Link::attackR(void){
    currentAnimation = &attackRight;
    if (state!=ATTACK)
    {
        state = ATTACK;
        currentAnimation->begin();

    }
    else
     currentAnimation->next();
}
void Link::attackD(void){
    state = ATTACK;
       currentAnimation = &attackDown;
    currentAnimation->next();
}

void Link::attackU(void){
        state = ATTACK;
        currentAnimation = &attackUp;
     currentAnimation->next();
}
void Link::attackL(void){
    state = ATTACK;
       currentAnimation = &attackLeft;
    currentAnimation->next();
}
