protected virtual void OnEnable()
 {
     if (canSlideFromCurrentState())
     {
         animator.SetBool(AnimationHashes.Params.Slide, value: true);
         wasInAirAtStart    = LocomotionUtils.IsInAir(LocomotionUtils.GetAnimatorStateInfo(animator));
         IsSliding          = false;
         isFloatingOnWater  = false;
         isSupportedByWater = false;
         lastSplashTime     = -1f;
         impulses           = base.gameObject.AddComponent <ForceAccumulatorPrimitive>();
         impulses.SetData(mutableData.ImpulseProperties);
         impulses.enabled            = true;
         mutableData.WaterProperties = MasterData.WaterProperties;
         maxSpeedOnWaterWhenSteering = mutableData.WaterProperties.MaxSpeed;
         curSpeedOnWater             = motion.Velocity.magnitude;
         curSpeedOnWater             = Mathf.Clamp(curSpeedOnWater, 0f, maxSpeedOnWaterWhenSteering);
         momentumAtStart             = motion.Velocity;
         if (mutableData.WaterRipples != null)
         {
             waterRipples = Object.Instantiate(mutableData.WaterRipples);
             waterRipples.Stop();
             CameraCullingMaskHelper.SetLayerIncludingChildren(waterRipples.transform, LayerMask.LayerToName(base.gameObject.layer));
         }
         base.Broadcaster.OnInteractionPreStartedEvent += onInteractionPreStartedEvent;
     }
     else
     {
         base.enabled = false;
     }
 }
        private void OnEnable()
        {
            animator.SetTrigger(AnimationHashes.Params.Swim);
            swim = base.gameObject.AddComponent <SwimPrimitive>();
            swim.SetData(mutableData.SwimProperties);
            swim.enabled          = true;
            swim.SurfaceHeight    = logicalSurfaceHeight;
            swim.IsInShallowWater = isInShallowWater;
            impulses = base.gameObject.AddComponent <ForceAccumulatorPrimitive>();
            impulses.SetData(mutableData.ImpulseProperties);
            impulses.enabled = true;
            curState         = State.None;
            Vector3 position = base.transform.position;

            position.y = logicalSurfaceHeight;
            if (isCloseToSurface())
            {
                base.transform.position = position;
            }
            dispatcher.AddListener <DivingEvents.AirSupplyUpdated>(onAirSupplyUpdated);
            if (CompareTag("Player"))
            {
                LoadContextualControlsLayout();
            }
            resetIK(null);
        }