goobatog@yahoo.co.uk

This code is used for basic sprite animations
 avatar
Zachhe
csharp
4 years ago
8.5 kB
8
Indexable
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Aron : MonoBehaviour
{
	public static Aron Instance;

	private List<SpriteRendClass> SRPSList;

	public bool[] ChumBools;

	public int ChumInt;

    void Awake()
	{
		Instance = this;
		SRPSList = new List<SpriteRendClass>();
		ChumBools = new bool[1000];
	}

	private SpriteRendClass AddSRPSClassToTheList(SpriteRenderer SR, Sprite[] AnimatingSprites, Sprite FinishingSprite, float AnimSpeed, bool IsAnimSpeedTotalTime = false)
	{
		SpriteRendClass SRPSC = new SpriteRendClass();

		if(IsAnimSpeedTotalTime)
		{
			AnimSpeed /= AnimatingSprites.Length;
		}

		SRPSC.SetValues(SR, AnimSpeed, AnimatingSprites, FinishingSprite);

		SRPSList.Add(SRPSC);

		return SRPSC;
	}

	private int SortChum()
	{
		ChumInt++;

		if(ChumInt >= ChumBools.Length)
		{
			ChumInt = 0;
		}

		ChumBools[ChumInt] = true;

		return ChumInt;
	}

	public void CancelChumBool(int chumInt)
	{
		ChumBools[chumInt] = false;
	}

	public int PlayForwardOnce( SpriteRenderer SR, Sprite [] AnimatingSprites, Sprite FinishingSprite, float AnimSpeed, bool IsAnimSpeedTotalTime = false)
	{
		CancelAnimation(SR);

		SpriteRendClass SRPSC = AddSRPSClassToTheList(SR, AnimatingSprites, FinishingSprite, AnimSpeed,IsAnimSpeedTotalTime);

		int Chum = SortChum();

		StartCoroutine(PlayAnimForwardOnceRoutine(SRPSC, Chum));

		return Chum;
	}

	private IEnumerator PlayAnimForwardOnceRoutine(SpriteRendClass SRClass, int Chum)
	{
		float time = 0;
		int SpriteFrame = 0;
		bool StopAnimating = false;

		SRClass.SR.sprite = SRClass.AnimatingSprites[SpriteFrame];

		while(ChumBools[Chum] && !StopAnimating && SRClass.SR != null)
		{
			time += Time.deltaTime;

			while(time >= SRClass.AnimSpeed)
			{
				time -= SRClass.AnimSpeed;

				SpriteFrame++;

				if (SpriteFrame >= SRClass.AnimatingSprites.Length)
				{
					StopAnimating = true;
				}
				else
				{
					SRClass.SR.sprite = SRClass.AnimatingSprites[SpriteFrame];
				}
				
			}

			yield return null;
		}

		if (SRClass.FinishingSprite != null && SRClass.SR != null)
		{
			SRClass.SR.sprite = SRClass.FinishingSprite;
		}

		ChumBools[Chum] = false;

		SRPSList.Remove(SRClass);
	}



	public int PlayBackwardsOnce(SpriteRenderer SR, Sprite[] AnimatingSprites, Sprite FinishingSprite, float AnimSpeed, bool IsAnimSpeedTotalTime = false)
	{
		CancelAnimation(SR);

		SpriteRendClass SRPSC = AddSRPSClassToTheList(SR, AnimatingSprites, FinishingSprite, AnimSpeed,IsAnimSpeedTotalTime);

		int Chum = SortChum();

		StartCoroutine(PlayAnimBackwardsOnceRoutine(SRPSC, Chum));

		return Chum;
	}

	private IEnumerator PlayAnimBackwardsOnceRoutine(SpriteRendClass SRClass, int Chum)
	{
		float time = 0;
		int SpriteFrame = SRClass.AnimatingSprites.Length - 1;
		bool StopAnimating = false;

		SRClass.SR.sprite = SRClass.AnimatingSprites[SpriteFrame];

		while (ChumBools[Chum] && !StopAnimating && SRClass.SR != null)
		{
			time += Time.deltaTime;

			while (time >= SRClass.AnimSpeed)
			{
				time -= SRClass.AnimSpeed;

				SpriteFrame--;

				if (SpriteFrame < 0)
				{
					StopAnimating = true;
				}
				else
				{
					SRClass.SR.sprite = SRClass.AnimatingSprites[SpriteFrame];
				}

			}

			yield return null;
		}

		if (SRClass.FinishingSprite != null && SRClass.SR != null)
		{
			SRClass.SR.sprite = SRClass.FinishingSprite;
		}

		ChumBools[Chum] = false;

		SRPSList.Remove(SRClass);
	}

	public int PlayPingPongOnce(SpriteRenderer SR, Sprite[] AnimatingSprites, Sprite FinishingSprite, float AnimSpeed, bool IsAnimSpeedTotalTime = false)
	{
		CancelAnimation(SR);

		SpriteRendClass SRPSC = AddSRPSClassToTheList(SR, AnimatingSprites, FinishingSprite, AnimSpeed,IsAnimSpeedTotalTime);

		int Chum = SortChum();

		StartCoroutine(PlayPingPongOnceRoutine(SRPSC, Chum));

		return Chum;
	}

	private IEnumerator PlayPingPongOnceRoutine(SpriteRendClass SRClass, int Chum)
	{
		float time = 0;
		int SpriteFrame = 0;

		bool StopAnimating = false;
		bool GoingUp = true;

		SRClass.SR.sprite = SRClass.AnimatingSprites[SpriteFrame];

		while (ChumBools[Chum] && !StopAnimating && SRClass.SR != null)
		{
			time += Time.deltaTime;

			while (time >= SRClass.AnimSpeed)
			{
				time -= SRClass.AnimSpeed;
				if (GoingUp)
				{
					SpriteFrame++;

					if (SpriteFrame >= SRClass.AnimatingSprites.Length)
					{
						GoingUp = false;
						SpriteFrame = SRClass.AnimatingSprites.Length - 2;

					}

					SRClass.SR.sprite = SRClass.AnimatingSprites[SpriteFrame];

				}
				else
				{
					SpriteFrame--;

					if (SpriteFrame < 0)
					{
						SpriteFrame = 0;
						StopAnimating = true;
					}

					SRClass.SR.sprite = SRClass.AnimatingSprites[SpriteFrame];
				}
			}

			yield return null;
		}

		if (SRClass.FinishingSprite != null && SRClass.SR != null)
		{
			SRClass.SR.sprite = SRClass.FinishingSprite;
		}

		ChumBools[Chum] = false;

		SRPSList.Remove(SRClass);
	}

	public int PlayForwardContinuosly(SpriteRenderer SR, Sprite[] AnimatingSprites, Sprite FinishingSprite, float AnimSpeed)
	{
		CancelAnimation(SR);

		SpriteRendClass SRPSC = AddSRPSClassToTheList(SR, AnimatingSprites, FinishingSprite, AnimSpeed);

		int Chum = SortChum();

		StartCoroutine(PlayForwardContinuouslyRoutine(SRPSC, Chum));

		return Chum;
	}

	private IEnumerator PlayForwardContinuouslyRoutine(SpriteRendClass SRClass, int Chum)
	{
		float time = 0;
		int SpriteFrame = 0;

		SRClass.SR.sprite = SRClass.AnimatingSprites[SpriteFrame];

		while (ChumBools[Chum] && SRClass.SR != null)
		{
			time += Time.deltaTime;

			while (time >= SRClass.AnimSpeed)
			{
				time -= SRClass.AnimSpeed;
				
				SpriteFrame++;

				if (SpriteFrame >= SRClass.AnimatingSprites.Length)
				{
					SpriteFrame = 0;
				}

				SRClass.SR.sprite = SRClass.AnimatingSprites[SpriteFrame];

				
			}

			yield return null;
		}

		if (SRClass.FinishingSprite != null && SRClass.SR != null)
		{
			SRClass.SR.sprite = SRClass.FinishingSprite;
		}

		//ChumBools[Chum] = false;

		SRPSList.Remove(SRClass);
	}

	public int PlayPingPongContinuosly(SpriteRenderer SR, Sprite[] AnimatingSprites, Sprite FinishingSprite, float AnimSpeed)
	{
		CancelAnimation(SR);

		SpriteRendClass SRPSC = AddSRPSClassToTheList(SR, AnimatingSprites, FinishingSprite, AnimSpeed);

		int Chum = SortChum();

		StartCoroutine(PlayPingPongContinuouslyRoutine(SRPSC, Chum));

		return Chum;
	}

	private IEnumerator PlayPingPongContinuouslyRoutine(SpriteRendClass SRClass, int Chum)
	{
		float time = 0;
		int SpriteFrame = 0;

		bool GoingUp = true;

		SRClass.SR.sprite = SRClass.AnimatingSprites[SpriteFrame];

		while (ChumBools[Chum] && SRClass.SR != null)
		{
			time += Time.deltaTime;

			while (time >= SRClass.AnimSpeed)
			{
				time -= SRClass.AnimSpeed;
				if (GoingUp)
				{
					SpriteFrame++;

					if (SpriteFrame >= SRClass.AnimatingSprites.Length)
					{
						GoingUp = false;
						SpriteFrame = SRClass.AnimatingSprites.Length - 2;

					}
					
					SRClass.SR.sprite = SRClass.AnimatingSprites[SpriteFrame];
					
				}
				else
				{
					SpriteFrame--;

					if (SpriteFrame < 0)
					{
						GoingUp = true;
						SpriteFrame = 1;
					}
					
					SRClass.SR.sprite = SRClass.AnimatingSprites[SpriteFrame];
				}
			}

			yield return null;
		}

		if (SRClass.FinishingSprite != null && SRClass.SR != null)
		{
			SRClass.SR.sprite = SRClass.FinishingSprite;
		}

		//ChumBools[Chum] = false;

		SRPSList.Remove(SRClass);
	}

	public void CancelAnimation(SpriteRenderer SR)
	{
		for(int i = 0; i < SRPSList.Count; i++)
		{
			if(SR == SRPSList[i].SR)
			{
				SRPSList[i].SR = null;
				break;
			}
		}
	}
}

public class SpriteRendClass
{
	//private GameObject GO;
	public SpriteRenderer SR;
	public float AnimSpeed;
	public Sprite[] AnimatingSprites;
	public Sprite FinishingSprite;

	public void SetValues(SpriteRenderer spriteRenderer,float animSpeed, Sprite [] animatingSprites, Sprite finishingSprite)
	{
		//GO = gameObject;
		SR = spriteRenderer;
		AnimSpeed = animSpeed;
		AnimatingSprites = animatingSprites;
		FinishingSprite = finishingSprite;
	}
}


Editor is loading...