| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172 | 
							- using System.Collections;
 
- using System.Collections.Generic;
 
- using UnityEngine;
 
- namespace CalmWater
 
- {
 
- 	[RequireComponent(typeof(Projector))]
 
- 	public class CausticAnimator : MonoBehaviour 
 
- 	{
 
- 		[SerializeField]
 
- 		private float _frameDuration = 0.1f;
 
- 		[SerializeField]
 
- 		private Texture2D[] _causticFrames = null;
 
- 		private Projector _projector;
 
- 		private Material _mat;
 
- 		private WaitForSeconds _delay;
 
- 		private int _propID;
 
- 		private int _currentFrame = 0;
 
- 		void OnEnable()
 
- 		{
 
- 			if (_causticFrames.Length < 2) 
 
- 			{
 
- 				enabled = false;
 
- 			}
 
- 			if (_projector == null) 
 
- 			{
 
- 				_projector = GetComponent<Projector> ();
 
- 			}
 
- 			if (_mat == null) 
 
- 			{
 
- 				_mat = _projector.material;
 
- 			}
 
- 			_currentFrame = 0;
 
- 			_propID = Shader.PropertyToID ("_CausticTex");
 
- 			_delay 	= new WaitForSeconds (_frameDuration);
 
- 		}
 
- 		void OnDisabled()
 
- 		{
 
- 			StopCoroutine (AnimateCaustic ());
 
- 		}
 
- 		void Awake()
 
- 		{
 
- 			StartCoroutine (AnimateCaustic());
 
- 		}
 
- 		private int NextFrame()
 
- 		{
 
- 			_currentFrame ++;
 
- 			_currentFrame = _currentFrame >= _causticFrames.Length ? 0 : _currentFrame;
 
- 			return _currentFrame;
 
- 		}
 
- 		IEnumerator AnimateCaustic()
 
- 		{
 
- 			while (true) 
 
- 			{
 
- 				yield return _delay;
 
- 				_mat.SetTexture (_propID, _causticFrames[NextFrame ()]);
 
- 			}
 
- 		}
 
- 	}
 
- }
 
 
  |