private void RefillGames()
 {
     gamesQueue = games.ToList();
     for (int i = gamesQueue.Count - 1; i >= 0; i--)
     {
         int      j = Random.Range(0, gamesQueue.Count);
         Minigame m = gamesQueue[i];
         gamesQueue[i] = gamesQueue[j];
         gamesQueue[j] = m;
     }
 }
        public void StartGame()
        {
            if (currentGame)
            {
                currentGame.ForceEnd();
            }
            inGame            = true;
            gameWon           = false;
            playerScores      = new int[4];
            transitionStarted = false;
            scoreAdded        = false;

            respawnNodes = new List <RespawnNode>();
            goblets      = new List <Goblet>();
            gamesQueue   = new List <Minigame>();

            RespawnNode[] findNodes = FindObjectsOfType <RespawnNode>();
            for (int i = 0; i < findNodes.Length; i++)
            {
                respawnNodes.Add(findNodes[i]);
            }

            Goblet[] findGoblets = FindObjectsOfType <Goblet>();
            for (int i = 0; i < findGoblets.Length; i++)
            {
                goblets.Add(findGoblets[i]);
            }

            dialogHolder = GameObject.Find("DialogHolder");

            field = GameObject.Find("Field");

            RefillGames();
            currentGame = gamesQueue[0];
            gamesQueue.RemoveAt(0);

            for (int i = 0; i < controllers.Count; i++)
            {
                controllers[i].Enable();
                RespawnNode playerNode = respawnNodes.Find(x => x.ID.Equals(controllers[i].ID));
                controllers[i].transform.position = playerNode.transform.position;
                controllers[i].SetInitAttributes();
                controllers[i].RespawnAt(playerNode.transform.position);
            }

            currentGame.Init();
            veryFirstTimer = 4f;
            Camera.main.GetComponent <Animator>().SetTrigger("GodDemands");
            dialogHolder.GetComponent <SpriteRenderer>().sprite = currentGame.instructions;

            winningCharacterSprite = GameObject.Find("WinningCharacterSprite");
            winText = GameObject.Find("WinText");
        }
        void Update()
        {
			if(sleepTimer > 0) {
				sleepTimer -= Time.deltaTime;
			}
			if (paused || sleepTimer > 0) DeltaTime = 0;
			else DeltaTime = Time.deltaTime;

            if (inGame)
            {

                if (!currentGame.finished && !transitionStarted)
                {
					veryFirstTimer -= DeltaTime;
					if(veryFirstTimer <= 0) {
                    	currentGame.Run();
					}
					if(ControllerManager.instance.GetButtonDown(ControllerInputWrapper.Buttons.Start, PlayerID.One))
					{
						if (!paused)
						{
							PauseGame();
						}
						else
						{
							UnPauseGame();
						}
					}

                }
                else
                {

					if(!transitionStarted) {
						transitionStarted = true;
						if(IncrementPlayerScore(currentGame.Winners)) {
							inGame = false;
							gameWon = true;
							winTimer = 3f;
						}
						demandingTimer = 5f;
						transitionTimer2 = 15f;
                        if (gamesQueue.Count == 0) RefillGames();
						currentGame = gamesQueue[0];
                        gamesQueue.RemoveAt(0);
					} else {
						demandingTimer -= DeltaTime;

						if(demandingTimer <= 0) {
							transitionTimer2 = 5f;
							demandingTimer = 10f;
							Camera.main.GetComponent<Animator>().SetTrigger("GodDemands");
							SFXManager.instance.source.PlayOneShot(SFXManager.instance.RandomGodTalk());
							dialogHolder.GetComponent<SpriteRenderer>().sprite = currentGame.instructions;
						}

						transitionTimer2 -= DeltaTime;

						if(transitionTimer2 <= 0) {
							currentGame.Init();
							transitionStarted = false;
						}
					}
                }
				if(dialogHolder != null) dialogHolder.transform.localScale = Vector3.one*Mathf.Max(1.5f,(Mathf.Sin(Time.time*8f)+1));
			} else if(gameWon) {
                inGame = false;
				winTimer -= DeltaTime;
				if(winTimer <= 0) {
					gameWon = false;
                    Camera.main.GetComponent<EndGameUI>().enabled = true;
					Camera.main.GetComponent<Animator>().SetTrigger("GameEnd");
					for(int i = 0; i < controllers.Count; i++) {
						if(controllers[i].Character == winningCharacter) {
							winningCharacterSprite.GetComponent<Image>().sprite = controllers[i].Sprite.GetComponent<SpriteRenderer>().sprite;
							winText.GetComponent<Text>().text = "Congratulations! " + controllers[i].Character + " Was Sacrificed!";
                            //winText.GetComponent<Text>().color = Color.black;
                            EventSystem.current.SetSelectedGameObject(GameObject.Find("PlayAgain"));

                            break;
						}
					}
				}
			}
        }
        public void StartGame()
        {
            if (currentGame) currentGame.ForceEnd();
            inGame = true;
            gameWon = false;
            playerScores = new int[4];
            transitionStarted = false;
            scoreAdded = false;

            respawnNodes = new List<RespawnNode>();
            goblets = new List<Goblet>();
            gamesQueue = new List<Minigame>();

            RespawnNode[] findNodes = FindObjectsOfType<RespawnNode>();
            for (int i = 0; i < findNodes.Length; i++)
            {
                respawnNodes.Add(findNodes[i]);
            }

            Goblet[] findGoblets = FindObjectsOfType<Goblet>();
            for (int i = 0; i < findGoblets.Length; i++)
            {
                goblets.Add(findGoblets[i]);
            }

			dialogHolder = GameObject.Find("DialogHolder");

			field = GameObject.Find("Field");

            RefillGames();
            currentGame = gamesQueue[0];
            gamesQueue.RemoveAt(0);

            for (int i = 0; i < controllers.Count; i++)
            {
                controllers[i].Enable();
                RespawnNode playerNode = respawnNodes.Find(x => x.ID.Equals(controllers[i].ID));
                controllers[i].transform.position = playerNode.transform.position;
                controllers[i].SetInitAttributes();
                controllers[i].RespawnAt(playerNode.transform.position);
            }
                
			currentGame.Init();
			veryFirstTimer = 4f;
			Camera.main.GetComponent<Animator>().SetTrigger("GodDemands");
			dialogHolder.GetComponent<SpriteRenderer>().sprite = currentGame.instructions;

			winningCharacterSprite = GameObject.Find("WinningCharacterSprite");
			winText = GameObject.Find("WinText");

        }
        void Update()
        {
            if (sleepTimer > 0)
            {
                sleepTimer -= Time.deltaTime;
            }
            if (paused || sleepTimer > 0)
            {
                DeltaTime = 0;
            }
            else
            {
                DeltaTime = Time.deltaTime;
            }

            if (inGame)
            {
                if (!currentGame.finished && !transitionStarted)
                {
                    veryFirstTimer -= DeltaTime;
                    if (veryFirstTimer <= 0)
                    {
                        currentGame.Run();
                    }
                    if (ControllerManager.instance.GetButtonDown(ControllerInputWrapper.Buttons.Start, PlayerID.One))
                    {
                        if (!paused)
                        {
                            PauseGame();
                        }
                        else
                        {
                            UnPauseGame();
                        }
                    }
                }
                else
                {
                    if (!transitionStarted)
                    {
                        transitionStarted = true;
                        if (IncrementPlayerScore(currentGame.Winners))
                        {
                            inGame   = false;
                            gameWon  = true;
                            winTimer = 3f;
                        }
                        demandingTimer   = 5f;
                        transitionTimer2 = 15f;
                        if (gamesQueue.Count == 0)
                        {
                            RefillGames();
                        }
                        currentGame = gamesQueue[0];
                        gamesQueue.RemoveAt(0);
                    }
                    else
                    {
                        demandingTimer -= DeltaTime;

                        if (demandingTimer <= 0)
                        {
                            transitionTimer2 = 5f;
                            demandingTimer   = 10f;
                            Camera.main.GetComponent <Animator>().SetTrigger("GodDemands");
                            SFXManager.instance.source.PlayOneShot(SFXManager.instance.RandomGodTalk());
                            dialogHolder.GetComponent <SpriteRenderer>().sprite = currentGame.instructions;
                        }

                        transitionTimer2 -= DeltaTime;

                        if (transitionTimer2 <= 0)
                        {
                            currentGame.Init();
                            transitionStarted = false;
                        }
                    }
                }
                if (dialogHolder != null)
                {
                    dialogHolder.transform.localScale = Vector3.one * Mathf.Max(1.5f, (Mathf.Sin(Time.time * 8f) + 1));
                }
            }
            else if (gameWon)
            {
                inGame    = false;
                winTimer -= DeltaTime;
                if (winTimer <= 0)
                {
                    gameWon = false;
                    Camera.main.GetComponent <EndGameUI>().enabled = true;
                    Camera.main.GetComponent <Animator>().SetTrigger("GameEnd");
                    for (int i = 0; i < controllers.Count; i++)
                    {
                        if (controllers[i].Character == winningCharacter)
                        {
                            winningCharacterSprite.GetComponent <Image>().sprite = controllers[i].Sprite.GetComponent <SpriteRenderer>().sprite;
                            winText.GetComponent <Text>().text = "Congratulations! " + controllers[i].Character + " Was Sacrificed!";
                            //winText.GetComponent<Text>().color = Color.black;
                            EventSystem.current.SetSelectedGameObject(GameObject.Find("PlayAgain"));

                            break;
                        }
                    }
                }
            }
        }
        public void StartGame()
        {
            inGame = true;
            /*
            Controller[] findControllers = FindObjectsOfType<Controller>();
            for (int i = 0; i < findControllers.Length; i++)
            {
                controllers.Add(findControllers[i]);
            }
            */

            RespawnNode[] findNodes = FindObjectsOfType<RespawnNode>();
            for (int i = 0; i < findNodes.Length; i++)
            {
                respawnNodes.Add(findNodes[i]);
            }

            Goblet[] findGoblets = FindObjectsOfType<Goblet>();
            for (int i = 0; i < findGoblets.Length; i++)
            {
                goblets.Add(findGoblets[i]);
            }

			dialogHolder = GameObject.Find("DialogHolder");

			field = GameObject.Find("Field");

            currentGame = games[Random.Range(0, games.Count)];

            for (int i = 0; i < controllers.Count; i++)
            {
                controllers[i].Enable();
                RespawnNode playerNode = respawnNodes.Find(x => x.ID.Equals(controllers[i].ID));
                controllers[i].transform.position = playerNode.transform.position;
            }
                
			currentGame.Init();
			veryFirstTimer = 4f;
			Camera.main.GetComponent<Animator>().SetTrigger("GodDemands");
			dialogHolder.GetComponent<SpriteRenderer>().sprite = currentGame.instructions;

			winningCharacterSprite = GameObject.Find("WinningCharacterSprite");
			winText = GameObject.Find("WinText");

        }
        void Update()
        {
            if (inGame)
            {
				if (!currentGame.finished && !transitionStarted)
                {
					veryFirstTimer -= Time.deltaTime;
					if(veryFirstTimer <= 0) {
                    	currentGame.Run();
					}

                }
                else
                {

					if(!transitionStarted) {
						transitionStarted = true;
						if(IncrementPlayerScore(currentGame.Winners)) {
							inGame = false;
							gameWon = true;
							winTimer = 3f;
						}
						demandingTimer = 5f;
						transitionTimer2 = 15f;
						currentGame = games[Random.Range(0, games.Count)];
//						Debug.Log("Next game chosen: " + currentGame.name);
					} else {
						demandingTimer -= Time.deltaTime;

						if(demandingTimer <= 0) {
							transitionTimer2 = 5f;
							demandingTimer = 10f;
							Camera.main.GetComponent<Animator>().SetTrigger("GodDemands");
							SFXManager.instance.source.PlayOneShot(SFXManager.instance.RandomGodTalk());
							dialogHolder.GetComponent<SpriteRenderer>().sprite = currentGame.instructions;
						}

						transitionTimer2 -= Time.deltaTime;

						if(transitionTimer2 <= 0) {
							currentGame.Init();
							transitionStarted = false;
						}
					}
                }
				dialogHolder.transform.localScale = Vector3.one*Mathf.Max(1.5f,(Mathf.Sin(Time.time*8f)+1));
			} else if(gameWon) {
				winTimer -= Time.deltaTime;
				if(winTimer <= 0) {
					gameWon = false;
					Camera.main.GetComponent<Animator>().SetTrigger("GameEnd");
					for(int i = 0; i < controllers.Count; i++) {
						if(controllers[i].Character == winningCharacter) {
							winningCharacterSprite.GetComponent<Image>().sprite = controllers[i].Sprite.GetComponent<SpriteRenderer>().sprite;
							winText.GetComponent<Text>().text = "Congratulations! " + controllers[i].Character + " Was Sacrificed!";
							break;
						}
					}
				}
			}
        }