Example #1
0
    private IEnumerator DelayStart(AudienceMemberController theAudienceMember)
    {
        foreach (GameObject g in theAudienceMember.possibleIdleSprites)
        {
            g.SetActive(false);
        }
        theAudienceMember.focusedSprite.SetActive(false);

        if (theAudienceMember.success)
        {
            theAudienceMember.successSprite.SetActive(true);
        }
        else
        {
            theAudienceMember.failSprite.SetActive(true);
        }
        theAudienceMember.questionLeft.SetActive(false);
        theAudienceMember.questionRight.SetActive(false);

        yield return(new WaitForSeconds(0.5f));

        theAudienceMember.spriteAnimController.SetTrigger("Hide");

        yield return(new WaitForSeconds(0.5f));

        OnAudienceDespawnEvent(theAudienceMember);
        GameObject.Destroy(theAudienceMember.gameObject);
    }
    public void SpawnAudienceMember(GameObject specificAudienceMemberPrefab)
    {
        List <SpawnPoint> freeSpawns = new List <SpawnPoint>();

        foreach (SpawnPoint sp in availableSpawnPoints)
        {
            if (!sp.IsBeingUsed)
            {
                freeSpawns.Add(sp);
            }
        }

        if (freeSpawns.Count > 0)
        {
            AudienceMemberController newAudienceMember = Instantiate(specificAudienceMemberPrefab, this.transform).GetComponent <AudienceMemberController>();

            // Setting Position
            int        pickedSpawn = Random.Range(0, freeSpawns.Count);
            SpawnPoint spawnPoint  = freeSpawns[pickedSpawn];

            newAudienceMember.transform.position = freeSpawns[pickedSpawn].transform.position;
            newAudienceMember.transform.rotation = Quaternion.identity;

            // Preventing Spawn Points from being used by more than one audience member
            spawnPoint.IsBeingUsed     = true;
            spawnPoint.spawnedAudience = newAudienceMember;
        }
        else
        {
            // All Spawn Point Are Currently Being Used
            Debug.Log("Can't spawn audience member, all spawnpoints are being used");
        }
    }
Example #3
0
    public override void UpdateState(AudienceMemberController theAudienceMember)
    {
        if (started && theAudienceMember.hasTimer)
        {
            theAudienceMember.currentTime += Time.deltaTime;

            // Updating UI
            float   pos      = theAudienceMember.currentTime / theAudienceMember.maxTime;
            Vector3 newScale = Vector3.one;
            newScale.x = pos;
            Color newColor = Color.Lerp(Color.green, Color.red, pos);

            theAudienceMember.leftFill.transform.localScale = newScale;
            theAudienceMember.leftFill.color = newColor;

            theAudienceMember.rightFill.transform.localScale = newScale;
            theAudienceMember.rightFill.color = newColor;

            // Checking Exit Condition
            if (theAudienceMember.currentTime > theAudienceMember.maxTime)
            {
                LevelManager.instance.IncreaseInstability();
                theAudienceMember.ChangeState(AudienceStates.AUDIENCE_EXIT);
            }
        }
    }
Example #4
0
 public override void StartState(AudienceMemberController theAudienceMember)
 {
     if (!started)
     {
         theAudienceMember.StartCoroutine(StartAnim(theAudienceMember));
         started = true;
     }
 }
Example #5
0
    private void CheckIfReset(AudienceMemberController despawningAudience)
    {
        if (despawningAudience == spawnedAudience)
        {
            Debug.Log("Freeing Spawn Point");

            IsBeingUsed     = false;
            spawnedAudience = null;
        }
    }
    public void CloseUI(bool questionAnswered)
    {
        // End of dialogue tree
        interactingAudienceMember.success = questionAnswered;
        interactingAudienceMember.ChangeState(AudienceStates.AUDIENCE_EXIT);

        interactingAudienceMember = null;

        // Close All UI
        theQuestionAnswerUI.SetActive(false);
        theDialogueUI.SetActive(false);

        backgroundFade.SetActive(false);
        timerParent.SetActive(false);

        OnEventDialogueFinished?.Invoke();
    }
    /*
     * ========================================================================================================================================================================================================
     * UI Access (General Opening & Closing)
     * ========================================================================================================================================================================================================
     */
    public bool OpenUI(AudienceMemberController openingAudienceMember)
    {
        // Preventing a new audience member from interacting with the UI if another is already focused
        if (interactingAudienceMember == null)
        {
            interactingAudienceMember = openingAudienceMember;

            // Set has answer options so open up question answer UI
            UpdateUI(interactingAudienceMember.theQuestion);
            StartCoroutine(DelayUIOpen(interactingAudienceMember.theQuestion));

            return(true);
        }
        else
        {
            return(false);
        }
    }
