#include "scripts/common.txt"

const array<int> BPBeetleMeleeAnims = {anim_aiMelee1, anim_aiRangeAttack1};

class TurokBPBeetle : TurokBPEnemy
{
	float meleeRange = 93.36f;
	float minAttackDelay = 0.0f; //in seconds
	float maxAttackDelay = 0.0f; //in seconds
	
	float curAttackTime = 0.0f;
	bool isAttacking = false;
	//------------------------------------------------------------------------------------------------------------------------
    TurokBPBeetle(kActor @actor) {
        super(actor);
    }
	//------------------------------------------------------------------------------------------------------------------------
	void OnTickStart() {
		TurokBPEnemy::OnTickStart();
		curAttackTime = Math::RandRange(minAttackDelay, maxAttackDelay);
		animSpeed = 4.0f;
	}
	//------------------------------------------------------------------------------------------------------------------------
    void OnTick() {
		TurokBPEnemy::OnTick();

		if (Debug::IsActorsDisabled()) {
			return;
		}
		
		isAttacking = IsAttacking();
		if (IsDead()) {
			return;
		}
		
		AIStandard();
	}
	//------------------------------------------------------------------------------------------------------------------------
	void AIStandard() {
		if (!HasTarget()) {
			return;
		}
		kVec3 targetPos = self.GetTarget().Origin();
		
		if (!isAttacking) {
			curAttackTime = Math::Maxf(curAttackTime - GAME_DELTA_TIME, 0.0f);
		}
		
		if (CanAttack()) {
			float targetDist = Math::Sqrt(self.DistanceToPoint(targetPos));
			if (targetDist <= meleeRange) {
				curAttackTime = Math::RandRange(minAttackDelay, maxAttackDelay);
				PlayRandomAnimation(BPBeetleMeleeAnims);
			}
		}
	}
	//------------------------------------------------------------------------------------------------------------------------
	bool CanAttack() {
		return (!isAttacking and curAttackTime <= 0);
	}
	//------------------------------------------------------------------------------------------------------------------------
	bool IsAttacking() {
		int animID = self.AnimState().PlayingID();
		if (BPBeetleMeleeAnims.find(animID) >= 0) {
			return true;
		}
		return false;
	}
	//------------------------------------------------------------------------------------------------------------------------
    void OnDeath(kActor @killer, kDictMem @damageDef) {
		TurokBPEnemy::OnDeath(@killer, @damageDef);
        self.AnimSpeed() = 4.0f;
    }
	//------------------------------------------------------------------------------------------------------------------------
}
