/// <summary> /// Cache the materials to animate and anything else worth saving. /// </summary> private void Start() { var renderers = GetComponentsInChildren <Renderer>(); for (int i = 0; i < renderers.Length; ++i) { var rend = renderers[i]; if (!rend.material.HasProperty(diffuseName)) { continue; } if (!rend.material.HasProperty(emissiveName)) { continue; } AnimMat animMat = new AnimMat() { material = rend.material, diffuse = rend.material.GetColor(diffuseName), emissive = rend.material.GetColor(emissiveName), }; rend.material.SetColor(diffuseName, Color.black); SetIntensity(0.0f, animMat); materials.Add(animMat); } initScale = transform.localScale; age = 0.0f; }
/// <summary> /// Ramp up the animation at beginning. /// </summary> /// <param name="age"></param> private void RampUp(float age) { float intensity = SmoothStep(0.0f, 1.0f, age / rampUp); for (var iter = materials.GetEnumerator(); iter.MoveNext();) { AnimMat animMat = iter.Current; SetIntensity(intensity, animMat); } SetSizeFromAge(age); }
/// <summary> /// Turn off the animation at the end. /// </summary> private void SetStatic() { #if BARN_DISABLE_AT_END gameObject.SetActive(false); #else for (var iter = materials.GetEnumerator(); iter.MoveNext();) { AnimMat animMat = iter.Current; Color emissive = animMat.diffuse; animMat.material.SetColor(emissiveName, emissive); } #endif }
/// <summary> /// Interpolate between original emissive and diffuse colors based on intensity. /// </summary> /// <param name="intensity">Interpolant, as intensity goes to one, color goes to diffuse.</param> /// <param name="animMat">Which material to set.</param> private void BlendIntensity(float intensity, AnimMat animMat) { Color emissive = animMat.emissive * intensity + animMat.diffuse * (1.0f - intensity); animMat.material.SetColor(emissiveName, emissive); }
/// <summary> /// Set the emissive color to intensity. /// </summary> /// <param name="intensity">Intensity to set emissive.</param> /// <param name="animMat">Which material to set.</param> private void SetIntensity(float intensity, AnimMat animMat) { Color emissive = animMat.emissive * intensity; animMat.material.SetColor(emissiveName, emissive); }