public void Update()
    {
        Vector3 ssPositionOld = Camera.main.WorldToScreenPoint(transform.position);

        if (CurrentAction == NpcAction.Idle ||
            CurrentAction == NpcAction.Idle3 ||
            CurrentAction == NpcAction.Walk)
        {
            TimeSinceActionChange += Time.deltaTime;
            if (TimeUntilActionChange <= TimeSinceActionChange)
            {
                ToggleAction();
            }
        }
        else if (!CurrentTiming.Loop && CurrentTiming.Ended && CurrentAction != NpcAction.Hide)
        {
            ToggleAction();
        }

        if (CurrentAction != NpcAction.Talk)
        {
            if (CanTalk && (NPC.Speech.Count > 0 || NPC.CustomSpeechLine != null))
            {
                Talk();
            }
            if (CurrentAction == NpcAction.Walk)
            {
                Walk();
            }
        }
        else if (StopTalking() && CurrentAction != NpcAction.TakeOff)
        {
            ToggleAction();
        }

        Vector3 ssPosition = Camera.main.WorldToScreenPoint(transform.position);
        bool    lookingRight;

        if (FezHelper.AlmostEqual(ssPositionOld.x, ssPosition.x))
        {
            lookingRight = LookingRight;
        }
        else
        {
            lookingRight = ssPositionOld.x < ssPosition.x;
        }
        if (lookingRight)
        {
            transform.LookAt(transform.position + (transform.position - Camera.main.transform.position));
        }
        else
        {
            transform.LookAt(Camera.main.transform.position);
        }
    }
Example #2
0
    public void Update()
    {
        Vector3 ssPositionOld = Camera.main.WorldToScreenPoint(transform.position);

        if (CurrentAction == NpcAction.Idle ||
            CurrentAction == NpcAction.Idle3 ||
            CurrentAction == NpcAction.Walk)
        {
            TimeSinceActionChange += Time.deltaTime;
            if (TimeUntilActionChange <= TimeSinceActionChange)
            {
                ToggleAction();
            }
        }
        else if (!CurrentTiming.Loop && CurrentTiming.Ended && CurrentAction != NpcAction.Hide)
        {
            ToggleAction();
        }

        bool shouldStopTalking = ShouldStopTalking != null && ShouldStopTalking(this);

        if (shouldStopTalking)
        {
            CurrentTextLine = -1;
        }

        if (CurrentAction != NpcAction.Talk)
        {
            if (ShouldStartTalking != null && CanTalk && (NPC.Speech.Count > 0 || NPC.CustomSpeechLine != null) && CurrentTextLine == -1 && ShouldStartTalking(this))
            {
                CurrentAction = NpcAction.Talk;
                UpdateText(0);
            }
            if (CurrentAction == NpcAction.Walk)
            {
                Walk();
            }
        }
        else if ((shouldStopTalking || CurrentTextLine < 0 || CurrentTextLine >= NPC.Speech.Count) && CurrentAction != NpcAction.TakeOff)
        {
            StartCoroutine(FadeTextOut());
            ToggleAction();
        }
        else
        {
            Talking(this);
        }

        transform.LookAt(transform.position + (transform.position - Camera.main.transform.position));
        Vector3 ssPosition = Camera.main.WorldToScreenPoint(transform.position);
        bool    lookingRight;

        if (FezHelper.AlmostEqual(ssPositionOld.x, ssPosition.x))
        {
            lookingRight = LookingRight;
        }
        else
        {
            lookingRight = ssPositionOld.x < ssPosition.x;
        }
        if ((!lookingRight && 0f < meshRenderer.sharedMaterial.mainTextureScale.x) ||
            (lookingRight && meshRenderer.sharedMaterial.mainTextureScale.x < 0f))
        {
            CurrentAnimation.FlipH = !lookingRight;
        }
    }