Example #1
0
    /// <summary>
    /// Método Start, que se llama antes del primer frame
    /// </summary>
    void Start()
    {
        activatedEvents[0] = true;

        /// Instanciar ladrón
        // Obtener datos aleatorios
        Quaternion randomRotation = Quaternion.Euler(0, Random.Range(0, 360), 0);

        // Lo instanciamos
        GameObject thiefGameObject = Instantiate(scriptedVillagerPrefab, new Vector3(-11.5f, 4.65f, -4.2f), randomRotation, villagersParent.transform);;

        // Obtener componente ScriptedVillager
        scriptedThief = thiefGameObject.GetComponent <ScriptedVillager>();

        // Establecemos sus objetos
        scriptedThief.items.villagerColor = ItemDatabase.instance.characterColors[0];
        scriptedThief.items.eyes          = ItemDatabase.instance.eyes[1];
        scriptedThief.items.hatItem       = ItemDatabase.instance.hatItems[0];
        scriptedThief.items.hornItem      = ItemDatabase.instance.noItems[1];
        scriptedThief.items.neckItem      = ItemDatabase.instance.neckItems[0];

        // Instanciamos sus objetos
        scriptedThief.PutItems();

        // Cambiamos su tag
        scriptedThief.tag = "ScriptedThief";

        // Establecemos su id de tutorial
        scriptedThief.tutorialID = 5;

        // Lo desactivamos
        scriptedThief.gameObject.SetActive(false);
    }
Example #2
0
    /// <summary>
    /// Método Event18, que ejecuta la funcionalidad requerida por el evento 18
    /// </summary>
    public void Event18()
    {
        // Ocultamos el texto del tutorial
        marshugusGameObject.SetActive(false);
        tutorialText.gameObject.SetActive(false);

        // Dejamos al jugador que se mueva
        playerCanMove = true;

        // Establecemos un "robo" que hace de flecha para la plaza
        GameObject robberyGameObject = Instantiate(robberyPrefab, robberiesParent.transform);
        Robbery    newRobbery        = robberyGameObject.GetComponent <Robbery>();

        newRobbery.robberyPosition = new Vector3(-13.25f, 4.75f, -8f);
        newRobbery.robberyRectTransform.anchoredPosition = new Vector2(100000, 100000);
        newRobbery.robberyIconImage.sprite     = arrowSprite;
        robberyGameObject.transform.localScale = new Vector3(1.5f, 1.5f, 1);
        TutorialGameManager.instance.robberies.Add(newRobbery);

        /// Instanciamos aldeano aleatorio y movemos ladrón
        /// Aldeano aleatorio
        // Obtener datos aleatorios
        Quaternion randomRotation = Quaternion.Euler(0, Random.Range(0, 360), 0);

        // La instanciamos
        GameObject villagerGameObject = Instantiate(scriptedVillagerPrefab, new Vector3(-14.95f, 4.65f, -12f), randomRotation, villagersParent.transform);;

        // Obtener componente ScriptedVillager
        ScriptedVillager fifthScriptedVillager = villagerGameObject.GetComponent <ScriptedVillager>();

        // Establecemos sus objetos
        fifthScriptedVillager.items.villagerColor = ItemDatabase.instance.characterColors[0];
        fifthScriptedVillager.items.eyes          = ItemDatabase.instance.eyes[1];
        fifthScriptedVillager.items.hatItem       = ItemDatabase.instance.hatItems[0];
        fifthScriptedVillager.items.hornItem      = ItemDatabase.instance.hornItems[0];
        fifthScriptedVillager.items.neckItem      = ItemDatabase.instance.neckItems[0];

        // Instanciamos sus objetos
        fifthScriptedVillager.PutItems();

        // Añadimos al aldeano a la lista
        TutorialGameManager.instance.villagers.Add(fifthScriptedVillager);

        // Establecemos su id de tutorial
        fifthScriptedVillager.tutorialID = 4;

        /// Ladrón
        // Lo desactivamos
        scriptedThief.gameObject.SetActive(true);
    }
