protected override void OnAttack()
    {
        if (projectilePrefab != null)
        {
            ProjectionPattern pattern = customProjectionPattern;

            if (pattern == null)
            {
                if (_currentProjectionShape != projectionShape)
                {
                    SetCurrentProjectionShape();
                }

                pattern = _currentProjectionPattern;
            }

            Vector3 forwardDirection  = CalculateAttackDirection();
            float   forwardAngle      = CalculateAttackAngle();
            int     amountProjectiles = GetAmountOfProjectiles();

            pattern.StartProjection(amountProjectiles);

            for (int i = 0; i < amountProjectiles; i++)
            {
                pattern.Project(CreateProjectile(), forwardDirection, forwardAngle, i);
            }

            pattern.EndProjection();
        }
    }
 protected override void OnDispose()
 {
     projectilePrefab          = null;
     customProjectionPattern   = null;
     _currentProjectionPattern = null;
 }
 private void SetCurrentProjectionShape()
 {
     _currentProjectionShape   = projectionShape;
     _currentProjectionPattern = (ProjectionPattern)_projectionPatterns[projectionShape];
 }