Example #8
0
    private IEnumerator StartAnim(AudienceMemberController theAudienceMember)
    {
        // Randomize Sprite Colors
        int pickedColor = Random.Range(0, theAudienceMember.possibleColors.Length);

        foreach (GameObject g in theAudienceMember.possibleIdleSprites)
        {
            g.GetComponent <SpriteRenderer>().color = theAudienceMember.possibleColors[pickedColor];
        }
        theAudienceMember.focusedSprite.GetComponent <SpriteRenderer>().color = theAudienceMember.possibleColors[pickedColor];
        theAudienceMember.successSprite.GetComponent <SpriteRenderer>().color = theAudienceMember.possibleColors[pickedColor];
        theAudienceMember.failSprite.GetComponent <SpriteRenderer>().color    = theAudienceMember.possibleColors[pickedColor];

        // Randomize Idle Sprite
        int pickedSprite = Random.Range(0, theAudienceMember.possibleIdleSprites.Length);

        for (int i = 0; i < theAudienceMember.possibleIdleSprites.Length; i++)
        {
            if (i == pickedSprite)
            {
                theAudienceMember.possibleIdleSprites[i].SetActive(true);
            }
            else
            {
                theAudienceMember.possibleIdleSprites[i].SetActive(false);
            }
        }

        yield return(new WaitForSeconds(1.0f));

        if (theAudienceMember.transform.position.x < 0)
        {
            theAudienceMember.questionLeft.SetActive(false);
            theAudienceMember.questionRight.SetActive(true);
        }
        else
        {
            theAudienceMember.questionLeft.SetActive(true);
            theAudienceMember.questionRight.SetActive(false);
        }
    }
Example #9
0
    private IEnumerator StartAnim(AudienceMemberController theAudienceMember)
    {
        // Animation for moving away from background
        theAudienceMember.spriteAnimController.SetTrigger("Hide");
        theAudienceMember.bubbleAnimController.SetTrigger("Interact");

        if (theAudienceMember.hasTimer)
        {
            theAudienceMember.currentTime /= 2;
        }

        yield return(new WaitForSeconds(0.5f));

        theAudienceMember.questionLeft.SetActive(false);
        theAudienceMember.questionRight.SetActive(false);

        // Moving to set position in world for asking question to the user
        Vector3 targetPos = GameObject.FindGameObjectWithTag("FocusedPoint").transform.position;

        theAudienceMember.transform.position = targetPos;
        // Changing sprite to talking sprite anim
        foreach (GameObject g in theAudienceMember.possibleIdleSprites)
        {
            g.SetActive(false);
        }
        theAudienceMember.focusedSprite.SetActive(true);

        // Anim for showing up to new focused position
        theAudienceMember.spriteAnimController.SetTrigger("Show");
        // Changing layer so that the audience member appears in front of the background fade (foreground layer == 10)
        foreach (GameObject g in theAudienceMember.possibleIdleSprites)
        {
            g.layer = 10;
        }
        theAudienceMember.focusedSprite.layer = 10;
        theAudienceMember.successSprite.layer = 10;
        theAudienceMember.failSprite.layer    = 10;
    }
Example #10
0
    public override void StartState(AudienceMemberController theAudienceMember)
    {
        // Getting the question to show
        if (theAudienceMember.useGlobalQuestionSet)
        {
            theAudienceMember.theQuestion = QuestionsManager.instance.GetQuestion();
        }
        else
        {
            int pickedQuestion = Random.Range(0, theAudienceMember.possibleStartQuestions.Length);
            theAudienceMember.theQuestion = theAudienceMember.possibleStartQuestions[pickedQuestion];
        }

        // Showing Question To Player
        if (QuestionUIManager.instance.OpenUI(theAudienceMember))
        {
            theAudienceMember.StartCoroutine(this.StartAnim(theAudienceMember));
        }
        else
        {
            theAudienceMember.ChangeState(AudienceStates.AUDIENCE_IDLE, false);
        }
    }
Example #11
0
 public override void StartState(AudienceMemberController theAudienceMember)
 {
     theAudienceMember.StartCoroutine(DelayStart(theAudienceMember));
 }
Example #12
0
 public virtual void StartState(AudienceMemberController theAudienceMember)
 {
 }
Example #13
0
 public virtual void UpdateState(AudienceMemberController theAudienceMember)
 {
 }