IEnumerator SpawnStrikePoint()
    {
        strikesRemaining = numberOfStrikes;
        float spawnRate = spawnRate1;

        while (strikesRemaining > 0)
        {
            float   x            = Random.Range(minX, maxX);
            float   z            = Random.Range(minZ, maxZ);
            Vector3 randPosition = new Vector3(x, yPosition, z);
            lastSpawned = Instantiate(strikePointPrefab, randPosition, Quaternion.identity);

            if (weaponStage == weaponStages.phase2)
            {
                spawnRate = spawnRate2;
            }
            else if (weaponStage == weaponStages.phase3)
            {
                spawnRate = spawnRate3;
            }
            yield return(new WaitForSeconds(spawnRate));

            if (lastSpawned)
            {
                Debug.Log("Player SKIPPED last StrikePoint");
                DestroyObject(lastSpawned);
                skips++;
                misses++;
                missText.text = misses.ToString();
                // progress bar penalty
            }
            strikesRemaining--;
            float pctLeft = ((float)strikesRemaining / (float)numberOfStrikes) * 100f;
            Debug.Log("pctLeft=" + pctLeft);
            if (pctLeft < 33f && weaponStage == weaponStages.phase2)
            {
                Destroy(thisWeapon);
                weaponStage = weaponStages.phase3;
                thisWeapon  = Instantiate(weapon.stage3, weaponTransform.position, weaponTransform.rotation);
            }
            else if (pctLeft < 66f && weaponStage == weaponStages.phase1)
            {
                Destroy(thisWeapon);
                weaponStage = weaponStages.phase2;
                thisWeapon  = Instantiate(weapon.stage2, weaponTransform.position, weaponTransform.rotation);
            }
        }

        EvaluateQuality();
    }
    public void StartSpawning()
    {
        hits   = 0;
        misses = 0;
        skips  = 0;

        hitText.text  = hits.ToString();
        missText.text = misses.ToString();

        weaponStage = weaponStages.phase1;
        float strikes   = numberOfStrikes / 3;
        float totalTime = spawnRate1 * strikes + spawnRate2 * strikes + spawnRate3 * strikes;

        Debug.Log("totalTime=" + totalTime);
        progressBar.rate = totalTime;
        StartCoroutine(SpawnStrikePoint());
    }