//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(); }