Example #3
0
    /// <summary>
    /// Método Detention, que ejecuta una detención
    /// </summary>
    public void Detention()
    {
        // Si acertó
        if (calledScriptedVillagerIsThief)
        {
            // Tutorial
            if (tutorialManager.actualEvent == 26 &&
                !tutorialManager.activatedEvents[26])
            {
                tutorialManager.activatedEvents[26] = true;
                tutorialManager.GoToNextStep();
            }

            // Efecto
            GameObject nervousVFX = Instantiate(TutorialGameManager.instance.nervousVFX, calledScriptedVillager.transform);
            // Efecto de sonido
            AudioManager.instance.PlaySound("Nervous");

            TutorialGameManager.instance.HideDetentionButton();
            TutorialGameManager.instance.EndGameAsWin();
        }
        // Si falló
        else
        {
            // Tutorial
            if (tutorialManager.actualEvent == 22 &&
                !tutorialManager.activatedEvents[22])
            {
                tutorialManager.activatedEvents[22] = true;
                tutorialManager.GoToNextStep();
            }

            // Efecto
            GameObject angerVFX = Instantiate(TutorialGameManager.instance.angerVFX, calledScriptedVillager.transform);
            AudioManager.instance.PlaySound("Anger");
            // Se destruye cuando acaba el efecto
            ParticleSystem partS         = angerVFX.GetComponent <ParticleSystem>();
            float          totalDuration = partS.main.duration + partS.main.startLifetime.constant;
            Destroy(angerVFX, totalDuration);

            calledScriptedVillager.hasBeenCalledByMarshall = false;
            calledScriptedVillager = null;
            TutorialGameManager.instance.HideDetentionButton();
            TutorialGameManager.instance.AddAttempt();
        }
    }
Example #4
0
    /// <summary>
    /// Método Event13, que ejecuta la funcionalidad requerida por el evento 13
    /// </summary>
    public void Event13()
    {
        /// Creamos una víctima en el parque
        // Obtener datos aleatorios
        Quaternion randomRotation = Quaternion.Euler(0, Random.Range(0, 360), 0);

        // La instanciamos
        GameObject villagerGameObject = Instantiate(scriptedVillagerPrefab, new Vector3(45.5f, 2.8f, -10f), randomRotation, villagersParent.transform);;

        // Obtener componente ScriptedVillager
        ScriptedVillager parkScriptedVillager = villagerGameObject.GetComponent <ScriptedVillager>();

        // Aleatorizamos el aldeano
        do
        {
            parkScriptedVillager.RandomizeNPC();
        } while (parkScriptedVillager.items.ToString().Equals(scriptedThief.items.ToString()));

        // Instanciamos sus objetos
        parkScriptedVillager.PutItems();

        // Añadimos al aldeano a la lista
        TutorialGameManager.instance.villagers.Add(parkScriptedVillager);

        // Establecemos los dos objetos que ha visto
        parkScriptedVillager.informationGameObject.item1 = ItemDatabase.instance.hornItems[0];
        parkScriptedVillager.informationGameObject.item2 = ItemDatabase.instance.neckItems[0];
        parkScriptedVillager.informationGameObject.doubtfulInformation = true;

        // Establecemos que sea víctima
        parkScriptedVillager.GetRobbed();

        // Establecemos su id de tutorial
        parkScriptedVillager.tutorialID = 2;

        /// Creamos un robo donde la víctima
        TutorialUIManager.instance.ShowRobberyIcon(villagerGameObject.transform.position);
        TutorialGameManager.instance.AddRobbery();
        //Efecto de sonido
        AudioManager.instance.PlaySound("TheftFound");

        // Mostramos siguiente paso
        GoToNextStep();
    }
Example #5
0
    /// <summary>
    /// Método Event8, que ejecuta la funcionalidad requerida por el evento 8
    /// </summary>
    public void Event8()
    {
        /// Creamos una víctima en el ayuntamiento
        // Obtener datos aleatorios
        Quaternion randomRotation = Quaternion.Euler(0, Random.Range(0, 360), 0);

        // La instanciamos
        GameObject villagerGameObject = Instantiate(scriptedVillagerPrefab, new Vector3(-48.5f, 11.5f, 27.5f), randomRotation, villagersParent.transform);;

        // Obtener componente ScriptedVillager
        ScriptedVillager townHallScriptedVillager = villagerGameObject.GetComponent <ScriptedVillager>();

        // Aleatorizamos el aldeano
        do
        {
            townHallScriptedVillager.RandomizeNPC();
        } while (townHallScriptedVillager.items.ToString().Equals(scriptedThief.items.ToString()));


        // Instanciamos sus objetos
        townHallScriptedVillager.PutItems();

        // Añadimos al aldeano a la lista
        TutorialGameManager.instance.villagers.Add(townHallScriptedVillager);

        // Establecemos los dos objetos que ha visto
        townHallScriptedVillager.informationGameObject.item1 = ItemDatabase.instance.characterColors[0];
        townHallScriptedVillager.informationGameObject.item2 = ItemDatabase.instance.eyes[1];

        // Establecemos que sea víctima
        townHallScriptedVillager.GetRobbed();

        // Establecemos su id de tutorial
        townHallScriptedVillager.tutorialID = 0;

        /// Creamos un robo donde la víctima
        TutorialUIManager.instance.ShowRobberyIcon(villagerGameObject.transform.position);
        TutorialGameManager.instance.AddRobbery();
        //Efecto de sonido
        AudioManager.instance.PlaySound("TheftFound");

        // Mostramos siguiente paso
        GoToNextStep();
    }
