goobatog@yahoo.co.uk
This code is used for basic sprite animationsZachhe
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...