#include "scripts/common.txt"

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

class TurokBPStalker : TurokBPEnemy
{
	float meleeRange = 93.36f;
	float minAttackDelay = 0.0f; //in seconds
	float maxAttackDelay = 0.0f; //in seconds
	
	float curAttackTime = 0.0f;
	bool isAttacking = false;
	//------------------------------------------------------------------------------------------------------------------------
    TurokBPStalker(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;
		}
		
		// Debug::CheckAnimations(self);
		
		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(BPStalkerMeleeAnims);
			}
		}
	}
	//------------------------------------------------------------------------------------------------------------------------
	bool CanAttack() {
		return (!isAttacking and curAttackTime <= 0);
	}
	//------------------------------------------------------------------------------------------------------------------------
	bool IsAttacking() {
		int animID = self.AnimState().PlayingID();
		if (BPStalkerMeleeAnims.find(animID) >= 0) {
			return true;
		}
		return false;
	}
	//------------------------------------------------------------------------------------------------------------------------
    void DeathSound(kActor @instigator, const float w, const float x, const float y, const float z)
    {
        self.PlaySound("sounds/shaders/leaper_death.ksnd");
    }
	//------------------------------------------------------------------------------------------------------------------------
    void InjurySound(kActor @instigator, const float w, const float x, const float y, const float z)
    {
        self.PlaySound("sounds/shaders/leaper_injury.ksnd");
    }
	//------------------------------------------------------------------------------------------------------------------------
    void ViolentSound(kActor @instigator, const float w, const float x, const float y, const float z)
    {
        self.PlaySound("sounds/shaders/leaper_violent_death.ksnd");
    }
	//------------------------------------------------------------------------------------------------------------------------
}