Example #6
0
    /// <summary>
    /// Método Event16, que ejecuta la funcionalidad requerida por el evento 16
    /// </summary>
    public void Event16()
    {
        /// Creamos testigo para acercarse al usuario
        // Obtener datos aleatorios
        Quaternion randomRotation = Quaternion.Euler(0, Random.Range(0, 360), 0);

        // La instanciamos
        GameObject villagerGameObject = Instantiate(scriptedVillagerPrefab, new Vector3(51, 2.4f, -30f), randomRotation, villagersParent.transform);;

        // Obtener componente ScriptedVillager
        ScriptedVillager fourthScriptedVillager = villagerGameObject.GetComponent <ScriptedVillager>();

        // Aleatorizamos el aldeano para que no coincida con el tercero
        ScriptedVillager thirdVillager = TutorialGameManager.instance.villagers[2];

        do
        {
            fourthScriptedVillager.RandomizeNPC();
        } while (fourthScriptedVillager.items.ToString().Equals(thirdVillager.items.ToString()) ||
                 fourthScriptedVillager.items.ToString().Equals(scriptedThief.items.ToString()));

        // Instanciamos sus objetos
        fourthScriptedVillager.PutItems();

        // Añadimos al aldeano a la lista
        TutorialGameManager.instance.villagers.Add(fourthScriptedVillager);

        // Establecemos el objeto que ha visto
        fourthScriptedVillager.informationGameObject.item1 = ItemDatabase.instance.neckItems[0];
        fourthScriptedVillager.informationGameObject.item2 = null;

        // Establecemos que sea víctima
        fourthScriptedVillager.SeeRobbery();

        // Establecemos su id de tutorial
        fourthScriptedVillager.tutorialID = 3;

        // Establecemos que el jugador tiene que esperar
        playerHasToWait = true;
    }
