public override void ComponentStart()
        {
            if (!UnityUtils.Exists(bulletPrefab))
            {
                Debug.LogWarning($"No bullet prefab specified for {gameObject.name}!");
            }

            if (!Positions.Any())
            {
                Debug.LogError($"Enemy shooter named '{gameObject.name}' doesn't have any predefined positions and his behavior will not work right.");
            }

            var brain = GetRequiredComponent <HumanoidNPCBrainComponent>();

            if (!UnityUtils.Exists(brain))
            {
                throw new UnityException($"Unable to find a HumanoidNPCBrain on {gameObject.name}");
            }

            brain.attackByPlayer.AddListener(OnAttackedByPlayer);
            brain.attackBegin.AddListener(OnAttackBegin);
            brain.attackEnd.AddListener(OnAttackEnd);
            brain.damageEnable.AddListener(OnDamageEnable);
            brain.damageDisable.AddListener(OnDamageDisable);

            var brainTimerPrefabTemp = new GameObject();

            brainTimerPrefabTemp.AddComponent <IntervalTimerComponent>();
            var inst = Instantiate(brainTimerPrefabTemp, transform);

            inst.name = "BrainTimer";

            brainTimer       = GetRequiredComponent <IntervalTimerComponent>(inst);
            brainTimer.Label = "BrainTimerComponent";
            brainTimer.SetInterval((int)UnityEngine.Random.Range(thinkTimeMin, thinkTimeMax));
            brainTimer.SelfDestruct = false;
            brainTimer.Randomize    = false;
            brainTimer.AutoReset    = true;
            brainTimer.OnIntervalReached.AddListener(BrainUpdate);

            shooterAnimator = GetRequiredComponent <ShooterSkeletonAnimatorComponent>();

            if (!UnityUtils.Exists(shooterAnimator))
            {
                throw new UnityException($" {gameObject.name} requires a shooter skeleton animator and you don't have that.");
            }

            Destroy(brainTimerPrefabTemp);

            currentSeekedPosition = FindNearestShooterPosition();

            base.ComponentStart();
        }
        public override void ComponentStart()
        {
            if (!UnityUtils.Exists(bulletPrefab))
            {
                Debug.LogWarning($"No bullet prefab specified for {gameObject.name}!");
            }


            var brain = GetRequiredComponent <HumanoidNPCBrainComponent>();

            brain.attackBegin.AddListener(OnAttackBegin);
            brain.attackByPlayer.AddListener(OnAttackedByPlayer);

            var brainTimerPrefabTemp = new GameObject();

            brainTimerPrefabTemp.AddComponent <IntervalTimerComponent>();
            var inst = Instantiate(brainTimerPrefabTemp, transform);

            inst.name = "BrainTimer";

            brainTimer       = GetRequiredComponent <IntervalTimerComponent>(inst);
            brainTimer.Label = "BrainTimerComponent";
            brainTimer.SetInterval((int)UnityEngine.Random.Range(thinkTimeMin, thinkTimeMax));
            brainTimer.SelfDestruct = false;
            brainTimer.Randomize    = false;
            brainTimer.AutoReset    = true;
            brainTimer.OnIntervalReached.AddListener(BrainUpdate);

            shooterAnimator = GetRequiredComponent <ShooterSkeletonAnimatorComponent>();

            if (!IsFacingRight)
            {
                shooterAnimator.FaceTowardsPosition(transform.position.x - 1);
            }

            Destroy(brainTimerPrefabTemp);

            base.ComponentStart();
        }