Exemple #1
0
        private void LateUpdate()
        {
            if (GameManager.Instance.IsLoadingLevel || Dungeon.IsGenerating)
            {
                return;
            }
            if (AttachTarget != null)
            {
                if (AttachTarget is AIActor && (!AttachTarget || AttachTarget.healthHaver.IsDead))
                {
                    Destroy(gameObject);
                    return;
                }
                m_targetLength = ScarfLength;
                bool flag = false;
                if (AttachTarget is PlayerController)
                {
                    PlayerController playerController = AttachTarget as PlayerController;
                    m_mr.enabled          = (playerController.IsVisible && playerController.sprite.renderer.enabled);
                    m_mr.gameObject.layer = playerController.gameObject.layer;
                    if (playerController.FacingDirection <= 155f && playerController.FacingDirection >= 25f)
                    {
                        flag = true;
                    }
                    if (playerController.IsFalling)
                    {
                        m_targetLength = 0.05f;
                    }
                }
                else if (AttachTarget is AIActor)
                {
                    AIActor AIActorController = AttachTarget as AIActor;
                    m_mr.enabled          = (AIActorController.sprite.renderer.enabled);
                    m_mr.gameObject.layer = AIActorController.gameObject.layer;
                    if (AIActorController.FacingDirection <= 155f && AIActorController.FacingDirection >= 25f)
                    {
                        flag = true;
                    }
                    if (AIActorController.IsFalling)
                    {
                        m_targetLength = 0.05f;
                    }
                }

                m_currentLength = Mathf.MoveTowards(m_currentLength, m_targetLength, BraveTime.DeltaTime * 2.5f);
                if (m_currentLength < 0.1f)
                {
                    m_mr.enabled = false;
                }

                Vector2 lastCommandedDirection = new Vector2(0, 0);

                if (AttachTarget is PlayerController)
                {
                    lastCommandedDirection = (AttachTarget as PlayerController).LastCommandedDirection;
                }
                else if (AttachTarget is AIActor)
                {
                    // float X = (AttachTarget as AIActor).aiAnimator.FacingDirection;
                    // lastCommandedDirection = new Vector2(X, X);
                    if (AttachTarget.specRigidbody)
                    {
                        lastCommandedDirection = AttachTarget.specRigidbody.Velocity;
                    }
                }

                if (lastCommandedDirection.magnitude < 0.125f)
                {
                    m_isLerpingBack = true;
                }
                else
                {
                    m_isLerpingBack = false;
                }

                float num = m_lastVelAngle;
                if (m_isLerpingBack)
                {
                    float num2 = Mathf.DeltaAngle(m_lastVelAngle, -45f);
                    float num3 = Mathf.DeltaAngle(m_lastVelAngle, 135f);
                    float num4 = ((num2 <= num3) ? 0 : 180);
                    num = num4;
                }
                else
                {
                    num = BraveMathCollege.Atan2Degrees(lastCommandedDirection);
                }

                m_lastVelAngle = Mathf.LerpAngle(m_lastVelAngle, num, BraveTime.DeltaTime * AngleLerpSpeed * Mathf.Lerp(1f, 2f, Mathf.DeltaAngle(m_lastVelAngle, num) / 180f));
                float d = m_currentLength * Mathf.Lerp(2f, 1f, Vector2.Distance(transform.position.XY(), AttachTarget.sprite.WorldCenter) / 3f);
                m_currentOffset = (Quaternion.Euler(0f, 0f, m_lastVelAngle) * Vector2.left * d).XY();
                Vector2 b = Vector2.Lerp(MinOffset, MaxOffset, Mathf.SmoothStep(0f, 1f, Mathf.PingPong(Time.realtimeSinceStartup * AnimationSpeed, 3f) / 3f));
                m_currentOffset += b;
                Vector3 vector  = AttachTarget.sprite.WorldCenter + new Vector2(0f, -0.3125f);
                Vector3 vector2 = vector + m_currentOffset.ToVector3ZisY(-3f);
                float   num5    = Vector3.Distance(transform.position, vector2);
                if (num5 > 10f)
                {
                    transform.position = vector2;
                }
                else
                {
                    transform.position = Vector3.MoveTowards(transform.position, vector2, BraveMathCollege.UnboundedLerp(1f, 10f, num5 / CatchUpScale) * BraveTime.DeltaTime);
                }
                Vector2 b2 = vector2.XY() - transform.position.XY();
                m_additionalOffsetTime += UnityEngine.Random.Range(0f, BraveTime.DeltaTime);
                BuildMeshAlongCurve(vector, vector.XY() + new Vector2(0f, 0.1f), transform.position.XY() + b2, transform.position.XY(), (!flag) ? ForwardZOffset : BackwardZOffset);
                m_mesh.vertices = m_vertices;
                m_mesh.RecalculateBounds();
                m_mesh.RecalculateNormals();
            }
        }