Example #7
0
    /// <summary>
    /// Método Update, que se llama cada frame
    /// </summary>
    void Update()
    {
        // Si el jugador tiene que esperar, no realizamos cálculos
        if (tutorialManager.playerHasToWait)
        {
            return;
        }

        #region OneClick
        // Si el jugador hace click con el ratón
        if (Input.GetMouseButtonDown(0))
        {
            // Establecemos que ha pulsado el ratón
            hasMouseOnClick = true;

            // Si puede moverse
            if (tutorialManager.playerCanMove &&
                !tutorialManager.event22MustArrestHornsVillager &&
                !tutorialManager.event26MustArrestThief)
            {
                // Si el juego está en pausa, no realizamos cálculos
                if (TutorialGameManager.instance.gamePaused)
                {
                    return;
                }

                // Si la partida ha acabado, no realizamos cálculos
                if (TutorialGameManager.instance.gameOver)
                {
                    return;
                }

                // Si está el ratón sobre la UI, no se lanza Raycast
                if (IsPointerOverUIObject())
                {
                    return;
                }

                // En caso contrario, se lanza el Raycast
                RaycastHit hit;
                Ray        ray = Camera.main.ScreenPointToRay(Input.mousePosition);
                if (Physics.Raycast(ray, out hit, 100.0f, ~playerLayerMask))
                {
                    // Va hacia allí
                    destination = hit.point;
                    thisAgent.SetDestination(destination);
                    if (!thisAnimator.GetCurrentAnimatorStateInfo(0).IsName("Marshallow_Run"))
                    {
                        thisAnimator.SetTrigger("run");
                    }

                    // Si es un aldeano
                    if (hit.transform.CompareTag("ScriptedVillager"))
                    {
                        // Eventos tutorial
                        if (!tutorialManager.event25MustClickThief &&
                            !tutorialManager.event26MustArrestThief)
                        {
                            if (tutorialManager.actualEvent == 20 &&
                                !tutorialManager.activatedEvents[20])
                            {
                                // Si ya tenia uno, lo quitamos
                                if (calledScriptedVillager != null)
                                {
                                    calledScriptedVillager.hasBeenCalledByMarshall = false;
                                    calledScriptedVillager = null;
                                }

                                calledScriptedVillagerIsThief = false;
                                calledScriptedVillager        = hit.transform.gameObject.GetComponent <ScriptedVillager>();
                                calledScriptedVillager.hasBeenCalledByMarshall = true;

                                // Si es el aldeano 4 y estamos en el evento adecuado
                                if (calledScriptedVillager.tutorialID == 4)
                                {
                                    // Activamos el evento y llamamos al siguiente
                                    tutorialManager.activatedEvents[20] = true;
                                    tutorialManager.GoToNextStep();

                                    TutorialGameManager.instance.ShowDetentionButton(calledScriptedVillager.transform);

                                    // Efecto de sorpresa
                                    GameObject     surpriseVFX   = Instantiate(TutorialGameManager.instance.surpriseVFX, calledScriptedVillager.transform);
                                    ParticleSystem partS         = surpriseVFX.GetComponent <ParticleSystem>();
                                    float          totalDuration = partS.main.duration + partS.main.startLifetime.constant;
                                    Destroy(surpriseVFX, totalDuration);
                                }
                                // Si no es el aldeano 4 y estamos en el evento adecuado
                                else
                                {
                                    if (calledScriptedVillager != null)
                                    {
                                        calledScriptedVillager.hasBeenCalledByMarshall = false;
                                        calledScriptedVillager = null;
                                    }
                                }
                            }
                        }
                    }
                    // Si es el ladrón
                    else if (hit.transform.CompareTag("ScriptedThief"))
                    {
                        // Eventos tutorial
                        if (!tutorialManager.event20MustClickHornsVillager &&
                            !tutorialManager.event22MustArrestHornsVillager)
                        {
                            // Si ya tenia uno, lo quitamos
                            if (calledScriptedVillager != null)
                            {
                                calledScriptedVillager.hasBeenCalledByMarshall = false;
                                calledScriptedVillager = null;
                            }

                            calledScriptedVillagerIsThief = true;
                            calledScriptedVillager        = hit.transform.gameObject.GetComponent <ScriptedVillager>();
                            calledScriptedVillager.hasBeenCalledByMarshall = true;

                            // Si es el aldeano 4 y estamos en el evento adecuado
                            if (tutorialManager.actualEvent == 25 &&
                                !tutorialManager.activatedEvents[25])
                            {
                                // Activamos el evento y llamamos al siguiente
                                tutorialManager.activatedEvents[25] = true;
                                tutorialManager.GoToNextStep();

                                TutorialGameManager.instance.ShowDetentionButton(calledScriptedVillager.transform);

                                // Efecto de sorpresa
                                GameObject     surpriseVFX   = Instantiate(TutorialGameManager.instance.surpriseVFX, calledScriptedVillager.transform);
                                ParticleSystem partS         = surpriseVFX.GetComponent <ParticleSystem>();
                                float          totalDuration = partS.main.duration + partS.main.startLifetime.constant;
                                Destroy(surpriseVFX, totalDuration);
                            }
                        }
                    }
                    // Si es territorio transitable, mueve al agente a esa posición
                    else if (hit.transform.CompareTag("Walkable") || hit.transform.CompareTag("Zone"))
                    {
                        /// Tutorial
                        /// Evento 1
                        // Si no ha completado el evento 1, se añade un paso
                        if (!tutorialManager.activatedEvents[1])
                        {
                            tutorialManager.event1Moves++;
                            // Si ha dado tres pasos, se completa el evento 1
                            if (tutorialManager.event1Moves >= 3)
                            {
                                tutorialManager.activatedEvents[1] = true;
                                tutorialManager.GoToNextStep();
                            }
                        }

                        // Si había llamado a un NPC, lo deja ir
                        if (calledScriptedVillager != null &&
                            !tutorialManager.event20MustClickHornsVillager &&
                            !tutorialManager.event22MustArrestHornsVillager &&
                            !tutorialManager.event25MustClickThief &&
                            !tutorialManager.event26MustArrestThief)
                        {
                            calledScriptedVillager.hasBeenCalledByMarshall = false;
                            calledScriptedVillager = null;
                            GameManager.instance.HideDetentionButton();
                        }

                        // Se instancia el efecto
                        if (effectInstance == null)
                        {
                            effectInstance = Instantiate(effectPrefab, hit.point + new Vector3(0, 0.1f, 0), new Quaternion());
                        }
                        else
                        {
                            effectInstance.Clear();
                            effectInstance.gameObject.transform.position = hit.point + new Vector3(0, 0.1f, 0);
                            effectInstance.Play();
                        }
                    }
                }
            }
            // Si no puede moverse y no tiene que arrestar
            else if (!tutorialManager.event22MustArrestHornsVillager &&
                     !tutorialManager.event26MustArrestThief)
            {
                // Si el juego está en pausa, no realizamos cálculos
                if (TutorialGameManager.instance.gamePaused && tutorialManager.actualEvent < 27)
                {
                    return;
                }

                // Si no puede usar la UI y no puede volver al menú
                if (!tutorialManager.playerCanUseUI && !tutorialManager.event28CanReturnToMenu)
                {
                    // Comprobamos sobre qué objetos está la UI
                    List <RaycastResult> results = PointerOverUIElements();

                    // Si hay resultados
                    if (results.Count > 0)
                    {
                        // Si está el ratón sobre ciertos elementos de la UI, no se va al siguiente paso
                        foreach (RaycastResult rr in results)
                        {
                            if (rr.gameObject.name.Equals("Button_Pause") ||
                                rr.gameObject.name.Equals("Button_Antihorary") ||
                                rr.gameObject.name.Equals("Button_Antihorary") ||
                                rr.gameObject.name.Equals("Button_Resume"))
                            {
                                return;
                            }
                        }

                        // Si no, hace el siguiente paso
                        tutorialManager.GoToNextStep();
                    }
                    // Si no, hace el siguiente paso
                    else
                    {
                        // Si el juego está en pausa, no realizamos cálculos
                        if (TutorialGameManager.instance.gamePaused && tutorialManager.actualEvent < 27)
                        {
                            return;
                        }

                        tutorialManager.GoToNextStep();
                    }
                }
            }
        }
        #endregion

        // Si levanta el ratón, no está haciendo click
        if (Input.GetMouseButtonUp(0))
        {
            hasMouseOnClick = false;
        }

        #region Click Contínuo
        // Si el jugador hace click con el ratón
        if (Input.GetMouseButton(0))
        {
            // Si puede moverse
            if (tutorialManager.playerCanMove &&
                !tutorialManager.event22MustArrestHornsVillager &&
                !tutorialManager.event26MustArrestThief)
            {
                // Si el juego está en pausa, no realizamos cálculos
                if (TutorialGameManager.instance.gamePaused)
                {
                    return;
                }

                // Si la partida ha acabado, no realizamos cálculos
                if (TutorialGameManager.instance.gameOver)
                {
                    return;
                }

                // Si está el ratón sobre la UI, no se lanza Raycast
                if (!hasMouseOnClick && IsPointerOverUIObject())
                {
                    return;
                }

                // En caso contrario, se lanza el Raycast
                RaycastHit hit;
                Ray        ray = Camera.main.ScreenPointToRay(Input.mousePosition);
                if (Physics.Raycast(ray, out hit, 100.0f, ~playerLayerMask))
                {
                    // Comprueba con qué ha chocado el raycast
                    //Debug.Log("You selected the: " + hit.transform.name);

                    // Va hacia allí
                    destination = hit.point;
                    thisAgent.SetDestination(destination);
                    if (!thisAnimator.GetCurrentAnimatorStateInfo(0).IsName("Marshallow_Run"))
                    {
                        thisAnimator.SetTrigger("run");
                    }
                }
            }
        }
        #endregion

        // Si llega al destino, cambia de animación
        if (Vector3.Distance(destination, transform.position) <= 1.0f)
        {
            if (!thisAnimator.GetCurrentAnimatorStateInfo(0).IsName("Marshallow_Idle"))
            {
                thisAnimator.SetTrigger("idle");
            }
        }

        // Si está lo suficientemente cerca del NPC que ha llamado, se para
        if (calledScriptedVillager != null)
        {
            if (Vector3.Distance(this.transform.position, calledScriptedVillager.transform.position) < DETENTION_RANGE)
            {
                if (thisAgent.hasPath)
                {
                    thisAgent.ResetPath();
                    thisAnimator.SetTrigger("idle");
                }
            }
        }

        // Si está lo suficientemente cerca de un robo, lo desactiva
        List <Robbery> closeRobberies = new List <Robbery>();
        foreach (Robbery r in TutorialGameManager.instance.robberies)
        {
            if (Vector3.Distance(this.transform.position, r.robberyPosition) < QUIT_STEAL_ICON_RANGE)
            {
                closeRobberies.Add(r);
            }
        }

        foreach (Robbery r in closeRobberies)
        {
            TutorialUIManager.instance.HideRobberyIcon(r);
        }
    }