internal void Initialize(UDEEnemy originEnemy, UDEAbstractBullet[] bulletPrefabs, Func <LambdaShotPattern, List <UDEAbstractBullet>, UDEEnemy, IEnumerator> pattern, RemoveBulletsOnDeath removeBulletsOnDeath)
        {
            this.patternFunc = pattern;
            patternBullets   = new List <UDEAbstractBullet>();
            patternBullets.AddRange(bulletPrefabs);
            this.removeBullets = removeBulletsOnDeath;

            base.Initialize(originEnemy);
        }
        public void Initialize(Func <LambdaShotPattern, List <UDEAbstractBullet>, UDEEnemy, IEnumerator> pattern, int health, RemoveBulletsOnDeath removeBulletsOnDeath, params UDEAbstractBullet[] bulletPrefabs)
        {
            GameObject patternObj = new GameObject("lambdaPattern", typeof(LambdaShotPattern));

            patternObj.transform.parent = this.transform;

            LambdaShotPattern patternScrpt = patternObj.GetComponent <LambdaShotPattern>();

            patternScrpt.Initialize(this, bulletPrefabs, pattern, removeBulletsOnDeath);

            this.shotPatterns = new List <ShotPattern>();
            shotPatterns.Add(new ShotPattern()
            {
                health = health, shotPattern = patternScrpt
            });

            base.Initialize();
        }