#include "Monster.h"
#include "MonsterStrategyHelpers.h"
#include "DEFINES.h"
#include "Crawler.h"
#include "utils.h"
#include "MonsterAttribute.h"

typedef Attribute A;

INCLUDE_game
INCLUDE_BULLET_LIST

void Monster::STRATEGY::TURRET(Monster&m,float fElapsedTime,int strategyNumber){
	m.attackCooldownTimer=std::max(0.f,m.attackCooldownTimer-fElapsedTime);
	if(m.F(A::SHOOT_ANIMATION_TIME)>0){
		m.F(A::SHOOT_ANIMATION_TIME)=std::max(0.f,m.F(A::SHOOT_ANIMATION_TIME)-fElapsedTime);
		if(m.F(A::SHOOT_ANIMATION_TIME)==0){
			m.PerformIdleAnimation();
		}
	}

	if(m.queueShotTimer>0){
		m.queueShotTimer-=fElapsedTime;
		if(m.queueShotTimer<0){
			m.queueShotTimer=0;
			BULLET_LIST.push_back(std::make_unique<Bullet>(Bullet(m.pos + vf2d{ 0,-4 }, geom2d::line(m.pos + vf2d{ 0,-4 }, game->GetPlayer()->GetPos()).vector().norm() * 24 * ConfigInt("BulletSpeed")/100.f, 12.f*ConfigInt("BulletSize")/100.f, m.GetAttack(),m.upperLevel,false, { uint8_t(ConfigIntArr("BulletColor",0)),uint8_t(ConfigIntArr("BulletColor",1)),uint8_t(ConfigIntArr("BulletColor",2)),uint8_t(ConfigIntArr("BulletColor",3) )},{ConfigInt("BulletSize")/100.f*8,ConfigInt("BulletSize")/100.f*8})));
		}
	}

	auto dist=geom2d::line(m.GetPos(),game->GetPlayer()->GetPos()).length();
	if(dist<ConfigInt("Range")/100.f*24){
		if(m.attackCooldownTimer==0){
			m.attackCooldownTimer=ConfigFloat("ShootingSpeed");
			m.queueShotTimer=std::min(m.attackCooldownTimer-0.001,0.3);
			m.F(A::SHOOT_ANIMATION_TIME)=ConfigIntArr("ShootAnimation",0)*ConfigFloatArr("ShootAnimation",1);
			m.PerformShootAnimation();
		}
	}
}