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