#include ".\FemaleMage.h"

FemaleMage::FemaleMage( 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);
}

FemaleMage::FemaleMage( 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);
}

FemaleMage::~FemaleMage(void){
}

void FemaleMage::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( 86 );
    pushState(Character::STATE::CREATION);
    setClip( GameCore::DIRECTION::DOWN );
	setTextureId( 17, tileX, tileY, 256, 128, boundingBox );

	HP = 20;
	HP_MAX = HP;

	setPosition( tileX, tileY, boundingBox );
	
	characterSprite->setModulationColor( D3DCOLOR_RGBA( 255, 255, 255, 0 ) );
}

void FemaleMage::collide(Character* moveChar ) {
    if( moveChar->getType() == Character::MAIN && dialogue >= 0 ) {
        dialogueManager->addDialogue(dialogue, characterHeadSprite);
    }
}

Character::TYPE FemaleMage::getType() {
	return Character::TYPE::TOWNPERSON;
}

void FemaleMage::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 FemaleMage::creation(){
//GameError("FemaleMage: creation");
	if( alpha < 256 ) {
		alpha += 64;
	    characterSprite->setModulationColor( D3DCOLOR_RGBA( 255, 255, 255, alpha ) );
	} else {
		characterSprite->setModulationColor( D3DCOLOR_RGBA( 255, 255, 255, 255 ) );
        pushState(Character::STATE::IDLE);
	}
}

void FemaleMage::idle(){
//GameError("FemaleMage: idle");
   animateSprite(Character::SPEED::FIFTH);
}

void FemaleMage::walking(){
//GameError("FemaleMage: walking");
    if ( yOffset > currentSpriteState->numFrames ){
        popState();
    } else {
        animateSprite(Character::SPEED::FIFTH);
    }
}

void FemaleMage::dying(){
//GameError("FemaleMage: 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 FemaleMage::attacked(){
//GameError("FemaleMage: 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 FemaleMage::attack(){
//GameError("FemaleMage: attack");
}

void FemaleMage::attackReady(){
//GameError("FemaleMage: attack ready");
}

void FemaleMage::dead(){
//GameError("FemaleMage: me dead");
}

void FemaleMage::magic() {
}

void FemaleMage::casting() {
}
