Пример #1
0
 private void CalculateTrackAnimationSpeed(Track track, AliveChassisAnimationNode node, float maxSpeed, float dt)
 {
     if (this.HasCorrectContacts(track, node.rigidbody.Rigidbody))
     {
         this.AnimateTrackWithContacts(track, node, dt);
     }
     else
     {
         this.AnimateTrackWithoutContacts(track, node, maxSpeed, dt);
     }
 }
Пример #2
0
        private void AnimateTrackWithContacts(Track track, AliveChassisAnimationNode node, float dt)
        {
            ChassisComponent chassis           = node.chassis;
            float            forwardTrackSpeed = this.GetForwardTrackSpeed(track, node.rigidbody.Rigidbody);

            if (this.RequiresSynchronizedAnimation(track, chassis, forwardTrackSpeed))
            {
                track.animationSpeed = forwardTrackSpeed;
            }
            else
            {
                float targetValue = this.GetDesiredSpeedCoeff(track, chassis) * 0.05f;
                track.SetAnimationSpeed(targetValue, node.speed.Acceleration * dt);
            }
        }
Пример #3
0
 public void AnimateWheelsAndTracksRotation(TimeUpdateEvent evt, AliveChassisAnimationNode node)
 {
     if (node.cameraVisibleTrigger.IsVisibleAtRange(50f))
     {
         ChassisAnimationComponent chassisAnimation = node.chassisAnimation;
         TrackComponent            track            = node.track;
         TrackController           leftTrack        = node.chassisTrackController.LeftTrack;
         TrackController           rightTrack       = node.chassisTrackController.RightTrack;
         float maxSpeed  = node.effectiveSpeed.MaxSpeed;
         float deltaTime = evt.DeltaTime;
         this.CalculateTrackAnimationSpeed(track.LeftTrack, node, maxSpeed, deltaTime);
         chassisAnimation.LeftTrackPosition += (track.LeftTrack.animationSpeed * deltaTime) * 0.5f;
         leftTrack.UpdateWheelsRotation(chassisAnimation.LeftTrackPosition);
         this.CalculateTrackAnimationSpeed(track.RightTrack, node, maxSpeed, deltaTime);
         chassisAnimation.RightTrackPosition += (track.RightTrack.animationSpeed * deltaTime) * 0.5f;
         rightTrack.UpdateWheelsRotation(chassisAnimation.RightTrackPosition);
         if (chassisAnimation.TracksMaterial != null)
         {
             float   num4   = -chassisAnimation.RightTrackPosition * chassisAnimation.tracksMaterialSpeedMultiplyer;
             Vector2 vector = new Vector2((-chassisAnimation.LeftTrackPosition * chassisAnimation.tracksMaterialSpeedMultiplyer) % 1f, num4 % 1f);
             chassisAnimation.TracksMaterial.SetVector(TankMaterialPropertyNames.TRACKS_OFFSET, vector);
         }
     }
 }
Пример #4
0
        private void AnimateTrackWithoutContacts(Track track, AliveChassisAnimationNode node, float maxSpeed, float dt)
        {
            float targetValue = Mathf.Clamp((maxSpeed * node.chassis.EffectiveMoveAxis) + (((-node.chassis.EffectiveTurnAxis * maxSpeed) / 2f) * track.side), -maxSpeed, maxSpeed);

            track.SetAnimationSpeed(targetValue, node.speed.Acceleration * dt);
        }