Example #1
0
    //Move along Zipline
    //Called for every fixedupdate that this module is active
    public override void FixedUpdateModule()
    {
        if (m_CanJumpFromZipline)
        {
            if (TryZiplineJump())
            {
                EndModule();
                return;
            }
        }

        if (m_CurrentZipline == null)
        {
            return;
        }

        Vector3 travelSpeed = m_CurrentZipline.GetTravelVelocity(GetAttachPoint(), m_ControlledCollider.GetVelocity());
        Vector3 dir         = m_CurrentZipline.GetTravelDirection(GetAttachPoint(), travelSpeed);
        Vector3 acceleration;

        if (travelSpeed.magnitude < m_MaxSpeed)
        {
            acceleration = dir * m_DownhillAcceleration * Time.fixedDeltaTime;
            if (dir.y > 0.0f)              //We're going uphill, so use our uphillacceleration (usually negative so that we start sliding down)
            {
                acceleration = dir * m_UphillAcceleration * Time.fixedDeltaTime;
            }
        }
        else        //We're going too fast, so let's slow down
        {
            acceleration = -dir * m_Deceleration * Time.fixedDeltaTime;
        }
        travelSpeed += acceleration;
        if (!m_ControlledCollider.GetCapsuleTransform().CanMove(travelSpeed * Time.fixedDeltaTime))
        {
            //We're probably being blocked by something, reset our forward velocity
            travelSpeed *= 0.0f;
        }

        m_ControlledCollider.UpdateWithVelocity(travelSpeed);

        //Clamp to the Zipline after we've moved
        Vector3 position    = GetAttachPoint();
        Vector3 newPosition = m_CurrentZipline.GetClosestPointOnZipline(position);

        SetAttachPoint(newPosition);
        m_ControlledCollider.UpdateContextInfo();
    }