#include "EnemyBulletSmart.h"
#include "Player.h"


USING_NS_CC;

bool EnemyBulletSmart::init(){
	if (!Sprite::init()){
		return false;
	}
	setSpriteFrame(SpriteFrameCache::getInstance()->getSpriteFrameByName("disparo_persecutor"));
	_enemyTarget = nullptr;
	_speed = 130;
	

	setVisible(false);
	schedule(schedule_selector(EnemyBullet::update));
	return true;
}



void EnemyBulletSmart::update(float dt){
	if (!this->isVisible()) return;
	//hacer que el sprite rote como una estrella ninja
	setRotation(getRotation() + 360 / 0.5 * dt);
	if (getPositionY()+getBoundingBox().size.height*0.5 < 0){
		setVisible(false);
	}

	if (getBoundingBox().intersectsRect(_enemyTarget->getBoundingBox()) &&
		_enemyTarget->isVisible() && _enemyTarget->getCurrentAnimation() != Player::Animations::EXPLOSION){
		//colision	
		_enemyTarget->setHealth(_enemyTarget->getHealth() - 1);
		_enemyTarget->runHitEffect();
		setVisible(false);
	}
}



void EnemyBulletSmart::setVisible(bool visible)
{
	Sprite::setVisible(visible);
	if (visible){
		//si la bala se activa (es disparada) se dirigira
		//a la posicion del jugador.
		_targetPosition = _enemyTarget->getPosition();
		if (getPositionY() < _targetPosition.y || !_enemyTarget->isVisible()){
			_targetPosition = getPosition();
		}
		auto moveTo = MoveTo::create(3, Point(_targetPosition.x, 0 - getBoundingBox().size.height));
		moveTo->setTag(0);
		runAction(moveTo);
	}
	else{
		//si se desactiva la bala para la accion.
		stopActionByTag(0);
	}
}