#include ".\Brute.h"

Brute::Brute( CharacterManager* characterManager, CollisionManager* collisionManager, TextManager* newText, DialogueManager* newDialogue, int tileX, int tileY, int dialogue ) : Character( characterManager, collisionManager, newText, newDialogue, tileX, tileY, dialogue ){
	init(tileX, tileY);
}

Brute::Brute( CharacterManager* characterManager, CollisionManager* collisionManager, TextManager* newText, DialogueManager* newDialogue, int tileX, int tileY, int triggerId, int dialogue ) : Character( characterManager, collisionManager, newText, newDialogue, tileX, tileY, triggerId, dialogue ){
	init(tileX, tileY);
}

Brute::~Brute(void){
}

void Brute::init(int tileX, int tileY){
	RECT* boundingBox = new RECT();
	boundingBox->left =	7;
	boundingBox->top = 39;
	boundingBox->right = 53;
	boundingBox->bottom = 59;
    addSpriteState(0, 0, 2, boundingBox, 64, 64, Character::STATE::WALKING);

	setHeadTextureId( 72 );
    pushState(Character::STATE::CREATION);
    setClip( GameCore::DIRECTION::DOWN );
	setTextureId( 81, tileX, tileY, 256, 128, boundingBox );

	HP = 20;
	HP_MAX = HP;

	setPosition( tileX, tileY, boundingBox );
	
	characterSprite->setModulationColor( D3DCOLOR_RGBA( 255, 255, 255, 0 ) );
}

void Brute::collide(Character* moveChar ) {
    if( moveChar->getType() == Character::MAIN && dialogue >= 0 ) {
        dialogueManager->addDialogue(dialogue, characterHeadSprite);
    }
}

Character::TYPE Brute::getType() {
	return Character::TYPE::WORLDPERSON;
}

void Brute::setSpriteState( Character::STATE aState ) {
    switch(aState){
        case Character::STATE::ATTACK:
	        currentSpriteState = getSpriteState(Character::STATE::WALKING);
            break;
        case Character::STATE::ATTACK_READY:
            currentSpriteState = getSpriteState(Character::STATE::WALKING);
            break;
        case Character::STATE::ATTACKED:
            currentSpriteState = getSpriteState(Character::STATE::WALKING);
            break;
        case Character::STATE::CREATION:
            currentSpriteState = getSpriteState(Character::STATE::WALKING);
            break;
        case Character::STATE::DEAD:
            currentSpriteState = getSpriteState(Character::STATE::WALKING);
            break;
        case Character::STATE::DYING:
            currentSpriteState = getSpriteState(Character::STATE::WALKING);
            break;
        case Character::STATE::IDLE:
            currentSpriteState = getSpriteState(Character::STATE::WALKING);
            break;
        case Character::STATE::WALKING:
            currentSpriteState = getSpriteState(Character::STATE::WALKING);
            break;
    }
}

void Brute::creation(){
	//GameError("female mage: creation");
	if( alpha < 256 ) {
		alpha += 64;
	    characterSprite->setModulationColor( D3DCOLOR_RGBA( 255, 255, 255, alpha ) );
	} else {
        // give initial path to target
		/*
	    POINT* p = new POINT();
    	p->x = 88;
	    p->y = 510;
    	getPathTo(p);
		*/
		characterSprite->setModulationColor( D3DCOLOR_RGBA( 255, 255, 255, 255 ) );
        pushState(Character::STATE::IDLE);
	}
}

void Brute::idle(){
	//GameError("female mage: idle");
    if(path->size() > 0){
        pushState(Character::STATE::WALKING);
    }
}

void Brute::walking(){
	//GameError("female mage: walking");
    if( path->size() > 0 ){
        if(ticksPassed > 120){
			/*
	        POINT* p = new POINT();
	        p->x = 25;
	        p->y = 25;
            getPathTo(p);
			*/
            ticksPassed = 0;
        }
        //moveToNextPointInPath();
        animateSprite(Character::SPEED::FIFTH);
    } else {
        popState();
    }
}

void Brute::dying(){
	//GameError("female mage: dying");
	if( alpha > 0 ) {
		alpha -= 32;
	    characterSprite->setModulationColor( D3DCOLOR_RGBA( 255, 255, 255, alpha ) );
        move( GameCore::DIRECTION::UP, GameCore::DIRECTION::DOWN );
        move( GameCore::DIRECTION::UP, GameCore::DIRECTION::DOWN );
	} else {
        pushState(Character::STATE::DEAD);
	}
}

void Brute::attacked(){
	//GameError("female mage: attacked");
    GameCore::DIRECTION move;
    if(attackedFrom == GameCore::DIRECTION::DOWN){
        move = GameCore::DIRECTION::UP;
    } else if(attackedFrom == GameCore::DIRECTION::UP){
        move = GameCore::DIRECTION::DOWN;
    } else if(attackedFrom == GameCore::DIRECTION::LEFT){
        move = GameCore::DIRECTION::RIGHT;
    } else if(attackedFrom == GameCore::DIRECTION::RIGHT){
        move = GameCore::DIRECTION::LEFT;
    }
	characterManager->moveCharacter( this, attackedFrom );
	characterManager->moveCharacter( this, attackedFrom );
    if( (attackedFrom == GameCore::DOWN) || (attackedFrom == GameCore::UP)){
	    characterManager->moveCharacter( this, attackedFrom );
	    characterManager->moveCharacter( this, attackedFrom );
    } 
	setClip( move );
    if( getHP() <= 0 ) {
	    pushState( Character::DYING );
	} else {
		popState();
	}
}

void Brute::attack(){
	//GameError("female mage: attack");
}

void Brute::attackReady(){
	//GameError("female mage: attack ready");
}

void Brute::dead(){
	//GameError("female mage: me dead");
}

void Brute::magic() {
}

void Brute::casting() {
}
