/// <summary> /// Inicia la secuencia al inicio del juego /// </summary> void fillmylevel() { if (!MenuVersion) { //Congela los elementos jubales por ahora FreezeGame(true); //Ajustamos este nivel dependiendo de el sitio en las build settings de su escena level = sProfileManager.ProfileSingleton.newLevelIndex; sProfileManager.ProfileSingleton.ChangingLevel = false; if (sProfileManager.instance != null) { if (level > sProfileManager.instance.levelconditions.Count - 1) { level = 1; } } //Clonamos la configuración de este nivel (LevelConditions) if (sProfileManager.instance != null) { LevelConditions LC = sProfileManager.instance.levelconditions.Find(x => x.Code == sProfileManager.ProfileSingleton.profileLevels[level].code); if (LC != null) { myLevel = ObjectCloner.Clone <LevelConditions>(LC); } if (LC == null) { myLevel = defaultLevel; Debug.LogWarning("Failed to Load Level Conditions"); } } //if sProfiel dues not exist, Bootstrap a TEST level if (sProfileManager.instance == null) { myLevel = defaultLevel; } //GUI Activa el panel de entrada y la GUI detras IntroPanel.SetActive(true); GUIPanel.SetActive(true); //Set Strings MoneyText.text = _money.ToString(); IntroMenuMainLabel.text = "Level " + (level + 1).ToString() + " - Menu"; //Configuramos el MODO de este Nivel //(Actualmente solo existe TimeAttack) //TODO: More LevelModes switch (myLevel.mode) { case LevelMode.TimeAttack: //En esta parte se inician los Listeners para los //distintos eventos que pueden ocurrir durante el juego OnScore += TimeAttackOnScoreListener; OnMoneyGain += TimeAttackOnMoneyGainListener; OnCompeletedQuest += TimeAttackOnCompletedQuestListener; //Se inicializa el Timer (no empieza aún, está Freeze) TimeController.s.SetTimer((float)myLevel.startingTimer, TimeAttackEndGameVictoryCheck, true, 0f, false); TimeController.s.timer.AddAction(10, ActivateLowTimeTimerAnimation); //TimeController.s.timer.AddAction(0, StopLowTimeTimerAnimation); foreach (Quest q in myLevel.quests.FindAll(x => x.winCondition == WinCondition.Time)) { TimeController.s.timer.AddAction((int)((float)myLevel.startingTimer - (float)q.winAmount), () => { q.finished = true; }); } break; default: break; } //CONFIG QUEST FOREACH LOOP (FOR en el futuro) //LINKED QUEST SET UP //--- //Repasamos las Quest de este nivel, creamos la LISTA por referencia //de todas las misiones asociadas a otras misiones //Nota este Foreach vale para otra cosa mas(ver mas abajo) int e = 0; foreach (Quest q in myLevel.quests) { q.completed = false; q.LinkedQuest = new List <Quest>(); if (q.LinkedQuestIndex.Count > 0) { foreach (int i in q.LinkedQuestIndex) { if (i < e) { q.LinkedQuest.Add(myLevel.quests[i]); q.LinkedQuestEnabled = true; } } } e += 1; //--- //Creamos los SLATES apropiados (Para UI y para la INTRO) CreateGUISlate(q, e); CreateIPGUISlate(q, e, false); } //Tras crear Slates se le indica al Grid que se ajuste //(No es automático) GameObject.FindGameObjectWithTag("QuestGUI").GetComponent <UIGrid>().Reposition(); GameObject.FindGameObjectWithTag("IPQuestSlateAnchor").GetComponent <UIGrid>().Reposition(); //El juego comienza en Pause, no se deben ver repetidas las Quest: QuestGrid.SetActive(false); //QuestGrid son las quest principales. IP las del Menú //Ahora se Activa la Intro //(En la Escena viene ya activada por defecto) FailSafe: //Esta lina activa el tutorial (si es false) //O va directo al menú de INTRO (si es true) if (sProfileManager.instance != null) { TutorialController.s.hasTutorial = !sProfileManager.ProfileSingleton.profileLevels[level].TutorialDone; TutorialController.ChangeMyState(sProfileManager.ProfileSingleton.profileLevels[level].TutorialDone); if (!sProfileManager.ProfileSingleton.profileLevels[level].TutorialDone) { TutorialController.s.ResetTutorialAndGo(); } else { TutorialController.s.secondTime = true; } } } else { //En caso de que esto sea el MENU (Menu Versión == true), ponemos musica de menu si es necesario. if (GameConfig.s.MusicState) { if (!MusicStore.s.AliasIsPlaying("Menu")) { MusicStore.s.PlayMusicByAlias("Menu", 0f, GameConfig.s.MusicVolume, true, 5f, true, 1f); } } } //NOTA: //Cuando el jugador indica de empezar a jugar se ejecuta //"LaunchCountdownAnimation()" //y despues del Countdown = "StartGame()" (ver Mas abajo) }