1 using System;
2 using
UnityEngine;
3
4 namespace
UnityStandardAssets.Vehicles.Aeroplane
5 {
6     
public class AeroplanePropellerAnimator : MonoBehaviour
7     {
8         [SerializeField]
private Transform m_PropellorModel; // The model of the the aeroplane's propellor.
9         [SerializeField]
private Transform m_PropellorBlur; // The plane used for the blurred propellor textures.
10         [SerializeField]
private Texture2D[] m_PropellorBlurTextures; // An array of increasingly blurred propellor textures.
11         [SerializeField] [Range(
0f, 1f)] private float m_ThrottleBlurStart = 0.25f; // The point at which the blurred textures start.
12         [SerializeField] [Range(
0f, 1f)] private float m_ThrottleBlurEnd = 0.5f; // The point at which the blurred textures stop changing.
13         [SerializeField]
private float m_MaxRpm = 2000; // The maximum speed the propellor can turn at.
14
15         
private AeroplaneController m_Plane; // Reference to the aeroplane controller.
16         
private int m_PropellorBlurState = -1; // To store the state of the blurred textures.
17         
private const float k_RpmToDps = 60f; // For converting from revs per minute to degrees per second.
18         
private Renderer m_PropellorModelRenderer;
19         
private Renderer m_PropellorBlurRenderer;
20
21
22         
private void Awake()
23         {
24             
// Set up the reference to the aeroplane controller.
25             m_Plane = GetComponent<AeroplaneController>();
26
27             m_PropellorModelRenderer = m_PropellorModel.GetComponent<Renderer>();
28             m_PropellorBlurRenderer = m_PropellorBlur.GetComponent<Renderer>();
29
30             
// Set the propellor blur gameobject's parent to be the propellor.
31             m_PropellorBlur.parent = m_PropellorModel;
32         }
33
34
35         
private void Update()
36         {
37             
// Rotate the propellor model at a rate proportional to the throttle.
38             m_PropellorModel.Rotate(
0, m_MaxRpm*m_Plane.Throttle*Time.deltaTime*k_RpmToDps, 0);
39
40             
// Create an integer for the new state of the blur textures.
41             
var newBlurState = 0;
42
43             
// choose between the blurred textures, if the throttle is high enough
44             
if (m_Plane.Throttle > m_ThrottleBlurStart)
45             {
46                 
var throttleBlurProportion = Mathf.InverseLerp(m_ThrottleBlurStart, m_ThrottleBlurEnd, m_Plane.Throttle);
47                 newBlurState = Mathf.FloorToInt(throttleBlurProportion*(m_PropellorBlurTextures.Length -
1));
48             }
49
50             
// If the blur state has changed
51             
if (newBlurState != m_PropellorBlurState)
52             {
53                 m_PropellorBlurState = newBlurState;
54
55                 
if (m_PropellorBlurState == 0)
56                 {
57                     
// switch to using the 'real' propellor model
58                     m_PropellorModelRenderer.enabled =
true;
59                     m_PropellorBlurRenderer.enabled =
false;
60                 }
61                 
else
62                 {
63                     
// Otherwise turn off the propellor model and turn on the blur.
64                     m_PropellorModelRenderer.enabled =
false;
65                     m_PropellorBlurRenderer.enabled =
true;
66
67                     
// set the appropriate texture from the blur array
68                     m_PropellorBlurRenderer.material.mainTexture = m_PropellorBlurTextures[m_PropellorBlurState];
69                 }
70             }
71         }
72     }
73 }