private void FireProjectile()
 {
     var color = _projectileColors.Dequeue();
     var info = _projectileQueue[color];
     var projectileToFire = info.Item2.Next();
     var cInfo = offsets.First(c=>c.color == color);
     projectileToFire.transform.position = new Vector3(_transform.position.x, _transform.position.y + cInfo.offset,
                                                       cInfo.zOffset);
     projectileToFire.Launch(info.Item1.speed, ForceMode);
     projectileToFire.CurrentRail = _currentRail;
     if (!fired.Contains(color))
     {
         Debug.Log("Sending First Fired " + color);
         delayMessage = new ProjectileFirstFiredMessage(color);
         Invoke("SendDelayedMessage", 1);
         fired.Add(color);
     }
 }
 private void OnFirstFired(ProjectileFirstFiredMessage obj)
 {
     if (obj.Color == ProjectileColor.Red && (IgnoreTutorialPref || !PlayerPrefs.HasKey("TutorialOne")))
     {
         Time.timeScale = 0;
         Screen.lockCursor = false;
         PlayerPrefs.SetInt("TutorialOne", 1);
         TutorialMenu.Show(Tutorial.Red);
     }
     else if (obj.Color == ProjectileColor.Green && (IgnoreTutorialPref || !PlayerPrefs.HasKey("TutorialTwo")))
     {
         Time.timeScale = 0;
         Screen.lockCursor = false;
         PlayerPrefs.SetInt("TutorialTwo", 1);
         TutorialMenu.Show(Tutorial.Green);
     }
     else if (obj.Color == ProjectileColor.Blue && (IgnoreTutorialPref || !PlayerPrefs.HasKey("TutorialThree")))
     {
         Time.timeScale = 0;
         Screen.lockCursor = false;
         PlayerPrefs.SetInt("TutorialThree", 1);
         TutorialMenu.Show(Tutorial.Blue);
     }
 }